1 | <?php |
||
8 | class CssToXpath { |
||
9 | private $specialChars = [Tokenizer::WHITESPACE, Tokenizer::DOT, Tokenizer::GREATER_THAN, |
||
10 | '~', Tokenizer::NUM_SIGN, Tokenizer::OPEN_SQUARE_BRACKET, Tokenizer::MULTIPLY]; |
||
11 | private $translators = []; |
||
12 | private static $instances = []; |
||
13 | private $functionSet; |
||
14 | private $id; |
||
15 | |||
16 | public function __construct(\Transphporm\FunctionSet $functionSet, $prefix = '', $id = null) { |
||
17 | $this->id = $id; |
||
18 | self::$instances[$this->id] = $this; |
||
19 | $this->functionSet = $functionSet; |
||
20 | |||
21 | $this->translators = [ |
||
22 | Tokenizer::WHITESPACE => function($string) use ($prefix) { return '//' . $prefix . $string; }, |
||
23 | Tokenizer::MULTIPLY => function () { return '*'; }, |
||
24 | '' => function($string) use ($prefix) { return '/' . $prefix . $string; }, |
||
25 | Tokenizer::GREATER_THAN => function($string) use ($prefix) { return '/' . $prefix . $string; }, |
||
26 | Tokenizer::NUM_SIGN => function($string) { return '[@id=\'' . $string . '\']'; }, |
||
27 | Tokenizer::DOT => function($string) { return '[contains(concat(\' \', normalize-space(@class), \' \'), \' ' . $string . ' \')]'; }, |
||
28 | Tokenizer::OPEN_SQUARE_BRACKET => function($string) { return '[' .'php:function(\'\Transphporm\Parser\CssToXpath::processAttr\', \'' . base64_encode(serialize($string)) . '\', ., "' . $this->id . '")' . ']'; } |
||
29 | ]; |
||
30 | } |
||
31 | |||
32 | private function createSelector() { |
||
38 | |||
39 | //XPath only allows registering of static functions... this is a hacky workaround for that |
||
40 | public static function processAttr($attr, $element, $hash) { |
||
55 | |||
56 | public function cleanup() { |
||
57 | unset(self::$instances[$this->id]); |
||
58 | } |
||
59 | |||
60 | //split the css into indivudal functions |
||
61 | private function split($css) { |
||
76 | |||
77 | public function getXpath($css) { |
||
89 | |||
90 | private function removeSpacesFromDirectDecend($css) { |
||
91 | $tokens = new Tokens; |
||
104 | |||
105 | |||
106 | public function getDepth($css) { |
||
110 | |||
111 | |||
112 | public function getPseudo($css) { |
||
117 | } |
||
118 |