gan_node_html.php
protected function match_attributes($attributes) {
		$res = false;

		foreach($attributes as $attribute => $match) {
			if (!is_array($match)) {
				$match = array(
					'operator_value' => 'equals',
					'value' => $match,
					'match' => true,
					'operator_result' => 'or',
					'compare' => 'total',
					'case_sensitive' => false
				);
			} else {
				if (is_int($attribute)) {
					$attribute = $match['attribute'];
				}
				if (!isset($match['match'])) {
					$match['match'] = true;
				}
				if (!isset($match['operator_result'])) {
					$match['operator_result'] = 'or';
				}
				if (!isset($match['compare'])) {
					$match['compare'] = 'total';
				}
				if (!isset($match['case_sensitive'])) {
					$match['case_sensitive'] = false;
				}
			}

			if (is_string($match['value']) && (!$match['case_sensitive'])) {
				$match['value'] = strtolower($match['value']);
			}

			if (($match['operator_result'] === 'and') && (!$res)) {
				return false;
			} elseif (!($res && ($match['operator_result'] === 'or'))) {
				$possibles = $this->findAttribute($attribute, $match['compare'], $match['case_sensitive']);

				$has = (is_array($possibles) && $possibles);
				$res = (($match['value'] === $has) || (($match['match'] === false) && ($has === $match['match'])));

				if ((!$res) && $has && is_string($match['value'])) {
					foreach($possibles as $a) {
						$val = $this->attributes[$a[2]];
						if (is_string($val) && (!$match['case_sensitive'])) {
							$val = strtolower($val);
						}

						switch($match['operator_value']) {
							case '%=':
							case 'contains_regex':
								$res = ((preg_match('`'.$match['value'].'`s', $val) > 0) === $match['match']);
								if ($res) break 1; else break 2;

							case '|=':
							case 'contains_prefix':
								$res = ((preg_match('`\b'.preg_quote($match['value']).'[\-\s]`s', $val) > 0) === $match['match']);
								if ($res) break 1; else break 2;

							case '~=':
							case 'contains_word':
								$res = ((preg_match('`\s'.preg_quote($match['value']).'\s`s', " $val ") > 0) === $match['match']);
								if ($res) break 1; else break 2;

							case '*=':
							case 'contains':
								$res = ((strpos($val, $match['value']) !== false) === $match['match']);
								if ($res) break 1; else break 2;

							case '$=':
							case 'ends_with':
								$res = ((substr($val, -strlen($match['value'])) === $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							case '^=':
							case 'starts_with':
								$res = ((substr($val, 0, strlen($match['value'])) === $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							case '!=':
							case 'not_equal':
								$res = (($val !== $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							case '=':
							case 'equals':
								$res = (($val === $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							case '>=':
							case 'bigger_than':
								$res = (($val >= $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							case '<=':
							case 'smaller_than':
								$res = (($val >= $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							default:
								trigger_error('Unknown operator "'.$match['operator_value'].'" to match attributes!');
								return false;
						}
					}
				}
			}
		}

		return $res;
	}
protected function match_attributes($attributes) {
		$res = false;

		foreach($attributes as $attribute => $match) {
			if (!is_array($match)) {
				$match = array(
					'operator_value' => 'equals',
					'value' => $match,
					'match' => true,
					'operator_result' => 'or',
					'compare' => 'total',
					'case_sensitive' => false
				);
			} else {
				if (is_int($attribute)) {
					$attribute = $match['attribute'];
				}
				if (!isset($match['match'])) {
					$match['match'] = true;
				}
				if (!isset($match['operator_result'])) {
					$match['operator_result'] = 'or';
				}
				if (!isset($match['compare'])) {
					$match['compare'] = 'total';
				}
				if (!isset($match['case_sensitive'])) {
					$match['case_sensitive'] = false;
				}
			}

			if (is_string($match['value']) && (!$match['case_sensitive'])) {
				$match['value'] = strtolower($match['value']);
			}

			if (($match['operator_result'] === 'and') && (!$res)) {
				return false;
			} elseif (!($res && ($match['operator_result'] === 'or'))) {
				$possibles = $this->findAttribute($attribute, $match['compare'], $match['case_sensitive']);

				$has = (is_array($possibles) && $possibles);
				$res = (($match['value'] === $has) || (($match['match'] === false) && ($has === $match['match'])));

				if ((!$res) && $has && is_string($match['value'])) {
					foreach($possibles as $a) {
						$val = $this->attributes[$a[2]];
						if (is_string($val) && (!$match['case_sensitive'])) {
							$val = strtolower($val);
						}

						switch($match['operator_value']) {
							case '%=':
							case 'contains_regex':
								$res = ((preg_match('`'.$match['value'].'`s', $val) > 0) === $match['match']);
								if ($res) break 1; else break 2;

							case '|=':
							case 'contains_prefix':
								$res = ((preg_match('`\b'.preg_quote($match['value']).'[\-\s]`s', $val) > 0) === $match['match']);
								if ($res) break 1; else break 2;

							case '~=':
							case 'contains_word':
								$res = ((preg_match('`\s'.preg_quote($match['value']).'\s`s', " $val ") > 0) === $match['match']);
								if ($res) break 1; else break 2;

							case '*=':
							case 'contains':
								$res = ((strpos($val, $match['value']) !== false) === $match['match']);
								if ($res) break 1; else break 2;

							case '$=':
							case 'ends_with':
								$res = ((substr($val, -strlen($match['value'])) === $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							case '^=':
							case 'starts_with':
								$res = ((substr($val, 0, strlen($match['value'])) === $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							case '!=':
							case 'not_equal':
								$res = (($val !== $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							case '=':
							case 'equals':
								$res = (($val === $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							case '>=':
							case 'bigger_than':
								$res = (($val >= $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							case '<=':
							case 'smaller_than':
								$res = (($val >= $match['value']) === $match['match']);
								if ($res) break 1; else break 2;

							default:
								trigger_error('Unknown operator "'.$match['operator_value'].'" to match attributes!');
								return false;
						}
					}
				}
			}
		}

		return $res;
	}
protected function match_attributes ( $ attributes ) { $ res = false ; foreach ( $ attributes as $ attribute => $ match ) { if ( ! is_array ( $ match ) ) { $ match = array ( 'operator_value' => 'equals' , 'value' => $ match , 'match' => true , 'operator_result' => 'or' , 'compare' => 'total' , 'case_sensitive' => false ) ; } else { if ( is_int ( $ attribute ) ) { $ attribute = $ match [ 'attribute' ] ; } if ( ! isset ( $ match [ 'match' ] ) ) { $ match [ 'match' ] = true ; } if ( ! isset ( $ match [ 'operator_result' ] ) ) { $ match [ 'operator_result' ] = 'or' ; } if ( ! isset ( $ match [ 'compare' ] ) ) { $ match [ 'compare' ] = 'total' ; } if ( ! isset ( $ match [ 'case_sensitive' ] ) ) { $ match [ 'case_sensitive' ] = false ; } } if ( is_string ( $ match [ 'value' ] ) && ( ! $ match [ 'case_sensitive' ] ) ) { $ match [ 'value' ] = strtolower ( $ match [ 'value' ] ) ; } if ( ( $ match [ 'operator_result' ] === 'and' ) && ( ! $ res ) ) { return false ; } elseif ( ! ( $ res && ( $ match [ 'operator_result' ] === 'or' ) ) ) { $ possibles = $ this -> findAttribute ( $ attribute , $ match [ 'compare' ] , $ match [ 'case_sensitive' ] ) ; $ has = ( is_array ( $ possibles ) && $ possibles ) ; $ res = ( ( $ match [ 'value' ] === $ has ) || ( ( $ match [ 'match' ] === false ) && ( $ has === $ match [ 'match' ] ) ) ) ; if ( ( ! $ res ) && $ has && is_string ( $ match [ 'value' ] ) ) { foreach ( $ possibles as $ a ) { $ val = $ this -> attributes [ $ a [ 2 ] ] ; if ( is_string ( $ val ) && ( ! $ match [ 'case_sensitive' ] ) ) { $ val = strtolower ( $ val ) ; } switch ( $ match [ 'operator_value' ] ) { case '%=' : case 'contains_regex' : $ res = ( ( preg_match ( '`' . $ match [ 'value' ] . '`s' , $ val ) > 0 ) === $ match [ 'match' ] ) ; if ( $ res ) break 1 ; else break 2 ; case '|=' : case 'contains_prefix' : $ res = ( ( preg_match ( '`\b' . preg_quote ( $ match [ 'value' ] ) . '[\-\s]`s' , $ val ) > 0 ) === $ match [ 'match' ] ) ; if ( $ res ) break 1 ; else break 2 ; case '~=' : case 'contains_word' : $ res = ( ( preg_match ( '`\s' . preg_quote ( $ match [ 'value' ] ) . '\s`s' , " $val " ) > 0 ) === $ match [ 'match' ] ) ; if ( $ res ) break 1 ; else break 2 ; case '*=' : case 'contains' : $ res = ( ( strpos ( $ val , $ match [ 'value' ] ) !== false ) === $ match [ 'match' ] ) ; if ( $ res ) break 1 ; else break 2 ; case '$=' : case 'ends_with' : $ res = ( ( substr ( $ val , - strlen ( $ match [ 'value' ] ) ) === $ match [ 'value' ] ) === $ match [ 'match' ] ) ; if ( $ res ) break 1 ; else break 2 ; case '^=' : case 'starts_with' : $ res = ( ( substr ( $ val , 0 , strlen ( $ match [ 'value' ] ) ) === $ match [ 'value' ] ) === $ match [ 'match' ] ) ; if ( $ res ) break 1 ; else break 2 ; case '!=' : case 'not_equal' : $ res = ( ( $ val !== $ match [ 'value' ] ) === $ match [ 'match' ] ) ; if ( $ res ) break 1 ; else break 2 ; case '=' : case 'equals' : $ res = ( ( $ val === $ match [ 'value' ] ) === $ match [ 'match' ] ) ; if ( $ res ) break 1 ; else break 2 ; case '>=' : case 'bigger_than' : $ res = ( ( $ val >= $ match [ 'value' ] ) === $ match [ 'match' ] ) ; if ( $ res ) break 1 ; else break 2 ; case '<=' : case 'smaller_than' : $ res = ( ( $ val >= $ match [ 'value' ] ) === $ match [ 'match' ] ) ; if ( $ res ) break 1 ; else break 2 ; default : trigger_error ( 'Unknown operator "' . $ match [ 'operator_value' ] . '" to match attributes!' ) ; return false ; } } } } } return $ res ; }
Checks if attributes match certain conditions
@param array $attributes array('attr' => 'val') or array(array(
'operator_value' => 'equals'/'='/'contains_regex'/etc
'attribute' => 'attr',
'value' => 'val',
'match' => true,
'operator_result' => 'or'/'and',
'compare' => 'total'/'namespace'/'name',
'case_sensitive' => true))
@return bool
@internal Used by selector class
@see match()
@access private
Checks if attributes match certain conditions