1: <?php
2:
3: class HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4 extends HTMLPurifier_HTMLModule_Tidy
4: {
5:
6: /**
7: * @return array
8: */
9: public function makeFixes()
10: {
11: $r = array();
12:
13: // == deprecated tag transforms ===================================
14:
15: $r['font'] = new HTMLPurifier_TagTransform_Font();
16: $r['menu'] = new HTMLPurifier_TagTransform_Simple('ul');
17: $r['dir'] = new HTMLPurifier_TagTransform_Simple('ul');
18: $r['center'] = new HTMLPurifier_TagTransform_Simple('div', 'text-align:center;');
19: $r['u'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:underline;');
20: $r['s'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:line-through;');
21: $r['strike'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:line-through;');
22:
23: // == deprecated attribute transforms =============================
24:
25: $r['caption@align'] =
26: new HTMLPurifier_AttrTransform_EnumToCSS(
27: 'align',
28: array(
29: // we're following IE's behavior, not Firefox's, due
30: // to the fact that no one supports caption-side:right,
31: // W3C included (with CSS 2.1). This is a slightly
32: // unreasonable attribute!
33: 'left' => 'text-align:left;',
34: 'right' => 'text-align:right;',
35: 'top' => 'caption-side:top;',
36: 'bottom' => 'caption-side:bottom;' // not supported by IE
37: )
38: );
39:
40: // @align for img -------------------------------------------------
41: $r['img@align'] =
42: new HTMLPurifier_AttrTransform_EnumToCSS(
43: 'align',
44: array(
45: 'left' => 'float:left;',
46: 'right' => 'float:right;',
47: 'top' => 'vertical-align:top;',
48: 'middle' => 'vertical-align:middle;',
49: 'bottom' => 'vertical-align:baseline;',
50: )
51: );
52:
53: // @align for table -----------------------------------------------
54: $r['table@align'] =
55: new HTMLPurifier_AttrTransform_EnumToCSS(
56: 'align',
57: array(
58: 'left' => 'float:left;',
59: 'center' => 'margin-left:auto;margin-right:auto;',
60: 'right' => 'float:right;'
61: )
62: );
63:
64: // @align for hr -----------------------------------------------
65: $r['hr@align'] =
66: new HTMLPurifier_AttrTransform_EnumToCSS(
67: 'align',
68: array(
69: // we use both text-align and margin because these work
70: // for different browsers (IE and Firefox, respectively)
71: // and the melange makes for a pretty cross-compatible
72: // solution
73: 'left' => 'margin-left:0;margin-right:auto;text-align:left;',
74: 'center' => 'margin-left:auto;margin-right:auto;text-align:center;',
75: 'right' => 'margin-left:auto;margin-right:0;text-align:right;'
76: )
77: );
78:
79: // @align for h1, h2, h3, h4, h5, h6, p, div ----------------------
80: // {{{
81: $align_lookup = array();
82: $align_values = array('left', 'right', 'center', 'justify');
83: foreach ($align_values as $v) {
84: $align_lookup[$v] = "text-align:$v;";
85: }
86: // }}}
87: $r['h1@align'] =
88: $r['h2@align'] =
89: $r['h3@align'] =
90: $r['h4@align'] =
91: $r['h5@align'] =
92: $r['h6@align'] =
93: $r['p@align'] =
94: $r['div@align'] =
95: new HTMLPurifier_AttrTransform_EnumToCSS('align', $align_lookup);
96:
97: // @bgcolor for table, tr, td, th ---------------------------------
98: $r['table@bgcolor'] =
99: $r['tr@bgcolor'] =
100: $r['td@bgcolor'] =
101: $r['th@bgcolor'] =
102: new HTMLPurifier_AttrTransform_BgColor();
103:
104: // @border for img ------------------------------------------------
105: $r['img@border'] = new HTMLPurifier_AttrTransform_Border();
106:
107: // @clear for br --------------------------------------------------
108: $r['br@clear'] =
109: new HTMLPurifier_AttrTransform_EnumToCSS(
110: 'clear',
111: array(
112: 'left' => 'clear:left;',
113: 'right' => 'clear:right;',
114: 'all' => 'clear:both;',
115: 'none' => 'clear:none;',
116: )
117: );
118:
119: // @height for td, th ---------------------------------------------
120: $r['td@height'] =
121: $r['th@height'] =
122: new HTMLPurifier_AttrTransform_Length('height');
123:
124: // @hspace for img ------------------------------------------------
125: $r['img@hspace'] = new HTMLPurifier_AttrTransform_ImgSpace('hspace');
126:
127: // @noshade for hr ------------------------------------------------
128: // this transformation is not precise but often good enough.
129: // different browsers use different styles to designate noshade
130: $r['hr@noshade'] =
131: new HTMLPurifier_AttrTransform_BoolToCSS(
132: 'noshade',
133: 'color:#808080;background-color:#808080;border:0;'
134: );
135:
136: // @nowrap for td, th ---------------------------------------------
137: $r['td@nowrap'] =
138: $r['th@nowrap'] =
139: new HTMLPurifier_AttrTransform_BoolToCSS(
140: 'nowrap',
141: 'white-space:nowrap;'
142: );
143:
144: // @size for hr --------------------------------------------------
145: $r['hr@size'] = new HTMLPurifier_AttrTransform_Length('size', 'height');
146:
147: // @type for li, ol, ul -------------------------------------------
148: // {{{
149: $ul_types = array(
150: 'disc' => 'list-style-type:disc;',
151: 'square' => 'list-style-type:square;',
152: 'circle' => 'list-style-type:circle;'
153: );
154: $ol_types = array(
155: '1' => 'list-style-type:decimal;',
156: 'i' => 'list-style-type:lower-roman;',
157: 'I' => 'list-style-type:upper-roman;',
158: 'a' => 'list-style-type:lower-alpha;',
159: 'A' => 'list-style-type:upper-alpha;'
160: );
161: $li_types = $ul_types + $ol_types;
162: // }}}
163:
164: $r['ul@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $ul_types);
165: $r['ol@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $ol_types, true);
166: $r['li@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $li_types, true);
167:
168: // @vspace for img ------------------------------------------------
169: $r['img@vspace'] = new HTMLPurifier_AttrTransform_ImgSpace('vspace');
170:
171: // @width for table, hr, td, th, col ------------------------------------------
172: $r['table@width'] =
173: $r['td@width'] =
174: $r['th@width'] =
175: $r['col@width'] =
176: $r['hr@width'] = new HTMLPurifier_AttrTransform_Length('width');
177:
178: return $r;
179: }
180: }
181:
182: // vim: et sw=4 sts=4
183: