Beispiel #1
0
 function &create(&$root, &$pipeline)
 {
     $name = $root->get_attribute('name');
     $value = $root->get_attribute('value');
     $url_autofix = new AutofixUrl();
     $src = $url_autofix->apply(trim($root->get_attribute("src")));
     $src_img = ImageFactory::get($pipeline->guess_url($src), $pipeline);
     if (is_null($src_img)) {
         error_log(sprintf("Cannot open image at '%s'", $src));
         if ($root->has_attribute('width')) {
             $width = px2pt($root->get_attribute('width'));
         } else {
             $width = px2pt(BROKEN_IMAGE_DEFAULT_SIZE_PX);
         }
         if ($root->has_attribute('height')) {
             $height = px2pt($root->get_attribute('height'));
         } else {
             $height = px2pt(BROKEN_IMAGE_DEFAULT_SIZE_PX);
         }
         $alt = $root->get_attribute('alt');
         $css_state =& $pipeline->get_current_css_state();
         $box =& new ButtonBrokenImagebox($width, $height, $alt, $name, $value, $css_state->get_property(CSS_HTML2PS_FORM_ACTION));
         $box->readCSS($css_state);
         return $box;
     }
     $css_state =& $pipeline->get_current_css_state();
     $box =& new ButtonImageBox($src_img, $name, $value, $css_state->get_property(CSS_HTML2PS_FORM_ACTION));
     $box->readCSS($css_state);
     $box->_setupSize();
     return $box;
 }
 function scan_styles($root, &$pipeline)
 {
     switch ($root->node_type()) {
         case XML_ELEMENT_NODE:
             $tagname = strtolower($root->tagname());
             if ($tagname === 'style') {
                 // Parse <style ...> ... </style> nodes
                 //
                 $this->parse_style_node($root, $pipeline);
             } elseif ($tagname === 'link') {
                 // Parse <link rel="stylesheet" ...> nodes
                 //
                 $rel = strtolower($root->get_attribute("rel"));
                 $type = strtolower($root->get_attribute("type"));
                 if ($root->has_attribute("media")) {
                     $media = explode(",", $root->get_attribute("media"));
                 } else {
                     $media = array();
                 }
                 if ($rel == "stylesheet" && ($type == "text/css" || $type == "") && (count($media) == 0 || is_allowed_media($media))) {
                     // Attempt to escape URL automaticaly
                     $url_autofix = new AutofixUrl();
                     $src = $url_autofix->apply(trim($root->get_attribute('href')));
                     if ($src) {
                         $this->css_import($src, $pipeline);
                     }
                 }
             }
             // Note that we continue processing here!
         // Note that we continue processing here!
         case XML_DOCUMENT_NODE:
             // Scan all child nodes
             $child = $root->first_child();
             while ($child) {
                 $this->scan_styles($child, $pipeline);
                 $child = $child->next_sibling();
             }
             break;
     }
 }
 function scan_styles($root, &$pipeline)
 {
     switch ($root->node_type()) {
         case XML_ELEMENT_NODE:
             # kornev, already in lower
             #      $tagname = strtolower($root->tagname());
             $tagname = $root->tagname();
             if ($tagname === 'style') {
                 $this->parse_style_node($root, $pipeline);
             } elseif ($tagname === 'link') {
                 $rel = $root->get_attribute('rel');
                 $type = $root->get_attribute('type');
                 if ($root->has_attribute('media')) {
                     $media = explode(',', $root->get_attribute('media'));
                 } else {
                     $media = array();
                 }
                 if ($rel == 'stylesheet' && ($type == 'text/css' || $type == '') && (count($media) == 0 || is_allowed_media($media))) {
                     // Attempt to escape URL automaticaly
                     $url_autofix = new AutofixUrl();
                     $src = $url_autofix->apply(trim($root->get_attribute('href')));
                     if ($src) {
                         $this->css_import($src, $pipeline);
                     }
                 }
             }
             // Note that we continue processing here!
         // Note that we continue processing here!
         case XML_DOCUMENT_NODE:
             // Scan all child nodes
             $child = $root->first_child();
             while ($child) {
                 $this->scan_styles($child, $pipeline);
                 $child = $child->next_sibling();
             }
             break;
     }
 }
 function &create(&$root, &$pipeline)
 {
     // Open image referenced by HTML tag
     // Some crazy HTML writers add leading and trailing spaces to SRC attribute value - we need to remove them
     //
     $url_autofix = new AutofixUrl();
     $src = $url_autofix->apply(trim($root->get_attribute("src")));
     $image_url = $pipeline->guess_url($src);
     $src_img = ImageFactory::get($image_url, $pipeline);
     if (is_null($src_img)) {
         // image could not be opened, use ALT attribute
         if ($root->has_attribute('width')) {
             $width = px2pt($root->get_attribute('width'));
         } else {
             $width = px2pt(BROKEN_IMAGE_DEFAULT_SIZE_PX);
         }
         if ($root->has_attribute('height')) {
             $height = px2pt($root->get_attribute('height'));
         } else {
             $height = px2pt(BROKEN_IMAGE_DEFAULT_SIZE_PX);
         }
         $alt = $root->get_attribute('alt');
         $box =& new BrokenImgBox($width, $height, $alt);
         $box->readCSS($pipeline->getCurrentCSSState());
         $box->put_width($width);
         $box->put_height($height);
         $box->default_baseline = $box->get_full_height();
         $box->src_height = $box->get_height();
         $box->src_width = $box->get_width();
         return $box;
     } else {
         $box =& new ImgBox($src_img);
         $box->readCSS($pipeline->getCurrentCSSState());
         $box->_setupSize();
         return $box;
     }
 }
Beispiel #5
0
 function process_link_node(&$node)
 {
     $ruleset =& new CSSRuleset();
     $rel = strtolower($node->get_attribute('rel'));
     $type = strtolower($node->get_attribute('type'));
     // See HTML 4.01 p.14.2.3: This attribute (read: 'media') specifies the intended destination medium for style information.
     // It may be a single media descriptor or a comma-separated list. The default value for this attribute is "screen".
     if ($node->has_attribute('media')) {
         $media = explode(',', strtolower($node->get_attribute('media')));
     } else {
         $media = array('screen');
     }
     // Subconditions for the large condition below
     // 1. This is a stylesheet
     $is_stylesheet = $rel == 'stylesheet';
     // 2. This is a CSS stylesheet
     // Though HTML 4.01 standard says in p.14.2.3 "Authors must supply a value for this attribute; there is no default value for this attribute",
     // a lot of coders do not obey the standard; let's assume that if 'type' is omitted, we're dealing with CSS
     $is_css = $type == 'text/css' || $type == '';
     // 3. This stylesheet should be processed with current media
     // HTML 4.01 p.14.2.3 "This attribute specifies the intended destination medium for style information.
     // It may be a single media descriptor or a comma-separated list. The default value for this attribute is "screen".
     // Yet again, let's be tolerant: if coder did not specify anything in the 'media' attribute value,
     // we assume that this stylesheet should be processed.
     // Note that if 'media' is omitted, we're using its default value - 'screent' (see above)
     $is_media_to_be_processed = count($media) == 0 || $this->is_allowed_media($media);
     if ($is_stylesheet && $is_css && $is_media_to_be_processed) {
         // Attempt to escape URL automaticaly
         $url_autofix = new AutofixUrl();
         $src = $url_autofix->apply(trim($node->get_attribute('href')));
         if ($src) {
             $ruleset = $this->import($src);
         }
     }
     return $ruleset;
 }
 function TestAutofixUrlDirty8()
 {
     $url_autofix = new AutofixUrl();
     $source_url = 'test%z1test';
     $expected_url = 'test%25z1test';
     $fixed_url = $url_autofix->apply($source_url);
     $this->assertEqual($expected_url, $fixed_url);
 }