Esempio n. 1
0
 public function parseFile($file)
 {
     $source = Loader::load($this->fixtures_dir . '/' . $file);
     $this->lexer->setSource($source);
     return $this->css_parser->parseStyleSheet();
     //return $this->css_parser->parse($source);
 }
Esempio n. 2
0
 public function resolve($imported_files = array())
 {
     if (empty($imported_files)) {
         $imported_files[] = $this->stylesheet->getHref();
     }
     $encoding = $this->stylesheet->getCharset();
     $lexer = new Lexer();
     $parser = new Parser($lexer);
     $url_resolver = new UrlResolver($this->stylesheet, $this->base_url);
     $url_resolver->resolve();
     foreach ($this->stylesheet->getRuleList()->getRules() as $rule) {
         if ($rule instanceof Rule\Import) {
             $url = $rule->getHref()->getUrl()->getString();
             // Take care of circular imports !
             if (in_array($url, $imported_files)) {
                 continue;
             } else {
                 $imported_files[] = $url;
             }
             try {
                 $source = Loader::load($url, $encoding);
             } catch (StyleSheetNotFoundException $e) {
                 // FIXME: should we remove the rule ?
                 continue;
             }
             // Do the parsing
             $lexer->setSource($source);
             $stylesheet = $parser->parseStyleSheet();
             // Remove charset rules
             $rule_list = $stylesheet->getRuleList();
             foreach ($rule_list->getItems() as $sub_rule) {
                 if ($sub_rule instanceof Rule\Charset) {
                     $stylesheet->getRuleList()->remove($sub_rule);
                     // Only one charset is allowed, so we can
                     break;
                 }
             }
             $rule_list->resetKeys();
             // Do the recurse
             $resolver = new ImportResolver($stylesheet);
             $resolver->resolve($imported_files);
             // Wrap into media query if needed
             if ($rule->getMediaQueryList() !== null && !$rule->getMediaQueryList()->isEmpty()) {
                 $media_query = new Rule\Media($rule->getMediaQueryList(), $rule_list);
                 $this->stylesheet->getRuleList()->replace($rule, $media_query);
             } else {
                 $this->stylesheet->getRuleList()->replace($rule, $rule_list->getItems());
             }
         }
     }
 }
Esempio n. 3
0
<?php

require_once 'Benchmark/Timer.php';
require_once __DIR__ . '/../../vendor/autoload.php';
use ju1ius\Text\Source;
use ju1ius\Css;
$timer = new Benchmark_Timer();
$timer->start();
$source = Css\Loader::load(__DIR__ . '/../files/full/02.css');
$timer->setMarker(sprintf("Source init: %s", $source->getEncoding()));
$lexer = new Css\Lexer($source);
$timer->setMarker("Lexer init");
set_time_limit(10);
//$token = $lexer->nextToken();
//while ($token->type !== Css\Lexer::T_EOF) {
////echo Css\Lexer::getLiteral($token) . PHP_EOL;
//$token = $lexer->nextToken();
//}
////echo Css\Lexer::getLiteral($token) . PHP_EOL;
//$lexer->reset();
//$timer->setMarker("Tokenization end");
$parser = new Css\Parser($lexer);
$parser->setStrict(false);
$stylesheet = $parser->parseStyleSheet();
$timer->setMarker("Parsing end");
//var_dump($stylesheet);
printf("Memory: %s\n", memory_get_usage(true));
printf("Memory peak: %s\n", memory_get_peak_usage(true));
echo $timer->getOutput();