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