Release 4.1.1.
[htmlpurifier.git] / docs / dev-progress.html
blob714665b187b8b5e3bb98f7e993897dd00df5ebd4
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6 <meta name="description" content="Tables detailing HTML element and CSS property implementation coverage in HTML Purifier." />
7 <link rel="stylesheet" type="text/css" href="./style.css" />
9 <title>Implementation Progress - HTML Purifier</title>
11 <style type="text/css">
13 td {padding-right:1em;border-bottom:1px solid #000;padding-left:0.5em;}
14 th {text-align:left;padding-top:1.4em;font-size:13pt;
15 border-bottom:2px solid #000;background:#FFF;}
16 thead th {text-align:left;padding:0.1em;background-color:#EEE;}
18 .impl-yes {background:#9D9;}
19 .impl-partial {background:#FFA;}
20 .impl-no {background:#CCC;}
22 .danger {color:#600;}
23 .css1 {color:#060;}
24 .required {font-weight:bold;}
25 .feature {color:#999;}
27 </style>
29 </head><body>
31 <h1>Implementation Progress</h1>
33 <div id="filing">Filed under Development</div>
34 <div id="index">Return to the <a href="index.html">index</a>.</div>
35 <div id="home"><a href="http://htmlpurifier.org/">HTML Purifier</a> End-User Documentation</div>
37 <p>
38 <strong>Warning:</strong> This table is kept for historical purposes and
39 is not being actively updated.
40 </p>
42 <h2>Key</h2>
44 <table cellspacing="0"><tbody>
45 <tr><td class="impl-yes">Implemented</td></tr>
46 <tr><td class="impl-partial">Partially implemented</td></tr>
47 <tr><td class="impl-no">Not priority to implement</td></tr>
48 <tr><td class="danger">Dangerous attribute/property</td></tr>
49 <tr><td class="css1">Present in CSS1</td></tr>
50 <tr><td class="feature">Feature, requires extra work</td></tr>
51 </tbody></table>
53 <h2>CSS</h2>
55 <table cellspacing="0">
57 <thead>
58 <tr><th>Name</th><th>Notes</th></tr>
59 </thead>
61 <!--
62 <tr><td>-</td><td>-</td></tr>
63 -->
65 <tbody>
66 <tr><th colspan="2">Standard</th></tr>
67 <tr class="css1 impl-yes"><td>background-color</td><td>COMPOSITE(&lt;color&gt;, transparent)</td></tr>
68 <tr class="css1 impl-yes"><td>background</td><td>SHORTHAND, currently alias for background-color</td></tr>
69 <tr class="css1 impl-yes"><td>border</td><td>SHORTHAND, MULTIPLE</td></tr>
70 <tr class="css1 impl-yes"><td>border-color</td><td>MULTIPLE</td></tr>
71 <tr class="css1 impl-yes"><td>border-style</td><td>MULTIPLE</td></tr>
72 <tr class="css1 impl-yes"><td>border-width</td><td>MULTIPLE</td></tr>
73 <tr class="css1 impl-yes"><td>border-*</td><td>SHORTHAND</td></tr>
74 <tr class="impl-yes"><td>border-*-color</td><td>COMPOSITE(&lt;color&gt;, transparent)</td></tr>
75 <tr class="impl-yes"><td>border-*-style</td><td>ENUM(none, hidden, dotted, dashed,
76 solid, double, groove, ridge, inset, outset)</td></tr>
77 <tr class="css1 impl-yes"><td>border-*-width</td><td>COMPOSITE(&lt;length&gt;, thin, medium, thick)</td></tr>
78 <tr class="css1 impl-yes"><td>clear</td><td>ENUM(none, left, right, both)</td></tr>
79 <tr class="css1 impl-yes"><td>color</td><td>&lt;color&gt;</td></tr>
80 <tr class="css1 impl-yes"><td>float</td><td>ENUM(left, right, none), May require layout
81 precautions with clear</td></tr>
82 <tr class="css1 impl-yes"><td>font</td><td>SHORTHAND</td></tr>
83 <tr class="css1 impl-yes"><td>font-family</td><td>CSS validator may complain if fallback font
84 family not specified</td></tr>
85 <tr class="css1 impl-yes"><td>font-size</td><td>COMPOSITE(&lt;absolute-size&gt;,
86 &lt;relative-size&gt;, &lt;length&gt;, &lt;percentage&gt;)</td></tr>
87 <tr class="css1 impl-yes"><td>font-style</td><td>ENUM(normal, italic, oblique)</td></tr>
88 <tr class="css1 impl-yes"><td>font-variant</td><td>ENUM(normal, small-caps)</td></tr>
89 <tr class="css1 impl-yes"><td>font-weight</td><td>ENUM(normal, bold, bolder, lighter,
90 100, 200, 300, 400, 500, 600, 700, 800, 900), maybe special code for
91 in-between integers</td></tr>
92 <tr class="css1 impl-yes"><td>letter-spacing</td><td>COMPOSITE(&lt;length&gt;, normal)</td></tr>
93 <tr class="css1 impl-yes"><td>line-height</td><td>COMPOSITE(&lt;number&gt;,
94 &lt;length&gt;, &lt;percentage&gt;, normal)</td></tr>
95 <tr class="css1 impl-yes"><td>list-style-position</td><td>ENUM(inside, outside),
96 Strange behavior in browsers</td></tr>
97 <tr class="css1 impl-yes"><td>list-style-type</td><td>ENUM(...),
98 Well-supported values are: disc, circle, square,
99 decimal, lower-roman, upper-roman, lower-alpha and upper-alpha. See also
100 CSS 3. Mostly IE lack of support.</td></tr>
101 <tr class="css1 impl-yes"><td>list-style</td><td>SHORTHAND</td></tr>
102 <tr class="css1 impl-yes"><td>margin</td><td>MULTIPLE</td></tr>
103 <tr class="css1 impl-yes"><td>margin-*</td><td>COMPOSITE(&lt;length&gt;,
104 &lt;percentage&gt;, auto)</td></tr>
105 <tr class="css1 impl-yes"><td>padding</td><td>MULTIPLE</td></tr>
106 <tr class="css1 impl-yes"><td>padding-*</td><td>COMPOSITE(&lt;length&gt;(positive),
107 &lt;percentage&gt;(positive))</td></tr>
108 <tr class="css1 impl-yes"><td>text-align</td><td>ENUM(left, right,
109 center, justify)</td></tr>
110 <tr class="css1 impl-yes"><td>text-decoration</td><td>No blink (argh my eyes), not
111 enum, can be combined (composite sorta): underline, overline,
112 line-through</td></tr>
113 <tr class="css1 impl-yes"><td>text-indent</td><td>COMPOSITE(&lt;length&gt;,
114 &lt;percentage&gt;)</td></tr>
115 <tr class="css1 impl-yes"><td>text-transform</td><td>ENUM(capitalize, uppercase,
116 lowercase, none)</td></tr>
117 <tr class="css1 impl-yes"><td>width</td><td>COMPOSITE(&lt;length&gt;,
118 &lt;percentage&gt;, auto), Interesting</td></tr>
119 <tr class="css1 impl-yes"><td>word-spacing</td><td>COMPOSITE(&lt;length&gt;, auto),
120 IE 5 no support</td></tr>
121 </tbody>
123 <tbody>
124 <tr><th colspan="2">Table</th></tr>
125 <tr class="impl-yes"><td>border-collapse</td><td>ENUM(collapse, seperate)</td></tr>
126 <tr class="impl-yes"><td>border-space</td><td>MULTIPLE</td></tr>
127 <tr class="impl-yes"><td>caption-side</td><td>ENUM(top, bottom)</td></tr>
128 <tr class="feature"><td>empty-cells</td><td>ENUM(show, hide), No IE support makes this useless,
129 possible fix with &amp;nbsp;? Unknown release milestone.</td></tr>
130 <tr class="impl-yes"><td>table-layout</td><td>ENUM(auto, fixed)</td></tr>
131 <tr class="impl-yes css1"><td>vertical-align</td><td>COMPOSITE(ENUM(baseline, sub,
132 super, top, text-top, middle, bottom, text-bottom), &lt;percentage&gt;,
133 &lt;length&gt;) Also applies to others with explicit height</td></tr>
134 </tbody>
136 <tbody>
137 <tr><th colspan="2">Absolute positioning, unknown release milestone</th></tr>
138 <tr class="danger impl-no"><td>bottom</td><td rowspan="4">Dangerous, must be non-negative to even be considered,
139 but it's still possible to arbitrarily position by running over.</td></tr>
140 <tr class="danger impl-no"><td>left</td></tr>
141 <tr class="danger impl-no"><td>right</td></tr>
142 <tr class="danger impl-no"><td>top</td></tr>
143 <tr class="impl-no"><td>clip</td><td>-</td></tr>
144 <tr class="danger impl-no"><td>position</td><td>ENUM(static, relative, absolute, fixed)
145 relative not absolute?</td></tr>
146 <tr class="danger impl-no"><td>z-index</td><td>Dangerous</td></tr>
147 </tbody>
149 <tbody>
150 <tr><th colspan="2">Unknown</th></tr>
151 <tr class="danger css1 impl-yes"><td>background-image</td><td>Dangerous</td></tr>
152 <tr class="css1 impl-yes"><td>background-attachment</td><td>ENUM(scroll, fixed),
153 Depends on background-image</td></tr>
154 <tr class="css1 impl-yes"><td>background-position</td><td>Depends on background-image</td></tr>
155 <tr class="danger impl-no"><td>cursor</td><td>Dangerous but fluffy</td></tr>
156 <tr class="danger impl-yes"><td>display</td><td>ENUM(...), Dangerous but interesting;
157 will not implement list-item, run-in (Opera only) or table (no IE);
158 inline-block has incomplete IE6 support and requires -moz-inline-box
159 for Mozilla. Unknown target milestone.</td></tr>
160 <tr class="css1 impl-yes"><td>height</td><td>Interesting, why use it? Unknown target milestone.</td></tr>
161 <tr class="danger css1 impl-yes"><td>list-style-image</td><td>Dangerous?</td></tr>
162 <tr class="impl-no"><td>max-height</td><td rowspan="4">No IE 5/6</td></tr>
163 <tr class="impl-no"><td>min-height</td></tr>
164 <tr class="impl-no"><td>max-width</td></tr>
165 <tr class="impl-no"><td>min-width</td></tr>
166 <tr class="impl-no"><td>orphans</td><td>No IE support</td></tr>
167 <tr class="impl-no"><td>widows</td><td>No IE support</td></tr>
168 <tr><td>overflow</td><td>ENUM, IE 5/6 almost (remove visible if set). Unknown target milestone.</td></tr>
169 <tr><td>page-break-after</td><td>ENUM(auto, always, avoid, left, right),
170 IE 5.5/6 and Opera. Unknown target milestone.</td></tr>
171 <tr><td>page-break-before</td><td>ENUM(auto, always, avoid, left, right),
172 Mostly supported. Unknown target milestone.</td></tr>
173 <tr><td>page-break-inside</td><td>ENUM(avoid, auto), Opera only. Unknown target milestone.</td></tr>
174 <tr class="impl-no"><td>quotes</td><td>May be dropped from CSS2, fairly useless for inline context</td></tr>
175 <tr class="danger impl-yes"><td>visibility</td><td>ENUM(visible, hidden, collapse),
176 Dangerous</td></tr>
177 <tr class="css1 feature impl-partial"><td>white-space</td><td>ENUM(normal, pre, nowrap, pre-wrap,
178 pre-line), Spotty implementation:
179 pre (no IE 5/6), <em>nowrap</em> (no IE 5, supported),
180 pre-wrap (only Opera), pre-line (no support). Fixable? Unknown target milestone.</td></tr>
181 </tbody>
183 <tbody class="impl-no">
184 <tr><th colspan="2">Aural</th></tr>
185 <tr><td>azimuth</td><td>-</td></tr>
186 <tr><td>cue</td><td>-</td></tr>
187 <tr><td>cue-after</td><td>-</td></tr>
188 <tr><td>cue-before</td><td>-</td></tr>
189 <tr><td>elevation</td><td>-</td></tr>
190 <tr><td>pause-after</td><td>-</td></tr>
191 <tr><td>pause-before</td><td>-</td></tr>
192 <tr><td>pause</td><td>-</td></tr>
193 <tr><td>pitch-range</td><td>-</td></tr>
194 <tr><td>pitch</td><td>-</td></tr>
195 <tr><td>play-during</td><td>-</td></tr>
196 <tr><td>richness</td><td>-</td></tr>
197 <tr><td>speak-header</td><td>Table related</td></tr>
198 <tr><td>speak-numeral</td><td>-</td></tr>
199 <tr><td>speak-punctuation</td><td>-</td></tr>
200 <tr><td>speak</td><td>-</td></tr>
201 <tr><td>speech-rate</td><td>-</td></tr>
202 <tr><td>stress</td><td>-</td></tr>
203 <tr><td>voice-family</td><td>-</td></tr>
204 <tr><td>volume</td><td>-</td></tr>
205 </tbody>
207 <tbody class="impl-no">
208 <tr><th colspan="2">Will not implement</th></tr>
209 <tr><td>content</td><td>Not applicable for inline styles</td></tr>
210 <tr><td>counter-increment</td><td>Needs content, Opera only</td></tr>
211 <tr><td>counter-reset</td><td>Needs content, Opera only</td></tr>
212 <tr><td>direction</td><td>No support</td></tr>
213 <tr><td>outline-color</td><td rowspan="4">IE Mac and Opera on outside,
214 Mozilla on inside and needs -moz-outline, no IE support.</td></tr>
215 <tr><td>outline-style</td></tr>
216 <tr><td>outline-width</td></tr>
217 <tr><td>outline</td></tr>
218 <tr><td>unicode-bidi</td><td>No support</td></tr>
219 </tbody>
221 </table>
223 <h2>Interesting Attributes</h2>
225 <table cellspacing="0">
227 <thead>
228 <tr><th>Attribute</th><th>Tags</th><th>Notes</th></tr>
229 </thead>
231 <!--
232 <tr><th></th></tr>
233 <tbody>
234 <tr><td>-</td><td>-</td><td>-</td></tr>
235 </tbody>
238 <tbody>
239 <tr><th colspan="3">CSS</th></tr>
240 <tr class="impl-yes"><td>style</td><td>All</td><td>Parser is reasonably functional. Status here doesn't count individual properties.</td></tr>
241 </tbody>
243 <tbody>
244 <tr><th colspan="3">Questionable</th></tr>
245 <tr class="impl-no"><td>accesskey</td><td>A</td><td>May interfere with main interface</td></tr>
246 <tr class="impl-no"><td>tabindex</td><td>A</td><td>May interfere with main interface</td></tr>
247 <tr class="impl-yes"><td>target</td><td>A</td><td>Config enabled, only useful for frame layouts, disallowed in strict</td></tr>
248 </tbody>
250 <tbody>
251 <tr><th colspan="3">Miscellaneous</th></tr>
252 <tr><td>datetime</td><td>DEL, INS</td><td>No visible effect, ISO format</td></tr>
253 <tr class="impl-yes"><td>rel</td><td>A</td><td>Largely user-defined: nofollow, tag (see microformats)</td></tr>
254 <tr class="impl-yes"><td>rev</td><td>A</td><td>Largely user-defined: vote-*</td></tr>
255 <tr class="feature"><td>axis</td><td>TD, TH</td><td>W3C only: No browser implementation</td></tr>
256 <tr class="feature"><td>char</td><td>COL, COLGROUP, TBODY, TD, TFOOT, TH, THEAD, TR</td><td>W3C only: No browser implementation</td></tr>
257 <tr class="feature"><td>headers</td><td>TD, TH</td><td>W3C only: No browser implementation</td></tr>
258 <tr class="feature"><td>scope</td><td>TD, TH</td><td>W3C only: No browser implementation</td></tr>
259 </tbody>
261 <tbody class="impl-yes">
262 <tr><th colspan="3">URI</th></tr>
263 <tr><td rowspan="2">cite</td><td>BLOCKQUOTE, Q</td><td>For attribution</td></tr>
264 <tr><td>DEL, INS</td><td>Link to explanation why it changed</td></tr>
265 <tr><td>href</td><td>A</td><td>-</td></tr>
266 <tr><td>longdesc</td><td>IMG</td><td>-</td></tr>
267 <tr class="required"><td>src</td><td>IMG</td><td>Required</td></tr>
268 </tbody>
270 <tbody>
271 <tr><th colspan="3">Transform</th></tr>
272 <tr class="impl-yes"><td rowspan="5">align</td><td>CAPTION</td><td>'caption-side' for top/bottom, 'text-align' for left/right</td></tr>
273 <tr class="impl-yes"><td>IMG</td><td rowspan="3">See specimens/html-align-to-css.html</td></tr>
274 <tr class="impl-yes"><td>TABLE</td></tr>
275 <tr class="impl-yes"><td>HR</td></tr>
276 <tr class="impl-yes"><td>H1, H2, H3, H4, H5, H6, P</td><td>Equivalent style 'text-align'</td></tr>
277 <tr class="required impl-yes"><td>alt</td><td>IMG</td><td>Required, insert image filename if src is present or default invalid image text</td></tr>
278 <tr class="impl-yes"><td rowspan="3">bgcolor</td><td>TABLE</td><td>Superset style 'background-color'</td></tr>
279 <tr class="impl-yes"><td>TR</td><td>Superset style 'background-color'</td></tr>
280 <tr class="impl-yes"><td>TD, TH</td><td>Superset style 'background-color'</td></tr>
281 <tr class="impl-yes"><td>border</td><td>IMG</td><td>Equivalent style <code>border:[number]px solid</code></td></tr>
282 <tr class="impl-yes"><td>clear</td><td>BR</td><td>Near-equiv style 'clear', transform 'all' into 'both'</td></tr>
283 <tr class="impl-no"><td>compact</td><td>DL, OL, UL</td><td>Boolean, needs custom CSS class; rarely used anyway</td></tr>
284 <tr class="required impl-yes"><td>dir</td><td>BDO</td><td>Required, insert ltr (or configuration value) if none</td></tr>
285 <tr class="impl-yes"><td>height</td><td>TD, TH</td><td>Near-equiv style 'height', needs px suffix if original was in pixels</td></tr>
286 <tr class="impl-yes"><td>hspace</td><td>IMG</td><td>Near-equiv styles 'margin-top' and 'margin-bottom', needs px suffix</td></tr>
287 <tr class="impl-yes"><td>lang</td><td>*</td><td>Copy value to xml:lang</td></tr>
288 <tr class="impl-yes"><td rowspan="2">name</td><td>IMG</td><td>Turn into ID</td></tr>
289 <tr class="impl-yes"><td>A</td><td>Turn into ID</td></tr>
290 <tr class="impl-yes"><td>noshade</td><td>HR</td><td>Boolean, style 'border-style:solid;'</td></tr>
291 <tr class="impl-yes"><td>nowrap</td><td>TD, TH</td><td>Boolean, style 'white-space:nowrap;' (not compat with IE5)</td></tr>
292 <tr class="impl-yes"><td>size</td><td>HR</td><td>Near-equiv 'height', needs px suffix if original was pixels</td></tr>
293 <tr class="required impl-yes"><td>src</td><td>IMG</td><td>Required, insert blank or default img if not set</td></tr>
294 <tr class="impl-yes"><td>start</td><td>OL</td><td>Poorly supported 'counter-reset', allowed in loose, dropped in strict</td></tr>
295 <tr class="impl-yes"><td rowspan="3">type</td><td>LI</td><td rowspan="3">Equivalent style 'list-style-type', different allowed values though. (needs testing)</td></tr>
296 <tr class="impl-yes"><td>OL</td></tr>
297 <tr class="impl-yes"><td>UL</td></tr>
298 <tr class="impl-yes"><td>value</td><td>LI</td><td>Poorly supported 'counter-reset', allowed in loose, dropped in strict</td></tr>
299 <tr class="impl-yes"><td>vspace</td><td>IMG</td><td>Near-equiv styles 'margin-left' and 'margin-right', needs px suffix, see hspace</td></tr>
300 <tr class="impl-yes"><td rowspan="2">width</td><td>HR</td><td rowspan="2">Near-equiv style 'width', needs px suffix if original was pixels</td></tr>
301 <tr class="impl-yes"><td>TD, TH</td></tr>
302 </tbody>
304 </table>
306 </body></html>
308 <!-- vim: et sw=4 sts=4