Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
addNameTest example
public
function
translateCombinedSelector
(
Node\CombinedSelectorNode
$node
, Translator
$translator
)
: XPathExpr
{
return
$translator
->
addCombination
(
$node
->
getCombinator
(
)
,
$node
->
getSelector
(
)
,
$node
->
getSubSelector
(
)
)
;
}
public
function
translateNegation
(
Node\NegationNode
$node
, Translator
$translator
)
: XPathExpr
{
$xpath
=
$translator
->
nodeToXPath
(
$node
->
getSelector
(
)
)
;
$subXpath
=
$translator
->
nodeToXPath
(
$node
->
getSubSelector
(
)
)
;
$subXpath
->
addNameTest
(
)
;
if
(
$subXpath
->
getCondition
(
)
)
{
return
$xpath
->
addCondition
(
sprintf
(
'not(%s)',
$subXpath
->
getCondition
(
)
)
)
;
}
return
$xpath
->
addCondition
(
'0'
)
;
}
public
function
translateFunction
(
Node\FunctionNode
$node
, Translator
$translator
)
: XPathExpr
{
$xpath
=
$translator
->
nodeToXPath
(
$node
->
getSelector
(
)
)
;
public
function
translateChild
(
XPathExpr
$xpath
, XPathExpr
$combinedXpath
)
: XPathExpr
{
return
$xpath
->
join
(
'/',
$combinedXpath
)
;
}
public
function
translateDirectAdjacent
(
XPathExpr
$xpath
, XPathExpr
$combinedXpath
)
: XPathExpr
{
return
$xpath
->
join
(
'/following-sibling::',
$combinedXpath
)
->
addNameTest
(
)
->
addCondition
(
'position() = 1'
)
;
}
public
function
translateIndirectAdjacent
(
XPathExpr
$xpath
, XPathExpr
$combinedXpath
)
: XPathExpr
{
return
$xpath
->
join
(
'/following-sibling::',
$combinedXpath
)
;
}
public
function
getName
(
)
: string
{
return
'combination';
}
public
function
translateScopePseudo
(
XPathExpr
$xpath
)
: XPathExpr
{
return
$xpath
->
addCondition
(
'1'
)
;
}
public
function
translateFirstChild
(
XPathExpr
$xpath
)
: XPathExpr
{
return
$xpath
->
addStarPrefix
(
)
->
addNameTest
(
)
->
addCondition
(
'position() = 1'
)
;
}
public
function
translateLastChild
(
XPathExpr
$xpath
)
: XPathExpr
{
return
$xpath
->
addStarPrefix
(
)
->
addNameTest
(
)
->
addCondition
(
'position() = last()'
)
;
}
public
function
translateNthChild
(
XPathExpr
$xpath
, FunctionNode
$function
, bool
$last
= false, bool
$addNameTest
= true
)
: XPathExpr
{
try
{
[
$a
,
$b
]
= Parser::
parseSeries
(
$function
->
getArguments
(
)
)
;
}
catch
(
SyntaxErrorException
$e
)
{
throw
new
ExpressionErrorException
(
sprintf
(
'Invalid series: "%s".',
implode
(
'", "',
$function
->
getArguments
(
)
)
)
, 0,
$e
)
;
}
$xpath
->
addStarPrefix
(
)
;
if
(
$addNameTest
)
{
$xpath
->
addNameTest
(
)
;
}
if
(
0 ===
$a
)
{
return
$xpath
->
addCondition
(
'position() = '.
(
$last
? 'last() - '.
(
$b
- 1
)
:
$b
)
)
;
}
if
(
$a
< 0
)
{
if
(
$b
< 1
)
{
return
$xpath
->
addCondition
(
'false()'
)
;
}