xref: /plugin/combo/vendor/carica/phpcss/src/PhpCss.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau/**
3*04fd306cSNickeau* PhpCss provides several integrative functions to use this library
4*04fd306cSNickeau*
5*04fd306cSNickeau* @license http://www.opensource.org/licenses/mit-license.php The MIT License
6*04fd306cSNickeau* @copyright Copyright 2010-2014 PhpCss Team
7*04fd306cSNickeau*/
8*04fd306cSNickeau
9*04fd306cSNickeauuse PhpCss\Exception\ParserException;
10*04fd306cSNickeau
11*04fd306cSNickeau/**
12*04fd306cSNickeau* PhpCss provides several integrative functions to use this library
13*04fd306cSNickeau*/
14*04fd306cSNickeauabstract class PhpCss {
15*04fd306cSNickeau
16*04fd306cSNickeau  /**
17*04fd306cSNickeau   * Parses a css selector and compiles it into an css selector again
18*04fd306cSNickeau   *
19*04fd306cSNickeau   * @param string $cssSelector
20*04fd306cSNickeau   * @return string
21*04fd306cSNickeau   * @throws ParserException
22*04fd306cSNickeau   */
23*04fd306cSNickeau  public static function reformat(string $cssSelector): string {
24*04fd306cSNickeau    $ast = self::getAst($cssSelector);
25*04fd306cSNickeau    $visitor = new PhpCss\Ast\Visitor\Css();
26*04fd306cSNickeau    $ast->accept($visitor);
27*04fd306cSNickeau    return (string)$visitor;
28*04fd306cSNickeau  }
29*04fd306cSNickeau
30*04fd306cSNickeau  /**
31*04fd306cSNickeau   * Parses a css selector and transforms it into an xpath expression
32*04fd306cSNickeau   *
33*04fd306cSNickeau   * @param string $cssSelector
34*04fd306cSNickeau   * @param int $options
35*04fd306cSNickeau   * @return string
36*04fd306cSNickeau   * @throws ParserException
37*04fd306cSNickeau   */
38*04fd306cSNickeau  public static function toXpath(string $cssSelector, int $options = 0): string {
39*04fd306cSNickeau    $ast = self::getAst($cssSelector);
40*04fd306cSNickeau    $visitor = new PhpCss\Ast\Visitor\Xpath($options);
41*04fd306cSNickeau    $ast->accept($visitor);
42*04fd306cSNickeau    return (string)$visitor;
43*04fd306cSNickeau  }
44*04fd306cSNickeau
45*04fd306cSNickeau  /**
46*04fd306cSNickeau   * Parses a css selector and returns the AST
47*04fd306cSNickeau   *
48*04fd306cSNickeau   * @param string $cssSelector
49*04fd306cSNickeau   * @return PhpCss\Ast\Node
50*04fd306cSNickeau   * @throws ParserException
51*04fd306cSNickeau   */
52*04fd306cSNickeau  public static function getAst(string $cssSelector): PhpCss\Ast\Node {
53*04fd306cSNickeau    $tokens = array();
54*04fd306cSNickeau    $scanner = new PhpCss\Scanner(new PhpCss\Scanner\Status\Selector());
55*04fd306cSNickeau    $scanner->scan($tokens, $cssSelector);
56*04fd306cSNickeau    $parser = new PhpCss\Parser\Standard($tokens);
57*04fd306cSNickeau    return $parser->parse();
58*04fd306cSNickeau  }
59*04fd306cSNickeau}
60