You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
7.0 KiB
182 lines
7.0 KiB
<?php |
|
|
|
class HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4 extends HTMLPurifier_HTMLModule_Tidy |
|
{ |
|
|
|
/** |
|
* @return array |
|
*/ |
|
public function makeFixes() |
|
{ |
|
$r = array(); |
|
|
|
// == deprecated tag transforms =================================== |
|
|
|
$r['font'] = new HTMLPurifier_TagTransform_Font(); |
|
$r['menu'] = new HTMLPurifier_TagTransform_Simple('ul'); |
|
$r['dir'] = new HTMLPurifier_TagTransform_Simple('ul'); |
|
$r['center'] = new HTMLPurifier_TagTransform_Simple('div', 'text-align:center;'); |
|
$r['u'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:underline;'); |
|
$r['s'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:line-through;'); |
|
$r['strike'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:line-through;'); |
|
|
|
// == deprecated attribute transforms ============================= |
|
|
|
$r['caption@align'] = |
|
new HTMLPurifier_AttrTransform_EnumToCSS( |
|
'align', |
|
array( |
|
// we're following IE's behavior, not Firefox's, due |
|
// to the fact that no one supports caption-side:right, |
|
// W3C included (with CSS 2.1). This is a slightly |
|
// unreasonable attribute! |
|
'left' => 'text-align:left;', |
|
'right' => 'text-align:right;', |
|
'top' => 'caption-side:top;', |
|
'bottom' => 'caption-side:bottom;' // not supported by IE |
|
) |
|
); |
|
|
|
// @align for img ------------------------------------------------- |
|
$r['img@align'] = |
|
new HTMLPurifier_AttrTransform_EnumToCSS( |
|
'align', |
|
array( |
|
'left' => 'float:left;', |
|
'right' => 'float:right;', |
|
'top' => 'vertical-align:top;', |
|
'middle' => 'vertical-align:middle;', |
|
'bottom' => 'vertical-align:baseline;', |
|
) |
|
); |
|
|
|
// @align for table ----------------------------------------------- |
|
$r['table@align'] = |
|
new HTMLPurifier_AttrTransform_EnumToCSS( |
|
'align', |
|
array( |
|
'left' => 'float:left;', |
|
'center' => 'margin-left:auto;margin-right:auto;', |
|
'right' => 'float:right;' |
|
) |
|
); |
|
|
|
// @align for hr ----------------------------------------------- |
|
$r['hr@align'] = |
|
new HTMLPurifier_AttrTransform_EnumToCSS( |
|
'align', |
|
array( |
|
// we use both text-align and margin because these work |
|
// for different browsers (IE and Firefox, respectively) |
|
// and the melange makes for a pretty cross-compatible |
|
// solution |
|
'left' => 'margin-left:0;margin-right:auto;text-align:left;', |
|
'center' => 'margin-left:auto;margin-right:auto;text-align:center;', |
|
'right' => 'margin-left:auto;margin-right:0;text-align:right;' |
|
) |
|
); |
|
|
|
// @align for h1, h2, h3, h4, h5, h6, p, div ---------------------- |
|
// {{{ |
|
$align_lookup = array(); |
|
$align_values = array('left', 'right', 'center', 'justify'); |
|
foreach ($align_values as $v) { |
|
$align_lookup[$v] = "text-align:$v;"; |
|
} |
|
// }}} |
|
$r['h1@align'] = |
|
$r['h2@align'] = |
|
$r['h3@align'] = |
|
$r['h4@align'] = |
|
$r['h5@align'] = |
|
$r['h6@align'] = |
|
$r['p@align'] = |
|
$r['div@align'] = |
|
new HTMLPurifier_AttrTransform_EnumToCSS('align', $align_lookup); |
|
|
|
// @bgcolor for table, tr, td, th --------------------------------- |
|
$r['table@bgcolor'] = |
|
$r['tr@bgcolor'] = |
|
$r['td@bgcolor'] = |
|
$r['th@bgcolor'] = |
|
new HTMLPurifier_AttrTransform_BgColor(); |
|
|
|
// @border for img ------------------------------------------------ |
|
$r['img@border'] = new HTMLPurifier_AttrTransform_Border(); |
|
|
|
// @clear for br -------------------------------------------------- |
|
$r['br@clear'] = |
|
new HTMLPurifier_AttrTransform_EnumToCSS( |
|
'clear', |
|
array( |
|
'left' => 'clear:left;', |
|
'right' => 'clear:right;', |
|
'all' => 'clear:both;', |
|
'none' => 'clear:none;', |
|
) |
|
); |
|
|
|
// @height for td, th --------------------------------------------- |
|
$r['td@height'] = |
|
$r['th@height'] = |
|
new HTMLPurifier_AttrTransform_Length('height'); |
|
|
|
// @hspace for img ------------------------------------------------ |
|
$r['img@hspace'] = new HTMLPurifier_AttrTransform_ImgSpace('hspace'); |
|
|
|
// @noshade for hr ------------------------------------------------ |
|
// this transformation is not precise but often good enough. |
|
// different browsers use different styles to designate noshade |
|
$r['hr@noshade'] = |
|
new HTMLPurifier_AttrTransform_BoolToCSS( |
|
'noshade', |
|
'color:#808080;background-color:#808080;border:0;' |
|
); |
|
|
|
// @nowrap for td, th --------------------------------------------- |
|
$r['td@nowrap'] = |
|
$r['th@nowrap'] = |
|
new HTMLPurifier_AttrTransform_BoolToCSS( |
|
'nowrap', |
|
'white-space:nowrap;' |
|
); |
|
|
|
// @size for hr -------------------------------------------------- |
|
$r['hr@size'] = new HTMLPurifier_AttrTransform_Length('size', 'height'); |
|
|
|
// @type for li, ol, ul ------------------------------------------- |
|
// {{{ |
|
$ul_types = array( |
|
'disc' => 'list-style-type:disc;', |
|
'square' => 'list-style-type:square;', |
|
'circle' => 'list-style-type:circle;' |
|
); |
|
$ol_types = array( |
|
'1' => 'list-style-type:decimal;', |
|
'i' => 'list-style-type:lower-roman;', |
|
'I' => 'list-style-type:upper-roman;', |
|
'a' => 'list-style-type:lower-alpha;', |
|
'A' => 'list-style-type:upper-alpha;' |
|
); |
|
$li_types = $ul_types + $ol_types; |
|
// }}} |
|
|
|
$r['ul@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $ul_types); |
|
$r['ol@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $ol_types, true); |
|
$r['li@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $li_types, true); |
|
|
|
// @vspace for img ------------------------------------------------ |
|
$r['img@vspace'] = new HTMLPurifier_AttrTransform_ImgSpace('vspace'); |
|
|
|
// @width for table, hr, td, th, col ------------------------------------------ |
|
$r['table@width'] = |
|
$r['td@width'] = |
|
$r['th@width'] = |
|
$r['col@width'] = |
|
$r['hr@width'] = new HTMLPurifier_AttrTransform_Length('width'); |
|
|
|
return $r; |
|
} |
|
} |
|
|
|
// vim: et sw=4 sts=4
|
|
|