180 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			180 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?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['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 hr, td, th ------------------------------------------
 | ||
|  |         $r['td@width'] = | ||
|  |         $r['th@width'] = | ||
|  |         $r['hr@width'] = new HTMLPurifier_AttrTransform_Length('width'); | ||
|  | 
 | ||
|  |         return $r; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | // vim: et sw=4 sts=4
 |