WP_Duotone::colord_parse_hsla_string()private staticWP 6.3.0

Parses a valid HSL[A] CSS color function/string.

Direct port of colord's parseHslaString function.

Method of the class: WP_Duotone{}

No Hooks.

Return

Array|null. An array of RGBA values or null if the RGB string is invalid.

Usage

$result = WP_Duotone::colord_parse_hsla_string( $input );
$input(string) (required)
The HSLA string to parse.

Changelog

Since 6.3.0 Introduced.

WP_Duotone::colord_parse_hsla_string() code WP 6.6.2

private static function colord_parse_hsla_string( $input ) {
	// Functional syntax.
	$is_match = preg_match(
		'/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i',
		$input,
		$match
	);

	if ( ! $is_match ) {
		// Whitespace syntax.
		$is_match = preg_match(
			'/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i',
			$input,
			$match
		);
	}

	if ( ! $is_match ) {
		return null;
	}

	/*
	 * For some reason, preg_match doesn't include empty matches at the end
	 * of the array, so we add them manually to make things easier later.
	 */
	for ( $i = 1; $i <= 6; $i++ ) {
		if ( ! isset( $match[ $i ] ) ) {
			$match[ $i ] = '';
		}
	}

	$hsla = self::colord_clamp_hsla(
		array(
			'h' => self::colord_parse_hue( $match[1], $match[2] ),
			's' => (float) $match[3],
			'l' => (float) $match[4],
			'a' => '' === $match[5] ? 1 : (float) $match[5] / ( $match[6] ? 100 : 1 ),
		)
	);

	return self::colord_hsla_to_rgba( $hsla );
}