Esempio n. 1
0
 function testParserImportUriMediumSeq()
 {
     $stream = new CSSStreamString('@import url("sample.css") screen, print;');
     $lexer = new CSSLexer($stream);
     $parser = new CSSParser($lexer);
     $result = $parser->parse();
     $this->assertTrue($result);
 }
Esempio n. 2
0
 function test()
 {
     $stream = new CSSStreamString(file_get_contents(dirname(__FILE__) . '/test.parser.10.css'));
     $lexer = new CSSLexer($stream);
     $parser = new CSSParser($lexer);
     $result = $parser->parse();
     $this->assertTrue($result);
 }
Esempio n. 3
0
 function test()
 {
     $stream = new CSSStreamString(file_get_contents(dirname(__FILE__) . '/test.parser.error.1.css'));
     $lexer = new CSSLexer($stream);
     $parser = new CSSParser($lexer);
     $result = $parser->parse();
     $this->assertTrue($result);
     $errors = $parser->get_errors();
     $this->assertEquals(count($errors), 1);
     $this->assertEquals($errors[0]->get_line(), 1);
     $this->assertEquals($errors[0]->get_skipped_content(), ';');
 }
Esempio n. 4
0
 function test()
 {
     $stream = new CSSStreamString(file_get_contents(dirname(__FILE__) . '/test.parser.12.css'));
     $lexer = new CSSLexer($stream);
     $parser = new CSSParser($lexer);
     $result = $parser->parse();
     $this->assertTrue($result);
     $syntax_stylesheet = $parser->get_context();
     $rulesets = $syntax_stylesheet->get_rulesets()->get();
     $this->assertEquals(count($rulesets), 2);
     $this->assertEquals($rulesets[0]->get_selectors()->get(0)->get_selector(0)->get_element(), 'ol');
     $this->assertEquals($rulesets[1]->get_selectors()->get(0)->get_selector(0)->get_element(), 'ul');
 }
Esempio n. 5
0
 private function getFontCssRules()
 {
     if (is_null($this->fontCssRules)) {
         $this->fontCssRules = array();
         $cssAssets = $this->epub->EpubSpine->getAssetsByType('text/css');
         foreach ($cssAssets as $css) {
             try {
                 $cssContent = $this->epub->getPageContent($css->relativePath);
                 $cssParser = new CSSParser($cssContent);
                 $objCss = $cssParser->parse();
                 $this->fonts = array();
                 foreach ($objCss->getAllRuleSets() as $cssRuleSet) {
                     $font = array();
                     if (is_a($cssRuleSet, 'CSSAtRule')) {
                         $selectorName = $cssRuleSet->getType();
                         if ($selectorName == 'font-face') {
                             foreach ($cssRuleSet->getRules() as $cssRule) {
                                 $value = (string) $cssRule->getValue();
                                 if (substr($value, 0, 1) == '"') {
                                     $value = substr($value, 1, -1);
                                 }
                                 $font[$cssRule->getRule()] = $value;
                             }
                             $this->fontCssRules[] = $font;
                         }
                     }
                 }
                 unset($objCss);
                 unset($cssParser);
             } catch (Exception $e) {
                 CakeLog::warning('[EpubProcessor::getFontCssRules] Error ' . $e->getMessage() . ' when parsing ' . $css->relativePath);
             }
         }
     }
     return $this->fontCssRules;
 }
Esempio n. 6
0
 function parsedStructureForFile($sFileName)
 {
     $sFile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'files' . DIRECTORY_SEPARATOR . "{$sFileName}.css";
     $oParser = new CSSParser(file_get_contents($sFile));
     return $oParser->parse();
 }
Esempio n. 7
0
 /**
  * Strip HTML tags, inline styles and convert input src to semantic, styled HTML and add page breaks and chapter entries to table of contents
  * @param $src str input HTML to be processed
  * @param $all bool true/false to strip ALL HTML tags
  * @return $str str stripped HTML
  */
 function stripTagsAddChapters($src, $all = false)
 {
     $dom = new DOMDocument();
     @$dom->loadHTML('<?xml encoding="UTF-8">' . $src);
     $xPath = new DOMXPath($dom);
     $elements = $xPath->query('//p');
     foreach ($elements as $element) {
         if (strstr($element->getAttribute('class'), 'Heading1') !== FALSE) {
             $newElement = $dom->createElement('h1', $element->nodeValue);
             $element->parentNode->replaceChild($newElement, $element);
         }
         if (strstr($element->getAttribute('class'), 'Heading2') !== FALSE) {
             $newElement = $dom->createElement('h2', $element->nodeValue);
             $element->parentNode->replaceChild($newElement, $element);
         }
         if (strstr($element->getAttribute('class'), 'Heading3') !== FALSE) {
             $newElement = $dom->createElement('h3', $element->nodeValue);
             $element->parentNode->replaceChild($newElement, $element);
         }
         if (strstr($element->getAttribute('class'), 'Heading4') !== FALSE) {
             $newElement = $dom->createElement('h4', $element->nodeValue);
             $element->parentNode->replaceChild($newElement, $element);
         }
     }
     $elements = $xPath->query('//p|//span');
     foreach ($elements as $element) {
         $oParser = new CSSParser("p{" . $element->getAttribute('style') . "}");
         $oCss = $oParser->parse();
         foreach ($oCss->getAllRuleSets() as $oRuleSet) {
             $oRuleSet->removeRule('line-');
             $oRuleSet->removeRule('margin-');
             $oRuleSet->removeRule('font-family');
             $oRuleSet->removeRule('font-size');
             $oRuleSet->removeRule('color');
             if (is_array($indent) && isset($indent['text-indent'])) {
                 $value = $indent['text-indent']->getValue();
                 if ($value != null) {
                     $value->setSize('4');
                     $value->setUnit('mm');
                 }
             }
         }
         $css = $oCss->__toString();
         $css = substr_replace($css, '', 0, 3);
         $css = substr_replace($css, '', -1, 1);
         $element->setAttribute('style', $css);
     }
     $src = $dom->saveHTML();
     $search = array('@<script[^>]*?>.*?</script>@si', '@<style[^>]*?>.*?</style>@siU', '@<![\\s\\S]*?--[ \\t\\n\\r]*>@', '/(?si)<span\\s+class\\s*=\\s*"-H"\\s* style="letter-spacing: 0pt;">(.*?)<\\/span>/');
     $src = preg_replace($search, array('', '', '', '$1'), $src);
     if ($all == false) {
         $src = strip_tags($src, "<p><br><img><span><strong><em><h1><h2><h3><h4>");
     } else {
         $allow = "<p>";
         $src = strip_tags($src, $allow);
         $src = $this->clean_inside_tags($src, $allow);
         $src = preg_replace('#<p[^>]*>(\\s|&nbsp;?)*</p>#', '', $src);
     }
     $src = str_replace("#", "<br />", $src);
     $src = str_replace("***", "<br /><br />", $src);
     $src = preg_replace(array('/(?si)<h1(.*?)\\s*>(.*?)<\\/h1>/', '/(?si)<h2(.*?)\\s*>(.*?)<\\/h2>/', '/(?si)<h3(.*?)\\s*>(.*?)<\\/h3>/', '/(?si)<h4(.*?)\\s*>(.*?)<\\/h4>/'), array("<pagebreak /><h1>\$2<tocentry content='\$2' level='0' /></h1>", "<h2>\$2<tocentry content='\$2' level='1' /></h2>", '<h3>$2</h3>', '<h4>$2</h4>'), $src);
     return $src;
 }
Esempio n. 8
0
 function import_source($css, $url)
 {
     $this->push_base_url($url);
     $ruleset = new CSSRuleset();
     $stream = new CSSStreamString($css);
     $lexer = new CSSLexer($stream);
     $parser = new CSSParser($lexer);
     $result = $parser->parse();
     // Log CSS parse errors
     $errors = $parser->get_errors();
     foreach ($errors as $error) {
         $error->log($url);
     }
     if (!$result) {
         error_log(sprintf('Unrecoverable syntax error while parsing stylesheet at "%s"', $url));
     }
     $stylesheet = $parser->get_context();
     // Process @import
     $imports = $stylesheet->get_imports();
     foreach ($imports as $import) {
         $media_list = $import->get_media();
         if (empty($media_list) || in_array('all', $media_list) || $this->is_allowed_media($import->get_media())) {
             $pipeline = $this->get_pipeline();
             $full_url = $pipeline->guess_url(css_remove_value_quotes($import->get_url()));
             $ruleset->merge($this->import($full_url));
         }
     }
     // Process @media
     $media = $stylesheet->get_media();
     foreach ($media as $media_item) {
         if ($this->is_allowed_media($media_item->get_media())) {
             $ruleset->merge($this->import_rulesets($media_item->get_rulesets()));
         }
     }
     // Process usual rules
     $ruleset->merge($this->import_rulesets($stylesheet->get_rulesets()));
     $this->pop_base_url();
     return $ruleset;
 }
 /**
  * @dataProvider createBackgroundShorthandProvider
  **/
 public function testCreateBackgroundShorthand($sCss, $sExpected)
 {
     $oParser = new CSSParser($sCss);
     $oDoc = $oParser->parse();
     foreach ($oDoc->getAllDeclarationBlocks() as $oDeclaration) {
         $oDeclaration->createBackgroundShorthand();
     }
     $this->assertEquals((string) $oDoc, $sExpected);
 }
Esempio n. 10
0
<?php

require_once dirname(__FILE__) . '/../CSSParser.php';
$oParser = new CSSParser(file_get_contents('php://stdin'));
$oDoc = $oParser->parse();
echo '#### Structure (`var_dump()`)' . "\n";
var_dump($oDoc);
echo '#### Output (`__toString()`)' . "\n";
print $oDoc->__toString();
echo "\n";