diff --git a/library/HTMLPurifier/Definition.php b/library/HTMLPurifier/Definition.php index 9223a440..ae1b390d 100644 --- a/library/HTMLPurifier/Definition.php +++ b/library/HTMLPurifier/Definition.php @@ -210,13 +210,7 @@ class HTMLPurifier_Definition ////////////////////////////////////////////////////////////////////// // UNIMP : info_tag_transform : transformations of tags - // font -> span / attributes: size color face - // css: font-size color font-family - // menu -> ul - // dir -> ul - // center -> div / css: text-align: center; - - //$this->info_tag_transform['font'] = new HTMLPurifier_TagTransform_Font(); + $this->info_tag_transform['font'] = new HTMLPurifier_TagTransform_Font(); $this->info_tag_transform['menu'] = new HTMLPurifier_TagTransform_Simple('ul'); $this->info_tag_transform['dir'] = new HTMLPurifier_TagTransform_Simple('ul'); $this->info_tag_transform['center'] = new HTMLPurifier_TagTransform_Center(); diff --git a/library/HTMLPurifier/TagTransform.php b/library/HTMLPurifier/TagTransform.php index f11f2cef..f962dc36 100644 --- a/library/HTMLPurifier/TagTransform.php +++ b/library/HTMLPurifier/TagTransform.php @@ -44,7 +44,13 @@ class HTMLPurifier_TagTransform_Simple extends HTMLPurifier_TagTransform class HTMLPurifier_TagTransform_Center extends HTMLPurifier_TagTransform { + var $transform_to = 'div'; + function transform($tag) { + if ($tag->type == 'end') { + $new_tag = new HTMLPurifier_Token_End($this->transform_to); + return $new_tag; + } $attributes = $tag->attributes; $prepend_css = 'text-align:center;'; if (isset($attributes['style'])) { @@ -53,14 +59,11 @@ class HTMLPurifier_TagTransform_Center extends HTMLPurifier_TagTransform $attributes['style'] = $prepend_css; } switch ($tag->type) { - case 'end': - $new_tag = new HTMLPurifier_Token_End('div'); - break; case 'start': - $new_tag = new HTMLPurifier_Token_Start('div', $attributes); + $new_tag = new HTMLPurifier_Token_Start($this->transform_to, $attributes); break; case 'empty': - $new_tag = new HTMLPurifier_Token_Empty('div', $attributes); + $new_tag = new HTMLPurifier_Token_Empty($this->transform_to, $attributes); break; default: trigger_error('Failed tag transformation', E_USER_WARNING); @@ -70,4 +73,79 @@ class HTMLPurifier_TagTransform_Center extends HTMLPurifier_TagTransform } } +class HTMLPurifier_TagTransform_Font extends HTMLPurifier_TagTransform +{ + + var $transform_to = 'span'; + + var $_size_lookup = array( + '1' => 'xx-small', + '2' => 'small', + '3' => 'medium', + '4' => 'large', + '5' => 'x-large', + '6' => 'xx-large', + '7' => '300%', + '-1' => 'smaller', + '+1' => 'larger', + '-2' => '60%', + '+2' => '150%', + '+4' => '300%' + ); + + function transform($tag) { + + if ($tag->type == 'end') { + $new_tag = new HTMLPurifier_Token_End($this->transform_to); + return $new_tag; + } + + // font size lookup table based off of: + // http://style.cleverchimp.com/font_size_intervals/altintervals.html + $attributes = $tag->attributes; + $prepend_style = ''; + + // handle color transform + if (isset($attributes['color'])) { + $prepend_style .= 'color:' . $attributes['color'] . ';'; + unset($attributes['color']); + } + + // handle face transform + if (isset($attributes['face'])) { + $prepend_style .= 'font-family:' . $attributes['face'] . ';'; + unset($attributes['face']); + } + + // handle size transform + if (isset($attributes['size'])) { + if (isset($this->_size_lookup[$attributes['size']])) { + $prepend_style .= 'font-size:' . + $this->_size_lookup[$attributes['size']] . ';'; + } + unset($attributes['size']); + } + + if ($prepend_style) { + $attributes['style'] = isset($attributes['style']) ? + $prepend_style . $attributes['style'] : + $prepend_style; + } + + switch ($tag->type) { + case 'start': + $new_tag = new HTMLPurifier_Token_Start($this->transform_to, $attributes); + break; + case 'empty': + $new_tag = new HTMLPurifier_Token_Empty($this->transform_to, $attributes); + break; + default: + trigger_error('Failed tag transformation', E_USER_WARNING); + return; + } + return $new_tag; + + } +} + ?> \ No newline at end of file diff --git a/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php b/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php index 3fe26452..0c72b469 100644 --- a/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php +++ b/tests/HTMLPurifier/Strategy/RemoveForeignElementsTest.php @@ -32,6 +32,10 @@ class HTMLPurifier_Strategy_RemoveForeignElementsTest $inputs[4] = '