/* Discards the rule til end of stylesheet, since no matching bracket can be found */ /*p{ foo:bar; foo{;bar("baz)};"; baz:boo } h1{}*/ EOS; $timer = new Benchmark_Timer(); //$nb_iterations = 1; $timer->start(); $source = new Source\String($css); $timer->setMarker(sprintf("Source init: %s", $source->getEncoding())); $lexer = new Css\Lexer(); $lexer->setSource($source); $timer->setMarker("Lexer init"); //$token = $lexer->nextToken(); //while ($token->type !== Css\Lexer::T_EOF) { //echo $lexer->getLiteral($token) . PHP_EOL; //$token = $lexer->nextToken(); //} //echo $lexer->getLiteral($token) . PHP_EOL; //$timer->setMarker("Tokenization end"); $parser = new Css\Parser($lexer); $parser->setStrict(false); $stylesheet = $parser->parseStyleSheet(); $timer->setMarker("Parsing end"); foreach ($parser->errors as $error) { echo "Start: " . $lexer->getLiteral($error['start']) . "\n"; echo "End: " . $lexer->getLiteral($error['end']) . "\n"; } var_dump($stylesheet->getCssText()); //printf("Memory: %s\n", memory_get_usage(true)); //printf("Memory peak: %s\n", memory_get_peak_usage(true)); //echo $timer->getOutput();
</root> EOS; $css = <<<EOS h1:not(.foo) EOS; $timer = new Benchmark_Timer(); //$nb_iterations = 1; $timer->start(); $source = new Source\String($css); $timer->setMarker("Source init"); $lexer = new Css\Lexer(); $lexer->setSource($source); $timer->setMarker("Lexer init"); $token = $lexer->nextToken(); while ($token->type !== Css\Lexer::T_EOF) { echo $lexer->getLiteral($token) . PHP_EOL; $token = $lexer->nextToken(); } echo $lexer->getLiteral($token) . PHP_EOL; $timer->setMarker("Tokenization end"); $parser = new Css\Parser($lexer); $selector = $parser->parseSelector(); $timer->setMarker("Parsing end"); //var_dump($selector); //echo $selector->toXpath() . PHP_EOL; $dom = \DOMDocument::loadXML($xml); $xpath = new \DOMXPath($dom); $query = $selector->toXpath(); $elements = $xpath->query($query); var_dump((string) $query); foreach ($elements as $element) {