public function visitSelectorSimpleAttribute(Ast\Selector\Simple\Attribute $attribute)
{
switch ($attribute->match) {
case Ast\Selector\Simple\Attribute::MATCH_PREFIX:
$condition = sprintf('starts-with(@%s, %s)', $attribute->name, $this->quoteLiteral($attribute->literal));
break;
case Ast\Selector\Simple\Attribute::MATCH_SUFFIX:
$condition = sprintf('substring(@%1$s, string-length(@%1$s) - %2$s) = %3$s', $attribute->name, strlen($attribute->literal), $this->quoteLiteral($attribute->literal));
break;
case Ast\Selector\Simple\Attribute::MATCH_SUBSTRING:
$condition = sprintf('contains(@%s, %s)', $attribute->name, $this->quoteLiteral($attribute->literal));
break;
case Ast\Selector\Simple\Attribute::MATCH_EQUALS:
$condition = '@' . $attribute->name . ' = ' . $this->quoteLiteral($attribute->literal);
break;
case Ast\Selector\Simple\Attribute::MATCH_INCLUDES:
$condition = sprintf('contains(concat(" ", normalize-space(@%s), " "), %s)', $attribute->name, $this->quoteLiteral(' ' . trim($attribute->literal) . ' '));
break;
case Ast\Selector\Simple\Attribute::MATCH_DASHMATCH:
$condition = sprintf('(@%1$s = %2$s or substring-before(@%1$s, "-") = %2$s)', $attribute->name, $this->quoteLiteral($attribute->literal));
break;
case Ast\Selector\Simple\Attribute::MATCH_EXISTS:
default:
$condition = '@' . $attribute->name;
break;
}
if (!empty($condition)) {
$this->addCondition($condition);
}
return TRUE;
}