Bug 460926 A11y hierachy is broken on Ubuntu 8.10 (GNOME 2.24), r=Evan.Yan sr=roc
[wine-gecko.git] / layout / style / test / property_database.js
blobabe39cea529c46832ae2b6ddaf4138e2b6a5ed89
1 /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 /* vim: set shiftwidth=4 tabstop=4 autoindent cindent noexpandtab: */
3 /* ***** BEGIN LICENSE BLOCK *****
4  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5  *
6  * The contents of this file are subject to the Mozilla Public License Version
7  * 1.1 (the "License"); you may not use this file except in compliance with
8  * the License. You may obtain a copy of the License at
9  * http://www.mozilla.org/MPL/
10  *
11  * Software distributed under the License is distributed on an "AS IS" basis,
12  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13  * for the specific language governing rights and limitations under the
14  * License.
15  *
16  * The Original Code is property_database.js.
17  *
18  * The Initial Developer of the Original Code is the Mozilla Foundation.
19  * Portions created by the Initial Developer are Copyright (C) 2007
20  * the Initial Developer. All Rights Reserved.
21  *
22  * Contributor(s):
23  *   L. David Baron <dbaron@dbaron.org>, Mozilla Corporation (original author)
24  *
25  * Alternatively, the contents of this file may be used under the terms of
26  * either the GNU General Public License Version 2 or later (the "GPL"), or
27  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28  * in which case the provisions of the GPL or the LGPL are applicable instead
29  * of those above. If you wish to allow use of your version of this file only
30  * under the terms of either the GPL or the LGPL, and not to allow others to
31  * use your version of this file under the terms of the MPL, indicate your
32  * decision by deleting the provisions above and replace them with the notice
33  * and other provisions required by the GPL or the LGPL. If you do not delete
34  * the provisions above, a recipient may use your version of this file under
35  * the terms of any one of the MPL, the GPL or the LGPL.
36  *
37  * ***** END LICENSE BLOCK ***** */
39 // True longhand properties.
40 const CSS_TYPE_LONGHAND = 0;
42 // True shorthand properties.
43 const CSS_TYPE_TRUE_SHORTHAND = 1;
45 // Properties that we handle as shorthands but were longhands either in
46 // the current spec or earlier versions of the spec.
47 const CSS_TYPE_SHORTHAND_AND_LONGHAND = 2;
49 // Each property has the following fields:
50 //   domProp: The name of the relevant member of nsIDOM[NS]CSS2Properties
51 //   inherited: Whether the property is inherited by default (stated as 
52 //     yes or no in the property header in all CSS specs)
53 //   type: see above
54 //   get_computed: if present, the property's computed value shows up on
55 //     another property, and this is a function used to get it
56 //   initial_values: Values whose computed value should be the same as the
57 //     computed value for the property's initial value.
58 //   other_values: Values whose computed value should be different from the
59 //     computed value for the property's initial value.
60 //   XXX Should have a third field for values whose computed value may or
61 //     may not be the same as for the property's initial value.
62 //   invalid_values: Things that are not values for the property and
63 //     should be rejected.
65 var gCSSProperties = {
66         "-moz-appearance": {
67                 domProp: "MozAppearance",
68                 inherited: false,
69                 type: CSS_TYPE_LONGHAND,
70                 initial_values: [ "none" ],
71                 other_values: [ "radio", "menulist" ],
72                 invalid_values: []
73         },
74         "-moz-background-clip": {
75                 domProp: "MozBackgroundClip",
76                 inherited: false,
77                 type: CSS_TYPE_LONGHAND,
78                 initial_values: [ "border" ],
79                 other_values: [ "padding" ],
80                 invalid_values: [ "content", "margin" ]
81         },
82         "-moz-background-inline-policy": {
83                 domProp: "MozBackgroundInlinePolicy",
84                 inherited: false,
85                 type: CSS_TYPE_LONGHAND,
86                 initial_values: [ "continuous" ],
87                 other_values: ["bounding-box", "each-box" ],
88                 invalid_values: []
89         },
90         "-moz-background-origin": {
91                 domProp: "MozBackgroundOrigin",
92                 inherited: false,
93                 type: CSS_TYPE_LONGHAND,
94                 initial_values: [ "padding" ],
95                 other_values: [ "border", "content" ],
96                 invalid_values: [ "margin" ]
97         },
98         "-moz-binding": {
99                 domProp: "MozBinding",
100                 inherited: false,
101                 type: CSS_TYPE_LONGHAND,
102                 initial_values: [ "none" ],
103                 other_values: [ "url(foo.xml)" ],
104                 invalid_values: []
105         },
106         "-moz-border-bottom-colors": {
107                 domProp: "MozBorderBottomColors",
108                 inherited: false,
109                 type: CSS_TYPE_LONGHAND,
110                 initial_values: [ "none" ],
111                 other_values: [ "red green", "red #fc3", "#ff00cc", "currentColor", "blue currentColor orange currentColor" ],
112                 invalid_values: [ "red none", "red inherit", "red, green" ]
113         },
114         "-moz-border-end": {
115                 domProp: "MozBorderEnd",
116                 inherited: false,
117                 type: CSS_TYPE_TRUE_SHORTHAND,
118                 subproperties: [ "-moz-border-end-color", "-moz-border-end-style", "-moz-border-end-width" ],
119                 initial_values: [ "none", "medium", "currentColor", "none medium currentcolor" ],
120                 other_values: [ "solid", "thin", "green", "medium solid", "green solid", "10px solid", "thick solid", "5px green none" ],
121                 invalid_values: [ "5%" ]
122         },
123         "-moz-border-end-color": {
124                 domProp: "MozBorderEndColor",
125                 inherited: false,
126                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
127                 get_computed: logical_box_prop_get_computed,
128                 initial_values: [ "currentColor" ],
129                 other_values: [ "green", "rgba(255,128,0,0.5)", "transparent" ],
130                 invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000" ]
131         },
132         "-moz-border-end-style": {
133                 domProp: "MozBorderEndStyle",
134                 inherited: false,
135                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
136                 get_computed: logical_box_prop_get_computed,
137                 /* XXX hidden is sometimes the same as initial */
138                 initial_values: [ "none" ],
139                 other_values: [ "solid", "dashed", "dotted", "double", "outset", "inset", "groove", "ridge" ],
140                 invalid_values: []
141         },
142         "-moz-border-end-width": {
143                 domProp: "MozBorderEndWidth",
144                 inherited: false,
145                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
146                 get_computed: logical_box_prop_get_computed,
147                 prerequisites: { "-moz-border-end-style": "solid" },
148                 initial_values: [ "medium", "3px" ],
149                 other_values: [ "thin", "thick", "1px", "2em" ],
150                 invalid_values: [ "5%" ]
151         },
152         "-moz-border-image": {
153                 domProp: "MozBorderImage",
154                 inherited: false,
155                 type: CSS_TYPE_LONGHAND,
156                 initial_values: [ "none" ],
157                 other_values: [ "url('border.png') 27 27 27 27",
158                                 "url('border.png') 27",
159                                 "url('border.png') 27 27 27 27 repeat",
160                                 "url('border.png') 27 27 27 27 / 1em",
161                                 "url('border.png') 27 27 27 27 / 1em 1em 1em 1em repeat",
162                                 "url('border.png') 27 27 27 27 / 1em 1em 1em 1em stretch round" ],
163                 invalid_values: [ "url('border.png')",
164                                   "url('border.png') 27 27 27 27 27",
165                                   "url('border.png') 27 27 27 27 / 1em 1em 1em 1em 1em",
166                                   "url('border.png') / repeat",
167                                   "url('border.png') 27 27 27 27 /" ]
168         },
169         "-moz-border-left-colors": {
170                 domProp: "MozBorderLeftColors",
171                 inherited: false,
172                 type: CSS_TYPE_LONGHAND,
173                 initial_values: [ "none" ],
174                 other_values: [ "red green", "red #fc3", "#ff00cc", "currentColor", "blue currentColor orange currentColor" ],
175                 invalid_values: [ "red none", "red inherit", "red, green" ]
176         },
177         "-moz-border-radius": {
178                 domProp: "MozBorderRadius",
179                 inherited: false,
180                 type: CSS_TYPE_TRUE_SHORTHAND,
181                 subproperties: [ "-moz-border-radius-bottomleft", "-moz-border-radius-bottomright", "-moz-border-radius-topleft", "-moz-border-radius-topright" ],
182                 initial_values: [ "0", "0px", "0px 0 0 0px" ], /* 0% ? */
183                 other_values: [ "3%", "1px", "2em", "3em 2px", "2pt 3% 4em", "2px 2px 2px 2px", // circular
184                                 "3% / 2%", "1px / 4px", "2em / 1em", "3em 2px / 2px 3em", "2pt 3% 4em / 4pt 1% 5em", "2px 2px 2px 2px / 4px 4px 4px 4px", "1pt / 2pt 3pt", "4pt 5pt / 3pt" // elliptical
185                               ],
186                 invalid_values: [ "2px -2px", "inherit 2px", "inherit / 2px", "2px inherit", "2px / inherit", "2px 2px 2px 2px 2px", "1px / 2px 2px 2px 2px 2px" ]
187         },
188         "-moz-border-radius-bottomleft": {
189                 domProp: "MozBorderRadiusBottomleft",
190                 inherited: false,
191                 type: CSS_TYPE_LONGHAND,
192                 initial_values: [ "0", "0px" ], /* 0% ? */
193                 other_values: [ "3%", "1px", "2em", // circular
194                                 "3% 2%", "1px 4px", "2em 2pt" // elliptical
195                               ],
196                 invalid_values: [ "-1px", "4px -2px", "inherit 2px", "2px inherit" ]
197         },
198         "-moz-border-radius-bottomright": {
199                 domProp: "MozBorderRadiusBottomright",
200                 inherited: false,
201                 type: CSS_TYPE_LONGHAND,
202                 initial_values: [ "0", "0px" ], /* 0% ? */
203                 other_values: [ "3%", "1px", "2em", // circular
204                                 "3% 2%", "1px 4px", "2em 2pt" // elliptical
205                               ],
206                 invalid_values: [ "-1px", "4px -2px", "inherit 2px", "2px inherit" ]
207         },
208         "-moz-border-radius-topleft": {
209                 domProp: "MozBorderRadiusTopleft",
210                 inherited: false,
211                 type: CSS_TYPE_LONGHAND,
212                 initial_values: [ "0", "0px" ], /* 0% ? */
213                 other_values: [ "3%", "1px", "2em", // circular
214                                 "3% 2%", "1px 4px", "2em 2pt" // elliptical
215                               ],
216                 invalid_values: [ "-1px", "4px -2px", "inherit 2px", "2px inherit" ]
217         },
218         "-moz-border-radius-topright": {
219                 domProp: "MozBorderRadiusTopright",
220                 inherited: false,
221                 type: CSS_TYPE_LONGHAND,
222                 initial_values: [ "0", "0px" ], /* 0% ? */
223                 other_values: [ "3%", "1px", "2em", // circular
224                                 "3% 2%", "1px 4px", "2em 2pt" // elliptical
225                               ],
226                 invalid_values: [ "-1px", "4px -2px", "inherit 2px", "2px inherit" ]
227         },
228         "-moz-border-right-colors": {
229                 domProp: "MozBorderRightColors",
230                 inherited: false,
231                 type: CSS_TYPE_LONGHAND,
232                 initial_values: [ "none" ],
233                 other_values: [ "red green", "red #fc3", "#ff00cc", "currentColor", "blue currentColor orange currentColor" ],
234                 invalid_values: [ "red none", "red inherit", "red, green" ]
235         },
236         "-moz-border-start": {
237                 domProp: "MozBorderStart",
238                 inherited: false,
239                 type: CSS_TYPE_TRUE_SHORTHAND,
240                 subproperties: [ "-moz-border-start-color", "-moz-border-start-style", "-moz-border-start-width" ],
241                 initial_values: [ "none", "medium", "currentColor", "none medium currentcolor" ],
242                 other_values: [ "solid", "thin", "green", "medium solid", "green solid", "10px solid", "thick solid", "5px green none" ],
243                 invalid_values: [ "5%" ]
244         },
245         "-moz-border-start-color": {
246                 domProp: "MozBorderStartColor",
247                 inherited: false,
248                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
249                 get_computed: logical_box_prop_get_computed,
250                 initial_values: [ "currentColor" ],
251                 other_values: [ "green", "rgba(255,128,0,0.5)", "transparent" ],
252                 invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000" ]
253         },
254         "-moz-border-start-style": {
255                 domProp: "MozBorderStartStyle",
256                 inherited: false,
257                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
258                 get_computed: logical_box_prop_get_computed,
259                 /* XXX hidden is sometimes the same as initial */
260                 initial_values: [ "none" ],
261                 other_values: [ "solid", "dashed", "dotted", "double", "outset", "inset", "groove", "ridge" ],
262                 invalid_values: []
263         },
264         "-moz-border-start-width": {
265                 domProp: "MozBorderStartWidth",
266                 inherited: false,
267                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
268                 get_computed: logical_box_prop_get_computed,
269                 prerequisites: { "-moz-border-start-style": "solid" },
270                 initial_values: [ "medium", "3px" ],
271                 other_values: [ "thin", "thick", "1px", "2em" ],
272                 invalid_values: [ "5%" ]
273         },
274         "-moz-border-top-colors": {
275                 domProp: "MozBorderTopColors",
276                 inherited: false,
277                 type: CSS_TYPE_LONGHAND,
278                 initial_values: [ "none" ],
279                 other_values: [ "red green", "red #fc3", "#ff00cc", "currentColor", "blue currentColor orange currentColor" ],
280                 invalid_values: [ "red none", "red inherit", "red, green" ]
281         },
282         "-moz-box-align": {
283                 domProp: "MozBoxAlign",
284                 inherited: false,
285                 type: CSS_TYPE_LONGHAND,
286                 initial_values: [ "stretch" ],
287                 other_values: [ "start", "center", "baseline", "end" ],
288                 invalid_values: []
289         },
290         "-moz-box-direction": {
291                 domProp: "MozBoxDirection",
292                 inherited: false,
293                 type: CSS_TYPE_LONGHAND,
294                 initial_values: [ "normal" ],
295                 other_values: [ "reverse" ],
296                 invalid_values: []
297         },
298         "-moz-box-flex": {
299                 domProp: "MozBoxFlex",
300                 inherited: false,
301                 type: CSS_TYPE_LONGHAND,
302                 initial_values: [ "0", "0.0", "-0.0" ],
303                 other_values: [ "1", "100", "0.1" ],
304                 invalid_values: [ "10px", "-1" ]
305         },
306         "-moz-box-ordinal-group": {
307                 domProp: "MozBoxOrdinalGroup",
308                 inherited: false,
309                 type: CSS_TYPE_LONGHAND,
310                 initial_values: [ "1" ],
311                 other_values: [ "0", "-1", "100", "-1000" ],
312                 invalid_values: [ "1.0" ]
313         },
314         "-moz-box-orient": {
315                 domProp: "MozBoxOrient",
316                 inherited: false,
317                 type: CSS_TYPE_LONGHAND,
318                 initial_values: [ "horizontal", "inline-axis" ],
319                 other_values: [ "vertical", "block-axis" ],
320                 invalid_values: []
321         },
322         "-moz-box-pack": {
323                 domProp: "MozBoxPack",
324                 inherited: false,
325                 type: CSS_TYPE_LONGHAND,
326                 initial_values: [ "start" ],
327                 other_values: [ "center", "end", "justify" ],
328                 invalid_values: []
329         },
330         "-moz-box-shadow": {
331                 domProp: "MozBoxShadow",
332                 inherited: false,
333                 type: CSS_TYPE_LONGHAND,
334                 initial_values: [ "none" ],
335                 prerequisites: { "color": "blue" },
336                 other_values: [ "2px 2px", "2px 2px 1px", "2px 2px 2px 2px", "blue 3px 2px", "2px 2px 1px 5px green", "2px 2px red", "green 2px 2px 1px", "green 2px 2px, blue 1px 3px 4px", "currentColor 3px 3px", "blue 2px 2px, currentColor 1px 2px, 1px 2px 3px 2px orange", "3px 0 0 0" ],
337                 invalid_values: [ "3% 3%", "1px 1px 1px 1px 1px", "2px 2px, none", "red 2px 2px blue", "inherit, 2px 2px", "2px 2px, inherit", "2px 2px -5px" ]
338         },
339         "-moz-box-sizing": {
340                 domProp: "MozBoxSizing",
341                 inherited: false,
342                 type: CSS_TYPE_LONGHAND,
343                 initial_values: [ "content-box" ],
344                 other_values: [ "border-box", "padding-box" ],
345                 invalid_values: [ "margin-box", "content", "padding", "border", "margin" ]
346         },
347         "-moz-column-count": {
348                 domProp: "MozColumnCount",
349                 inherited: false,
350                 type: CSS_TYPE_LONGHAND,
351                 initial_values: [ "auto" ],
352                 other_values: [ "1", "0", "17" ],
353                 invalid_values: [
354                         "-1", //unclear: see http://lists.w3.org/Archives/Public/www-style/2007Apr/0030
355                         "3px"
356                 ]
357         },
358         "-moz-column-gap": {
359                 domProp: "MozColumnGap",
360                 inherited: false,
361                 type: CSS_TYPE_LONGHAND,
362                 initial_values: [ "normal", "1em" ],
363                 other_values: [ "2px", "4em" ],
364                 invalid_values: [ "3%", "-1px" ]
365         },
366         "-moz-column-width": {
367                 domProp: "MozColumnWidth",
368                 inherited: false,
369                 type: CSS_TYPE_LONGHAND,
370                 initial_values: [ "auto" ],
371                 other_values: [ "15px", "50%" ],
372                 invalid_values: [ "20", "-1px" ]
373         },
374         "-moz-column-rule-width": {
375                 domProp: "MozColumnRuleWidth",
376                 inherited: false,
377                 type: CSS_TYPE_LONGHAND,
378                 prerequisites: { "-moz-column-rule-style": "solid" },
379                 initial_values: [ "medium" ],
380                 other_values: [ "thin", "15px" ],
381                 invalid_values: [ "20", "-1px", "red", "50%" ]
382         },
383         "-moz-column-rule-style": {
384                 domProp: "MozColumnRuleStyle",
385                 inherited: false,
386                 type: CSS_TYPE_LONGHAND,
387                 initial_values: [ "none" ],
388                 other_values: [ "solid", "hidden", "ridge", "groove", "inset", "outset", "double", "dotted", "dashed" ],
389                 invalid_values: [ "20", "foo" ]
390         },
391         "-moz-column-rule-color": {
392                 domProp: "MozColumnRuleColor",
393                 inherited: false,
394                 type: CSS_TYPE_LONGHAND,
395                 prerequisites: { "color": "green" },
396                 initial_values: [ "currentColor" ],
397                 other_values: [ "red", "blue", "#ffff00" ],
398                 invalid_values: [ ]
399         },
400         "-moz-column-rule": {
401                 domProp: "MozColumnRule",
402                 inherited: false,
403                 type: CSS_TYPE_TRUE_SHORTHAND,
404                 prerequisites: { "color": "green" },
405                 subproperties: [ "-moz-column-rule-width", "-moz-column-rule-style", "-moz-column-rule-color" ],
406                 initial_values: [ "medium none currentColor" ],
407                 other_values: [ "2px blue solid", "red dotted 1px", "ridge 4px orange" ],
408                 invalid_values: [ "2px 3px 4px red", "dotted dashed", "5px dashed green 3px" ]
409         },
410         "-moz-float-edge": {
411                 domProp: "MozFloatEdge",
412                 inherited: false,
413                 type: CSS_TYPE_LONGHAND,
414                 initial_values: [ "content-box" ],
415                 other_values: [ "margin-box" ],
416                 invalid_values: [ "content", "padding", "border", "margin" ]
417         },
418         "-moz-force-broken-image-icon": {
419                 domProp: "MozForceBrokenImageIcon",
420                 inherited: false,
421                 type: CSS_TYPE_LONGHAND,
422                 initial_values: [ "0" ],
423                 other_values: [ "1" ],
424                 invalid_values: []
425         },
426         "-moz-image-region": {
427                 domProp: "MozImageRegion",
428                 inherited: true,
429                 type: CSS_TYPE_LONGHAND,
430                 initial_values: [ "auto" ],
431                 other_values: [ "rect(3px 20px 15px 4px)", "rect(17px, 21px, 33px, 2px)" ],
432                 invalid_values: []
433         },
434         "-moz-margin-end": {
435                 domProp: "MozMarginEnd",
436                 inherited: false,
437                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
438                 get_computed: logical_box_prop_get_computed,
439                 /* no subproperties */
440                 /* auto may or may not be initial */
441                 initial_values: [ "0", "0px", "0%", "0em", "0ex" ],
442                 other_values: [ "1px", "3em" ],
443                 invalid_values: []
444         },
445         "-moz-margin-start": {
446                 domProp: "MozMarginStart",
447                 inherited: false,
448                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
449                 get_computed: logical_box_prop_get_computed,
450                 /* no subproperties */
451                 /* auto may or may not be initial */
452                 initial_values: [ "0", "0px", "0%", "0em", "0ex" ],
453                 other_values: [ "1px", "3em" ],
454                 invalid_values: []
455         },
456         "-moz-outline-radius": {
457                 domProp: "MozOutlineRadius",
458                 inherited: false,
459                 type: CSS_TYPE_TRUE_SHORTHAND,
460                 subproperties: [ "-moz-outline-radius-bottomleft", "-moz-outline-radius-bottomright", "-moz-outline-radius-topleft", "-moz-outline-radius-topright" ],
461                 initial_values: [ "0", "0px", "0%" ],
462                 other_values: [ "3%", "1px", "2em", "3em 2px", "2pt 3% 4em", "2px 2px 2px 2px", // circular
463                                 "3% / 2%", "1px / 4px", "2em / 1em", "3em 2px / 2px 3em", "2pt 3% 4em / 4pt 1% 5em", "2px 2px 2px 2px / 4px 4px 4px 4px", "1pt / 2pt 3pt", "4pt 5pt / 3pt" // elliptical
464                               ],
465                 invalid_values: [ "2px -2px", "inherit 2px", "inherit / 2px", "2px inherit", "2px / inherit", "2px 2px 2px 2px 2px", "1px / 2px 2px 2px 2px 2px" ]
466         },
467         "-moz-outline-radius-bottomleft": {
468                 domProp: "MozOutlineRadiusBottomleft",
469                 inherited: false,
470                 type: CSS_TYPE_LONGHAND,
471                 initial_values: [ "0", "0px", "0%" ],
472                 other_values: [ "3%", "1px", "2em", // circular
473                                 "3% 2%", "1px 4px", "2em 2pt" // elliptical
474                               ],
475                 invalid_values: [ "-1px", "4px -2px", "inherit 2px", "2px inherit" ]
476         },
477         "-moz-outline-radius-bottomright": {
478                 domProp: "MozOutlineRadiusBottomright",
479                 inherited: false,
480                 type: CSS_TYPE_LONGHAND,
481                 initial_values: [ "0", "0px", "0%" ],
482                 other_values: [ "3%", "1px", "2em", // circular
483                                 "3% 2%", "1px 4px", "2em 2pt" // elliptical
484                               ],
485                 invalid_values: [ "-1px", "4px -2px", "inherit 2px", "2px inherit" ]
486         },
487         "-moz-outline-radius-topleft": {
488                 domProp: "MozOutlineRadiusTopleft",
489                 inherited: false,
490                 type: CSS_TYPE_LONGHAND,
491                 initial_values: [ "0", "0px", "0%" ],
492                 other_values: [ "3%", "1px", "2em", // circular
493                                 "3% 2%", "1px 4px", "2em 2pt" // elliptical
494                               ],
495                 invalid_values: [ "-1px", "4px -2px", "inherit 2px", "2px inherit" ]
496         },
497         "-moz-outline-radius-topright": {
498                 domProp: "MozOutlineRadiusTopright",
499                 inherited: false,
500                 type: CSS_TYPE_LONGHAND,
501                 initial_values: [ "0", "0px", "0%" ],
502                 other_values: [ "3%", "1px", "2em", // circular
503                                 "3% 2%", "1px 4px", "2em 2pt" // elliptical
504                               ],
505                 invalid_values: [ "-1px", "4px -2px", "inherit 2px", "2px inherit" ]
506         },
507         "-moz-padding-end": {
508                 domProp: "MozPaddingEnd",
509                 inherited: false,
510                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
511                 get_computed: logical_box_prop_get_computed,
512                 /* no subproperties */
513                 initial_values: [ "0", "0px", "0%", "0em", "0ex" ],
514                 other_values: [ "1px", "3em" ],
515                 invalid_values: []
516         },
517         "-moz-padding-start": {
518                 domProp: "MozPaddingStart",
519                 inherited: false,
520                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
521                 get_computed: logical_box_prop_get_computed,
522                 /* no subproperties */
523                 initial_values: [ "0", "0px", "0%", "0em", "0ex" ],
524                 other_values: [ "1px", "3em" ],
525                 invalid_values: []
526         },
527         "-moz-transform": {
528                 domProp: "MozTransform",
529                 inherited: false,
530                 type: CSS_TYPE_LONGHAND,
531                 initial_values: [ "none" ],
532                 other_values: [ "translatex(1px)", "translatex(4em)", "translatex(-4px)", "translatex(3px)", "translatex(0px) translatex(1px) translatex(2px) translatex(3px) translatex(4px)", "translatey(4em)", "translate(3px)", "translate(10px, -3px)", "rotate(45deg)", "rotate(45grad)", "rotate(45rad)", "rotate(0)", "scalex(10)", "scaley(10)", "scale(10)", "scale(10, 20)", "skewx(30deg)", "skewx(0)", "skewy(0)", "skewx(30grad)", "skewx(30rad)", "skewy(30deg)", "skewy(30grad)", "skewy(30rad)", "matrix(1, 2, 3, 4, 5px, 6em)", "rotate(45deg) scale(2, 1)", "skewx(45deg) skewx(-50grad)", "translate(0, 0) scale(1, 1) skewx(0) skewy(0) matrix(1, 0, 0, 1, 0, 0)", "translatex(50%)", "translatey(50%)", "translate(50%)", "translate(3%, 5px)", "translate(5px, 3%)", "matrix(1, 2, 3, 4, 5px, 6%)", "matrix(1, 2, 3, 4, 5%, 6px)", "matrix(1, 2, 3, 4, 5%, 6%)"],
533                 invalid_values: ["1px", "#0000ff", "red", "auto", "translatex(1px 1px)", "translatex(translatex(1px))", "translatex(#0000ff)", "translatex(red)", "translatey()", "matrix(1, 2, 3, 4, 5, 6)", "matrix(1px, 2px, 3px, 4px, 5px, 6px)", "scale(150%)", "skewx(red)", "matrix(1%, 0, 0, 0, 0px, 0px)", "matrix(0, 1%, 2, 3, 4px,5px)", "matrix(0, 1, 2%, 3, 4px, 5px)", "matrix(0, 1, 2, 3%, 4%, 5%)"]
534         },
535         "-moz-transform-origin": {
536                 domProp: "MozTransformOrigin",
537                 inherited: false,
538                 type: CSS_TYPE_LONGHAND,
539                 /* no subproperties */
540                 prerequisites: { "width": "10px", "height": "10px", "display": "block"},
541                 initial_values: [ "50% 50%", "center", "center center" ],
542                 other_values: [ "25% 25%", "5px 5px", "20% 3em", "0 0", "0in 1in",
543                                                 "top", "bottom","top left", "top right",
544                                                 "top center", "center left", "center right",
545                                                 "bottom left", "bottom right", "bottom center",
546                                                 "20% center", "5px center", "13in bottom",
547                                                 "left 50px", "right 13%", "center 40px"],
548                 invalid_values: ["red", "auto", "none", "0.5 0.5", "40px #0000ff",
549                                                  "border", "center red", "right diagonal",
550                                                  "#00ffff bottom"]
551         },
552         "-moz-stack-sizing": {
553                 domProp: "MozStackSizing",
554                 inherited: false,
555                 type: CSS_TYPE_LONGHAND,
556                 initial_values: [ "stretch-to-fit" ],
557                 other_values: [ "ignore" ],
558                 invalid_values: []
559         },
560         "-moz-user-focus": {
561                 domProp: "MozUserFocus",
562                 inherited: true,
563                 type: CSS_TYPE_LONGHAND,
564                 initial_values: [ "none" ],
565                 other_values: [ "normal", "ignore", "select-all", "select-before", "select-after", "select-same", "select-menu" ],
566                 invalid_values: []
567         },
568         "-moz-user-input": {
569                 domProp: "MozUserInput",
570                 inherited: true,
571                 type: CSS_TYPE_LONGHAND,
572                 initial_values: [ "auto" ],
573                 other_values: [ "none", "enabled", "disabled" ],
574                 invalid_values: []
575         },
576         "-moz-user-modify": {
577                 domProp: "MozUserModify",
578                 inherited: true,
579                 type: CSS_TYPE_LONGHAND,
580                 initial_values: [ "read-only" ],
581                 other_values: [ "read-write", "write-only" ],
582                 invalid_values: []
583         },
584         "-moz-user-select": {
585                 domProp: "MozUserSelect",
586                 inherited: false,
587                 type: CSS_TYPE_LONGHAND,
588                 initial_values: [ "auto" ],
589                 other_values: [ "none", "text", "element", "elements", "all", "toggle", "tri-state", "-moz-all", "-moz-none" ],
590                 invalid_values: []
591         },
592         "-moz-window-shadow": {
593                 domProp: "MozWindowShadow",
594                 inherited: false,
595                 type: CSS_TYPE_LONGHAND,
596                 initial_values: [ "default" ],
597                 other_values: [ "none" ],
598                 invalid_values: []
599         },
600         "azimuth": {
601                 domProp: "azimuth",
602                 inherited: true,
603                 backend_only: true,
604                 type: CSS_TYPE_LONGHAND,
605                 initial_values: [ "center", "0deg" ],
606                 other_values: [ "center behind", "behind far-right", "left-side", "73deg", "90.1deg", "0.1deg" ],
607                 invalid_values: [ "0deg behind", "behind 0deg", "90deg behind", "behind 90deg" ]
608         },
609         "background": {
610                 domProp: "background",
611                 inherited: false,
612                 type: CSS_TYPE_TRUE_SHORTHAND,
613                 subproperties: [ "background-attachment", "background-color", "background-image", "background-position", "background-repeat", "-moz-background-clip", "-moz-background-inline-policy", "-moz-background-origin" ],
614                 initial_values: [ "transparent", "none", "repeat", "scroll", "0% 0%", "top left", "left top", "transparent none", "top left none", "left top none", "none left top", "none top left", "none 0% 0%", "transparent none repeat scroll top left", "left top repeat none scroll transparent"],
615                 other_values: [ "green", "none green repeat scroll left top", "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==)", "repeat url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==') transparent left top scroll", "repeat-x", "repeat-y", "no-repeat", "none repeat-y transparent scroll 0% 0%", "fixed", "0% top transparent fixed repeat none", "top", "left", "50% 50%", "center", "bottom right scroll none transparent repeat", "50% transparent", "transparent 50%", "50%" ],
616                 invalid_values: [
617                         /* mixes with keywords have to be in correct order */
618                         "50% left", "top 50%",
619                         /* bug 258080: don't accept background-position separated */
620                         "left url(404.png) top", "top url(404.png) left"
621                 ]
622         },
623         "background-attachment": {
624                 domProp: "backgroundAttachment",
625                 inherited: false,
626                 type: CSS_TYPE_LONGHAND,
627                 initial_values: [ "scroll" ],
628                 other_values: [ "fixed" ],
629                 invalid_values: []
630         },
631         "background-color": {
632                 domProp: "backgroundColor",
633                 inherited: false,
634                 type: CSS_TYPE_LONGHAND,
635                 initial_values: [ "transparent", "rgba(255, 127, 15, 0)", "hsla(240, 97%, 50%, 0.0)", "rgba(0, 0, 0, 0)", "rgba(255,255,255,-3.7)" ],
636                 other_values: [ "green", "rgb(255, 0, 128)", "#fc2", "#96ed2a", "black", "rgba(255,255,0,3)" ],
637                 invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000", "rgb(255.0,0.387,3489)" ]
638         },
639         "background-image": {
640                 domProp: "backgroundImage",
641                 inherited: false,
642                 type: CSS_TYPE_LONGHAND,
643                 initial_values: [ "none" ],
644                 other_values: [ "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==)", "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==')", 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==")', ],
645                 invalid_values: []
646         },
647         "background-position": {
648                 domProp: "backgroundPosition",
649                 inherited: false,
650                 type: CSS_TYPE_LONGHAND,
651                 initial_values: [ "top left", "left top", "0% 0%", "0% top", "left 0%" ],
652                 other_values: [ "top", "left", "right", "bottom", "center", "center bottom", "bottom center", "center right", "right center", "center top", "top center", "center left", "left center", "right bottom", "bottom right", "50%" ],
653                 invalid_values: [ "50% left", "top 50%" ]
654         },
655         "background-repeat": {
656                 domProp: "backgroundRepeat",
657                 inherited: false,
658                 type: CSS_TYPE_LONGHAND,
659                 initial_values: [ "repeat" ],
660                 other_values: [ "repeat-x", "repeat-y", "no-repeat" ],
661                 invalid_values: []
662         },
663         "border": {
664                 domProp: "border",
665                 inherited: false,
666                 type: CSS_TYPE_TRUE_SHORTHAND,
667                 subproperties: [ "border-bottom-color", "border-bottom-style", "border-bottom-width", "border-left-color", "border-left-style", "border-left-width", "border-right-color", "border-right-style", "border-right-width", "border-top-color", "border-top-style", "border-top-width" ],
668                 initial_values: [ "none", "medium", "currentColor", "none medium currentcolor" ],
669                 other_values: [ "solid", "medium solid", "green solid", "10px solid", "thick solid" ],
670                 invalid_values: [ "5%" ]
671         },
672         "border-bottom": {
673                 domProp: "borderBottom",
674                 inherited: false,
675                 type: CSS_TYPE_TRUE_SHORTHAND,
676                 subproperties: [ "border-bottom-color", "border-bottom-style", "border-bottom-width" ],
677                 initial_values: [ "none", "medium", "currentColor", "none medium currentcolor" ],
678                 other_values: [ "solid", "thin", "green", "medium solid", "green solid", "10px solid", "thick solid", "5px green none" ],
679                 invalid_values: [ "5%" ]
680         },
681         "border-bottom-color": {
682                 domProp: "borderBottomColor",
683                 inherited: false,
684                 type: CSS_TYPE_LONGHAND,
685                 prerequisites: { "color": "black" },
686                 initial_values: [ "currentColor" ],
687                 other_values: [ "green", "rgba(255,128,0,0.5)", "transparent" ],
688                 invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000" ]
689         },
690         "border-bottom-style": {
691                 domProp: "borderBottomStyle",
692                 inherited: false,
693                 type: CSS_TYPE_LONGHAND,
694                 /* XXX hidden is sometimes the same as initial */
695                 initial_values: [ "none" ],
696                 other_values: [ "solid", "dashed", "dotted", "double", "outset", "inset", "groove", "ridge" ],
697                 invalid_values: []
698         },
699         "border-bottom-width": {
700                 domProp: "borderBottomWidth",
701                 inherited: false,
702                 type: CSS_TYPE_LONGHAND,
703                 prerequisites: { "border-bottom-style": "solid" },
704                 initial_values: [ "medium", "3px" ],
705                 other_values: [ "thin", "thick", "1px", "2em" ],
706                 invalid_values: [ "5%" ]
707         },
708         "border-collapse": {
709                 domProp: "borderCollapse",
710                 inherited: true,
711                 type: CSS_TYPE_LONGHAND,
712                 initial_values: [ "separate" ],
713                 other_values: [ "collapse" ],
714                 invalid_values: []
715         },
716         "border-color": {
717                 domProp: "borderColor",
718                 inherited: false,
719                 type: CSS_TYPE_TRUE_SHORTHAND,
720                 subproperties: [ "border-top-color", "border-right-color", "border-bottom-color", "border-left-color" ],
721                 initial_values: [ "currentColor", "currentColor currentColor", "currentColor currentColor currentColor", "currentColor currentColor currentcolor CURRENTcolor" ],
722                 other_values: [ "green", "currentColor green", "currentColor currentColor green", "currentColor currentColor currentColor green", "rgba(255,128,0,0.5)", "transparent" ],
723                 invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000" ]
724         },
725         "border-left": {
726                 domProp: "borderLeft",
727                 inherited: false,
728                 type: CSS_TYPE_TRUE_SHORTHAND,
729                 subproperties: [ "border-left-color", "border-left-style", "border-left-width" ],
730                 initial_values: [ "none", "medium", "currentColor", "none medium currentcolor" ],
731                 other_values: [ "solid", "thin", "green", "medium solid", "green solid", "10px solid", "thick solid", "5px green none" ],
732                 invalid_values: [ "5%" ]
733         },
734         "border-left-color": {
735                 domProp: "borderLeftColor",
736                 inherited: false,
737                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
738                 prerequisites: { "color": "black" },
739                 initial_values: [ "currentColor" ],
740                 other_values: [ "green", "rgba(255,128,0,0.5)", "transparent" ],
741                 invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000" ]
742         },
743         "border-left-style": {
744                 domProp: "borderLeftStyle",
745                 inherited: false,
746                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
747                 /* XXX hidden is sometimes the same as initial */
748                 initial_values: [ "none" ],
749                 other_values: [ "solid", "dashed", "dotted", "double", "outset", "inset", "groove", "ridge" ],
750                 invalid_values: []
751         },
752         "border-left-width": {
753                 domProp: "borderLeftWidth",
754                 inherited: false,
755                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
756                 prerequisites: { "border-left-style": "solid" },
757                 initial_values: [ "medium", "3px" ],
758                 other_values: [ "thin", "thick", "1px", "2em" ],
759                 invalid_values: [ "5%" ]
760         },
761         "border-right": {
762                 domProp: "borderRight",
763                 inherited: false,
764                 type: CSS_TYPE_TRUE_SHORTHAND,
765                 subproperties: [ "border-right-color", "border-right-style", "border-right-width" ],
766                 initial_values: [ "none", "medium", "currentColor", "none medium currentcolor" ],
767                 other_values: [ "solid", "thin", "green", "medium solid", "green solid", "10px solid", "thick solid", "5px green none" ],
768                 invalid_values: [ "5%" ]
769         },
770         "border-right-color": {
771                 domProp: "borderRightColor",
772                 inherited: false,
773                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
774                 prerequisites: { "color": "black" },
775                 initial_values: [ "currentColor" ],
776                 other_values: [ "green", "rgba(255,128,0,0.5)", "transparent" ],
777                 invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000" ]
778         },
779         "border-right-style": {
780                 domProp: "borderRightStyle",
781                 inherited: false,
782                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
783                 /* XXX hidden is sometimes the same as initial */
784                 initial_values: [ "none" ],
785                 other_values: [ "solid", "dashed", "dotted", "double", "outset", "inset", "groove", "ridge" ],
786                 invalid_values: []
787         },
788         "border-right-width": {
789                 domProp: "borderRightWidth",
790                 inherited: false,
791                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
792                 prerequisites: { "border-right-style": "solid" },
793                 initial_values: [ "medium", "3px" ],
794                 other_values: [ "thin", "thick", "1px", "2em" ],
795                 invalid_values: [ "5%" ]
796         },
797         "border-spacing": {
798                 domProp: "borderSpacing",
799                 inherited: true,
800                 type: CSS_TYPE_LONGHAND,
801                 initial_values: [ "0", "0 0", "0px", "0 0px" ],
802                 other_values: [ "3px", "4em 2px", "4em 0", "0px 2px" ],
803                 invalid_values: [ "0%", "0 0%" ]
804         },
805         "border-style": {
806                 domProp: "borderStyle",
807                 inherited: false,
808                 type: CSS_TYPE_TRUE_SHORTHAND,
809                 subproperties: [ "border-top-style", "border-right-style", "border-bottom-style", "border-left-style" ],
810                 /* XXX hidden is sometimes the same as initial */
811                 initial_values: [ "none", "none none", "none none none", "none none none none" ],
812                 other_values: [ "solid", "dashed", "dotted", "double", "outset", "inset", "groove", "ridge", "none solid", "none none solid", "none none none solid", "groove none none none", "none ridge none none", "none none double none", "none none none dotted" ],
813                 invalid_values: []
814         },
815         "border-top": {
816                 domProp: "borderTop",
817                 inherited: false,
818                 type: CSS_TYPE_TRUE_SHORTHAND,
819                 subproperties: [ "border-top-color", "border-top-style", "border-top-width" ],
820                 initial_values: [ "none", "medium", "currentColor", "none medium currentcolor" ],
821                 other_values: [ "solid", "thin", "green", "medium solid", "green solid", "10px solid", "thick solid", "5px green none" ],
822                 invalid_values: [ "5%" ]
823         },
824         "border-top-color": {
825                 domProp: "borderTopColor",
826                 inherited: false,
827                 type: CSS_TYPE_LONGHAND,
828                 prerequisites: { "color": "black" },
829                 initial_values: [ "currentColor" ],
830                 other_values: [ "green", "rgba(255,128,0,0.5)", "transparent" ],
831                 invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000" ]
832         },
833         "border-top-style": {
834                 domProp: "borderTopStyle",
835                 inherited: false,
836                 type: CSS_TYPE_LONGHAND,
837                 /* XXX hidden is sometimes the same as initial */
838                 initial_values: [ "none" ],
839                 other_values: [ "solid", "dashed", "dotted", "double", "outset", "inset", "groove", "ridge" ],
840                 invalid_values: []
841         },
842         "border-top-width": {
843                 domProp: "borderTopWidth",
844                 inherited: false,
845                 type: CSS_TYPE_LONGHAND,
846                 prerequisites: { "border-top-style": "solid" },
847                 initial_values: [ "medium", "3px" ],
848                 other_values: [ "thin", "thick", "1px", "2em" ],
849                 invalid_values: [ "5%" ]
850         },
851         "border-width": {
852                 domProp: "borderWidth",
853                 inherited: false,
854                 type: CSS_TYPE_TRUE_SHORTHAND,
855                 subproperties: [ "border-top-width", "border-right-width", "border-bottom-width", "border-left-width" ],
856                 prerequisites: { "border-style": "solid" },
857                 initial_values: [ "medium", "3px", "medium medium", "3px medium medium", "medium 3px medium medium" ],
858                 other_values: [ "thin", "thick", "1px", "2em", "2px 0 0px 1em" ],
859                 invalid_values: [ "5%" ]
860         },
861         "bottom": {
862                 domProp: "bottom",
863                 inherited: false,
864                 type: CSS_TYPE_LONGHAND,
865                 /* XXX requires position to be set */
866                 /* XXX 0 may or may not be equal to auto */
867                 initial_values: [ "auto" ],
868                 other_values: [ "32px", "-3em", "12%" ],
869                 invalid_values: []
870         },
871         "caption-side": {
872                 domProp: "captionSide",
873                 inherited: true,
874                 type: CSS_TYPE_LONGHAND,
875                 initial_values: [ "top" ],
876                 other_values: [ "right", "left", "bottom", "top-outside", "bottom-outside" ],
877                 invalid_values: []
878         },
879         "clear": {
880                 domProp: "clear",
881                 inherited: false,
882                 type: CSS_TYPE_LONGHAND,
883                 initial_values: [ "none" ],
884                 other_values: [ "left", "right", "both" ],
885                 invalid_values: []
886         },
887         "clip": {
888                 domProp: "clip",
889                 inherited: false,
890                 type: CSS_TYPE_LONGHAND,
891                 initial_values: [ "auto" ],
892                 other_values: [ "rect(0 0 0 0)", "rect(auto,auto,auto,auto)", "rect(3px, 4px, 4em, 0)", "rect(auto, 3em, 4pt, 2px)", "rect(2px 3px 4px 5px)" ],
893                 invalid_values: [ "rect(auto, 3em, 2%, 5px)" ]
894         },
895         "color": {
896                 domProp: "color",
897                 inherited: true,
898                 type: CSS_TYPE_LONGHAND,
899                 /* XXX should test currentColor, but may or may not be initial */
900                 initial_values: [ "black", "#000" ],
901                 other_values: [ "green", "#f3c", "#fed292", "rgba(45,300,12,2)", "transparent", "-moz-nativehyperlinktext", "rgba(255,128,0,0.5)" ],
902                 invalid_values: [ "fff", "ffffff", "#f", "#ff", "#ffff", "#fffff", "#fffffff", "#ffffffff", "#fffffffff" ]
903         },
904         "content": {
905                 domProp: "content",
906                 inherited: false,
907                 type: CSS_TYPE_LONGHAND,
908                 /* XXX needs to be on pseudo-elements */
909                 initial_values: [ "normal", "none" ],
910                 other_values: [ '""', "''", '"hello"', "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==)", "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==')", 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==")', ],
911                 invalid_values: []
912         },
913         "counter-increment": {
914                 domProp: "counterIncrement",
915                 inherited: false,
916                 type: CSS_TYPE_LONGHAND,
917                 initial_values: [ "none" ],
918                 other_values: [ "foo 1", "bar", "foo 3 bar baz 2" ],
919                 invalid_values: []
920         },
921         "counter-reset": {
922                 domProp: "counterReset",
923                 inherited: false,
924                 type: CSS_TYPE_LONGHAND,
925                 initial_values: [ "none" ],
926                 other_values: [ "bar 0", "foo", "foo 3 bar baz 2" ],
927                 invalid_values: []
928         },
929         "cue": {
930                 domProp: "cue",
931                 inherited: false,
932                 backend_only: true,
933                 type: CSS_TYPE_TRUE_SHORTHAND,
934                 subproperties: [ "cue-before", "cue-after" ],
935                 initial_values: [ "none", "none none" ],
936                 other_values: [ "url(404.wav)", "url(404.wav) none", "none url(404.wav)" ],
937                 invalid_values: []
938         },
939         "cue-after": {
940                 domProp: "cueAfter",
941                 inherited: false,
942                 backend_only: true,
943                 type: CSS_TYPE_LONGHAND,
944                 initial_values: [ "none" ],
945                 other_values: [ "url(404.wav)" ],
946                 invalid_values: []
947         },
948         "cue-before": {
949                 domProp: "cueBefore",
950                 inherited: false,
951                 backend_only: true,
952                 type: CSS_TYPE_LONGHAND,
953                 initial_values: [ "none" ],
954                 other_values: [ "url(404.wav)" ],
955                 invalid_values: []
956         },
957         "cursor": {
958                 domProp: "cursor",
959                 inherited: true,
960                 type: CSS_TYPE_LONGHAND,
961                 initial_values: [ "auto" ],
962                 other_values: [ "crosshair", "default", "pointer", "move", "e-resize", "ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize", "s-resize", "w-resize", "text", "wait", "help", "progress", "none" ],
963                 invalid_values: []
964         },
965         "direction": {
966                 domProp: "direction",
967                 inherited: true,
968                 type: CSS_TYPE_LONGHAND,
969                 initial_values: [ "ltr" ],
970                 other_values: [ "rtl" ],
971                 invalid_values: []
972         },
973         "display": {
974                 domProp: "display",
975                 inherited: false,
976                 type: CSS_TYPE_LONGHAND,
977                 initial_values: [ "inline" ],
978                 /* XXX none will really mess with other properties */
979                 prerequisites: { "float": "none", "position": "static" },
980                 other_values: [ "block", "list-item", "inline-block", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption", "none" ],
981                 invalid_values: []
982         },
983         "elevation": {
984                 domProp: "elevation",
985                 inherited: true,
986                 backend_only: true,
987                 type: CSS_TYPE_LONGHAND,
988                 initial_values: [ "level", "0deg" ],
989                 other_values: [ "below", "above", "60deg", "higher", "lower", "-79deg", "0.33deg" ],
990                 invalid_values: []
991         },
992         "empty-cells": {
993                 domProp: "emptyCells",
994                 inherited: true,
995                 type: CSS_TYPE_LONGHAND,
996                 initial_values: [ "show" ],
997                 other_values: [ "hide" ],
998                 invalid_values: []
999         },
1000         "float": {
1001                 domProp: "cssFloat",
1002                 inherited: false,
1003                 type: CSS_TYPE_LONGHAND,
1004                 initial_values: [ "none" ],
1005                 other_values: [ "left", "right" ],
1006                 invalid_values: []
1007         },
1008         "font": {
1009                 domProp: "font",
1010                 inherited: true,
1011                 type: CSS_TYPE_TRUE_SHORTHAND,
1012                 subproperties: [ "font-style", "font-variant", "font-weight", "font-size", "line-height", "font-family", "font-stretch", "font-size-adjust" ],
1013                 /* XXX could be sans-serif */
1014                 initial_values: [ "medium serif" ],
1015                 other_values: [ "large serif", "9px fantasy", "bold italic small-caps 24px/1.4 Times New Roman, serif", "caption", "icon", "menu", "message-box", "small-caption", "status-bar" ],
1016                 invalid_values: []
1017         },
1018         "font-family": {
1019                 domProp: "fontFamily",
1020                 inherited: true,
1021                 type: CSS_TYPE_LONGHAND,
1022                 initial_values: [ "serif" ],
1023                 other_values: [ "sans-serif", "Times New Roman, serif", "'Times New Roman', serif", "cursive", "fantasy" ],
1024                 invalid_values: []
1025         },
1026         "font-size": {
1027                 domProp: "fontSize",
1028                 inherited: true,
1029                 type: CSS_TYPE_LONGHAND,
1030                 initial_values: [ "medium" ],
1031                 other_values: [ "large", "2em", "50%", "xx-small", "36pt", "8px" ],
1032                 invalid_values: []
1033         },
1034         "font-size-adjust": {
1035                 domProp: "fontSizeAdjust",
1036                 inherited: true,
1037                 type: CSS_TYPE_LONGHAND,
1038                 initial_values: [ "none" ],
1039                 other_values: [ "0.3", "0.5", "0.7" ],
1040                 invalid_values: []
1041         },
1042         "font-stretch": {
1043                 domProp: "fontStretch",
1044                 inherited: true,
1045                 backend_only: true,
1046                 type: CSS_TYPE_LONGHAND,
1047                 initial_values: [ "normal" ],
1048                 other_values: [ "wider", "narrower", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded" ],
1049                 invalid_values: []
1050         },
1051         "font-style": {
1052                 domProp: "fontStyle",
1053                 inherited: true,
1054                 type: CSS_TYPE_LONGHAND,
1055                 initial_values: [ "normal" ],
1056                 other_values: [ "italic", "oblique" ],
1057                 invalid_values: []
1058         },
1059         "font-variant": {
1060                 domProp: "fontVariant",
1061                 inherited: true,
1062                 type: CSS_TYPE_LONGHAND,
1063                 initial_values: [ "normal" ],
1064                 other_values: [ "small-caps" ],
1065                 invalid_values: []
1066         },
1067         "font-weight": {
1068                 domProp: "fontWeight",
1069                 inherited: true,
1070                 type: CSS_TYPE_LONGHAND,
1071                 initial_values: [ "normal", "400" ],
1072                 other_values: [ "bold", "100", "200", "300", "500", "600", "700", "800", "900" ],
1073                 invalid_values: [ "107", "399", "401", "699", "710" ]
1074         },
1075         "height": {
1076                 domProp: "height",
1077                 inherited: false,
1078                 type: CSS_TYPE_LONGHAND,
1079                 initial_values: [ " auto" ],
1080                 /* XXX these have prerequisites */
1081                 other_values: [ "15px", "3em", "15%" ],
1082                 invalid_values: [ "none", "-moz-max-content", "-moz-min-content", "-moz-fit-content", "-moz-available" ]
1083         },
1084         "ime-mode": {
1085                 domProp: "imeMode",
1086                 inherited: false,
1087                 type: CSS_TYPE_LONGHAND,
1088                 initial_values: [ "auto" ],
1089                 other_values: [ "normal", "disabled", "active", "inactive" ],
1090                 invalid_values: [ "none", "enabled", "1px" ]
1091         },
1092         "left": {
1093                 domProp: "left",
1094                 inherited: false,
1095                 type: CSS_TYPE_LONGHAND,
1096                 /* XXX requires position to be set */
1097                 /* XXX 0 may or may not be equal to auto */
1098                 initial_values: [ "auto" ],
1099                 other_values: [ "32px", "-3em", "12%" ],
1100                 invalid_values: []
1101         },
1102         "letter-spacing": {
1103                 domProp: "letterSpacing",
1104                 inherited: true,
1105                 type: CSS_TYPE_LONGHAND,
1106                 initial_values: [ "normal" ],
1107                 other_values: [ "0", "0px", "1em", "2px", "-3px" ],
1108                 invalid_values: []
1109         },
1110         "line-height": {
1111                 domProp: "lineHeight",
1112                 inherited: true,
1113                 type: CSS_TYPE_LONGHAND,
1114                 /*
1115                  * Inheritance tests require consistent font size, since
1116                  * getComputedStyle (which uses the CSS2 computed value, or
1117                  * CSS2.1 used value) doesn't match what the CSS2.1 computed
1118                  * value is.  And they even require consistent font metrics for
1119                  * computation of 'normal'.
1120                  */
1121                 prerequisites: { "font-size": "19px", "font-size-adjust": "none", "font-family": "serif", "font-weight": "normal", "font-style": "normal" },
1122                 initial_values: [ "normal" ],
1123                 other_values: [ "1.0", "1", "1em", "47px" ],
1124                 invalid_values: []
1125         },
1126         "list-style": {
1127                 domProp: "listStyle",
1128                 inherited: true,
1129                 type: CSS_TYPE_TRUE_SHORTHAND,
1130                 subproperties: [ "list-style-type", "list-style-position", "list-style-image" ],
1131                 initial_values: [ "outside", "disc", "none disc outside" ],
1132                 other_values: [ "inside none", "none inside", "none none inside", "none outside none", "square", 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==")', "none" ],
1133                 invalid_values: []
1134         },
1135         "list-style-image": {
1136                 domProp: "listStyleImage",
1137                 inherited: true,
1138                 type: CSS_TYPE_LONGHAND,
1139                 initial_values: [ "none" ],
1140                 other_values: [ 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKElEQVR42u3NQQ0AAAgEoNP+nTWFDzcoQE1udQQCgUAgEAgEAsGTYAGjxAE/G/Q2tQAAAABJRU5ErkJggg==")' ],
1141                 invalid_values: []
1142         },
1143         "list-style-position": {
1144                 domProp: "listStylePosition",
1145                 inherited: true,
1146                 type: CSS_TYPE_LONGHAND,
1147                 initial_values: [ "outside" ],
1148                 other_values: [ "inside" ],
1149                 invalid_values: []
1150         },
1151         "list-style-type": {
1152                 domProp: "listStyleType",
1153                 inherited: true,
1154                 type: CSS_TYPE_LONGHAND,
1155                 initial_values: [ "disc" ],
1156                 other_values: [ "circle", "decimal-leading-zero", "upper-alpha" ],
1157                 invalid_values: []
1158         },
1159         "margin": {
1160                 domProp: "margin",
1161                 inherited: false,
1162                 type: CSS_TYPE_TRUE_SHORTHAND,
1163                 subproperties: [ "margin-top", "margin-right", "margin-bottom", "margin-left" ],
1164                 initial_values: [ "0", "0px 0 0em", "0% 0px 0em 0pt" ],
1165                 other_values: [ "3px 0", "2em 4px 2pt", "1em 2em 3px 4px" ],
1166                 invalid_values: []
1167         },
1168         "margin-bottom": {
1169                 domProp: "marginBottom",
1170                 inherited: false,
1171                 type: CSS_TYPE_LONGHAND,
1172                 /* XXX testing auto has prerequisites */
1173                 initial_values: [ "0", "0px", "0%" ],
1174                 other_values: [ "1px", "2em", "5%" ],
1175                 invalid_values: [ ]
1176         },
1177         "margin-left": {
1178                 domProp: "marginLeft",
1179                 inherited: false,
1180                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
1181                 /* no subproperties */
1182                 /* XXX testing auto has prerequisites */
1183                 initial_values: [ "0", "0px", "0%" ],
1184                 other_values: [ "1px", "2em", "5%" ],
1185                 invalid_values: []
1186         },
1187         "margin-right": {
1188                 domProp: "marginRight",
1189                 inherited: false,
1190                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
1191                 /* no subproperties */
1192                 /* XXX testing auto has prerequisites */
1193                 initial_values: [ "0", "0px", "0%" ],
1194                 other_values: [ "1px", "2em", "5%" ],
1195                 invalid_values: [ ]
1196         },
1197         "margin-top": {
1198                 domProp: "marginTop",
1199                 inherited: false,
1200                 type: CSS_TYPE_LONGHAND,
1201                 /* XXX testing auto has prerequisites */
1202                 initial_values: [ "0", "0px", "0%" ],
1203                 other_values: [ "1px", "2em", "5%" ],
1204                 invalid_values: [ ]
1205         },
1206         "marker-offset": {
1207                 domProp: "markerOffset",
1208                 inherited: false,
1209                 type: CSS_TYPE_LONGHAND,
1210                 initial_values: [ "auto" ],
1211                 other_values: [ "6em", "-1px" ],
1212                 invalid_values: []
1213         },
1214         "marks": {
1215                 /* XXX not a real property; applies only to page context */
1216                 domProp: "marks",
1217                 inherited: false,
1218                 backend_only: true,
1219                 type: CSS_TYPE_LONGHAND,
1220                 initial_values: [ "none" ],
1221                 other_values: [ "crop", "cross", "crop cross", "cross crop" ],
1222                 invalid_values: [ "none none", "crop none", "none crop", "cross none", "none cross" ]
1223         },
1224         "max-height": {
1225                 domProp: "maxHeight",
1226                 inherited: false,
1227                 type: CSS_TYPE_LONGHAND,
1228                 initial_values: [ "none" ],
1229                 other_values: [ "30px", "50%", "0" ],
1230                 invalid_values: [ "auto", "-moz-max-content", "-moz-min-content", "-moz-fit-content", "-moz-available" ]
1231         },
1232         "max-width": {
1233                 domProp: "maxWidth",
1234                 inherited: false,
1235                 type: CSS_TYPE_LONGHAND,
1236                 initial_values: [ "none" ],
1237                 other_values: [ "30px", "50%", "0", "-moz-max-content", "-moz-min-content", "-moz-fit-content", "-moz-available" ],
1238                 invalid_values: [ "auto" ]
1239         },
1240         "min-height": {
1241                 domProp: "minHeight",
1242                 inherited: false,
1243                 type: CSS_TYPE_LONGHAND,
1244                 initial_values: [ "0" ],
1245                 other_values: [ "30px", "50%" ],
1246                 invalid_values: [ "auto", "none", "-moz-max-content", "-moz-min-content", "-moz-fit-content", "-moz-available" ]
1247         },
1248         "min-width": {
1249                 domProp: "minWidth",
1250                 inherited: false,
1251                 type: CSS_TYPE_LONGHAND,
1252                 initial_values: [ "0" ],
1253                 other_values: [ "30px", "50%", "-moz-max-content", "-moz-min-content", "-moz-fit-content", "-moz-available" ],
1254                 invalid_values: [ "auto", "none" ]
1255         },
1256         "opacity": {
1257                 domProp: "opacity",
1258                 inherited: false,
1259                 type: CSS_TYPE_LONGHAND,
1260                 initial_values: [ "1", "17", "397.376" ],
1261                 other_values: [ "0", "0.4", "0.0000", "-3" ],
1262                 invalid_values: [ "0px", "1px" ]
1263         },
1264         "orphans": {
1265                 domProp: "orphans",
1266                 inherited: true,
1267                 backend_only: true,
1268                 type: CSS_TYPE_LONGHAND,
1269                 // XXX requires display:block
1270                 initial_values: [ "2" ],
1271                 other_values: [ "1", "7" ],
1272                 invalid_values: [
1273                         // "0", // not clear whether it's valid or not.
1274                         // "-1", // not clear whether it's valid or not.
1275                         "0px", "3px"
1276                 ]
1277         },
1278         "outline": {
1279                 domProp: "outline",
1280                 inherited: false,
1281                 type: CSS_TYPE_TRUE_SHORTHAND,
1282                 subproperties: [ "outline-color", "outline-style", "outline-width" ],
1283                 initial_values: [
1284                         "none", "medium",
1285                         // XXX Should be invert, but currently currentcolor.
1286                         //"invert", "none medium invert"
1287                         "currentColor", "none medium currentcolor"
1288                 ],
1289                 other_values: [ "solid", "medium solid", "green solid", "10px solid", "thick solid" ],
1290                 invalid_values: [ "5%" ]
1291         },
1292         "outline-color": {
1293                 domProp: "outlineColor",
1294                 inherited: false,
1295                 type: CSS_TYPE_LONGHAND,
1296                 prerequisites: { "color": "black" },
1297                 initial_values: [ "currentColor" ], // XXX should be invert
1298                 other_values: [ "green", "rgba(255,128,0,0.5)", "transparent" ],
1299                 invalid_values: [ "#0", "#00", "#0000", "#00000", "#0000000", "#00000000", "#000000000" ]
1300         },
1301         "outline-offset": {
1302                 domProp: "outlineOffset",
1303                 inherited: false,
1304                 type: CSS_TYPE_LONGHAND,
1305                 initial_values: [ "0" ],
1306                 other_values: [ "-3px", "1em" ],
1307                 invalid_values: [ "5%" ]
1308         },
1309         "outline-style": {
1310                 domProp: "outlineStyle",
1311                 inherited: false,
1312                 type: CSS_TYPE_LONGHAND,
1313                 // XXX Should 'hidden' be the same as initial?
1314                 initial_values: [ "none" ],
1315                 other_values: [ "solid", "dashed", "dotted", "double", "outset", "inset", "groove", "ridge" ],
1316                 invalid_values: []
1317         },
1318         "outline-width": {
1319                 domProp: "outlineWidth",
1320                 inherited: false,
1321                 type: CSS_TYPE_LONGHAND,
1322                 prerequisites: { "outline-style": "solid" },
1323                 initial_values: [ "medium", "3px" ],
1324                 other_values: [ "thin", "thick", "1px", "2em" ],
1325                 invalid_values: [ "5%" ]
1326         },
1327         "overflow": {
1328                 domProp: "overflow",
1329                 inherited: false,
1330                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
1331                 prerequisites: { "display": "block" },
1332                 subproperties: [ "overflow-x", "overflow-y" ],
1333                 initial_values: [ "visible" ],
1334                 other_values: [ "auto", "scroll", "hidden" ],
1335                 invalid_values: []
1336         },
1337         "overflow-x": {
1338                 domProp: "overflowX",
1339                 inherited: false,
1340                 type: CSS_TYPE_LONGHAND,
1341                 prerequisites: { "display": "block", "overflow-y": "visible" },
1342                 initial_values: [ "visible" ],
1343                 other_values: [ "auto", "scroll", "hidden" ],
1344                 invalid_values: []
1345         },
1346         "overflow-y": {
1347                 domProp: "overflowY",
1348                 inherited: false,
1349                 type: CSS_TYPE_LONGHAND,
1350                 prerequisites: { "display": "block", "overflow-x": "visible" },
1351                 initial_values: [ "visible" ],
1352                 other_values: [ "auto", "scroll", "hidden" ],
1353                 invalid_values: []
1354         },
1355         "padding": {
1356                 domProp: "padding",
1357                 inherited: false,
1358                 type: CSS_TYPE_TRUE_SHORTHAND,
1359                 subproperties: [ "padding-top", "padding-right", "padding-bottom", "padding-left" ],
1360                 initial_values: [ "0", "0px 0 0em", "0% 0px 0em 0pt" ],
1361                 other_values: [ "3px 0", "2em 4px 2pt", "1em 2em 3px 4px" ],
1362                 invalid_values: []
1363         },
1364         "padding-bottom": {
1365                 domProp: "paddingBottom",
1366                 inherited: false,
1367                 type: CSS_TYPE_LONGHAND,
1368                 initial_values: [ "0", "0px", "0%" ],
1369                 other_values: [ "1px", "2em", "5%" ],
1370                 invalid_values: [ ]
1371         },
1372         "padding-left": {
1373                 domProp: "paddingLeft",
1374                 inherited: false,
1375                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
1376                 /* no subproperties */
1377                 initial_values: [ "0", "0px", "0%" ],
1378                 other_values: [ "1px", "2em", "5%" ],
1379                 invalid_values: [ ]
1380         },
1381         "padding-right": {
1382                 domProp: "paddingRight",
1383                 inherited: false,
1384                 type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
1385                 /* no subproperties */
1386                 initial_values: [ "0", "0px", "0%" ],
1387                 other_values: [ "1px", "2em", "5%" ],
1388                 invalid_values: [ ]
1389         },
1390         "padding-top": {
1391                 domProp: "paddingTop",
1392                 inherited: false,
1393                 type: CSS_TYPE_LONGHAND,
1394                 initial_values: [ "0", "0px", "0%" ],
1395                 other_values: [ "1px", "2em", "5%" ],
1396                 invalid_values: [ ]
1397         },
1398         "page": {
1399                 domProp: "page",
1400                 inherited: true,
1401                 backend_only: true,
1402                 type: CSS_TYPE_LONGHAND,
1403                 initial_values: [ "auto" ],
1404                 other_values: [ "foo", "bar" ],
1405                 invalid_values: [ "3px" ]
1406         },
1407         "page-break-after": {
1408                 domProp: "pageBreakAfter",
1409                 inherited: false,
1410                 type: CSS_TYPE_LONGHAND,
1411                 initial_values: [ "auto" ],
1412                 other_values: [ "always", "avoid", "left", "right" ],
1413                 invalid_values: []
1414         },
1415         "page-break-before": {
1416                 domProp: "pageBreakBefore",
1417                 inherited: false,
1418                 type: CSS_TYPE_LONGHAND,
1419                 initial_values: [ "auto" ],
1420                 other_values: [ "always", "avoid", "left", "right" ],
1421                 invalid_values: []
1422         },
1423         "page-break-inside": {
1424                 domProp: "pageBreakInside",
1425                 inherited: true,
1426                 backend_only: true,
1427                 type: CSS_TYPE_LONGHAND,
1428                 initial_values: [ "auto" ],
1429                 other_values: [ "avoid" ],
1430                 invalid_values: []
1431         },
1432         "pause": {
1433                 domProp: "pause",
1434                 inherited: false,
1435                 backend_only: true,
1436                 type: CSS_TYPE_TRUE_SHORTHAND,
1437                 subproperties: [ "pause-before", "pause-after" ],
1438                 initial_values: [ "0", "0s", "0ms", "0 0", "0s 0ms", "0ms 0" ],
1439                 other_values: [ "1s", "200ms", "-2s", "50%", "-10%", "10% 200ms", "-3s -5%" ],
1440                 invalid_values: [ "0px" ]
1441         },
1442         "pause-after": {
1443                 domProp: "pauseAfter",
1444                 inherited: false,
1445                 backend_only: true,
1446                 type: CSS_TYPE_LONGHAND,
1447                 initial_values: [ "0", "0s", "0ms" ],
1448                 other_values: [ "1s", "200ms", "-2s", "50%", "-10%" ],
1449                 invalid_values: [ "0px" ]
1450         },
1451         "pause-before": {
1452                 domProp: "pauseBefore",
1453                 inherited: false,
1454                 backend_only: true,
1455                 type: CSS_TYPE_LONGHAND,
1456                 initial_values: [ "0", "0s", "0ms" ],
1457                 other_values: [ "1s", "200ms", "-2s", "50%", "-10%" ],
1458                 invalid_values: [ "0px" ]
1459         },
1460         "pitch": {
1461                 domProp: "pitch",
1462                 inherited: true,
1463                 backend_only: true,
1464                 type: CSS_TYPE_LONGHAND,
1465                 initial_values: [ "medium" ],
1466                 other_values: [ "x-low", "low", "high", "x-high" ],
1467                 invalid_values: []
1468         },
1469         "pitch-range": {
1470                 domProp: "pitchRange",
1471                 inherited: true,
1472                 backend_only: true,
1473                 type: CSS_TYPE_LONGHAND,
1474                 initial_values: [ "50", "50.0" ],
1475                 other_values: [ "0", "100.0", "99.7", "47", "3.2" ],
1476                 invalid_values: [" -0.01", "100.2", "108", "-3" ]
1477         },
1478         "position": {
1479                 domProp: "position",
1480                 inherited: false,
1481                 type: CSS_TYPE_LONGHAND,
1482                 initial_values: [ "static" ],
1483                 other_values: [ "relative", "absolute", "fixed" ],
1484                 invalid_values: []
1485         },
1486         "quotes": {
1487                 domProp: "quotes",
1488                 inherited: true,
1489                 type: CSS_TYPE_LONGHAND,
1490                 initial_values: [ '"\u201C" "\u201D" "\u2018" "\u2019"',
1491                                   '"\\201C" "\\201D" "\\2018" "\\2019"' ],
1492                 other_values: [ "none", "'\"' '\"'" ],
1493                 invalid_values: []
1494         },
1495         "richness": {
1496                 domProp: "richness",
1497                 inherited: true,
1498                 backend_only: true,
1499                 type: CSS_TYPE_LONGHAND,
1500                 initial_values: [ "50", "50.0" ],
1501                 other_values: [ "0", "100.0", "99.7", "47", "3.2" ],
1502                 invalid_values: [" -0.01", "100.2", "108", "-3" ]
1503         },
1504         "right": {
1505                 domProp: "right",
1506                 inherited: false,
1507                 type: CSS_TYPE_LONGHAND,
1508                 /* XXX requires position to be set */
1509                 /* XXX 0 may or may not be equal to auto */
1510                 initial_values: [ "auto" ],
1511                 other_values: [ "32px", "-3em", "12%" ],
1512                 invalid_values: []
1513         },
1514         "size": {
1515                 /* XXX not a real property; applies only to page context */
1516                 domProp: "size",
1517                 inherited: false,
1518                 backend_only: true,
1519                 type: CSS_TYPE_LONGHAND,
1520                 initial_values: [ "auto" ],
1521                 other_values: [ "landscape", "portrait", "8.5in 11in", "14in 11in", "297mm 210mm", "21cm 29.7cm", "100mm" ],
1522                 invalid_values: [
1523                         // XXX spec unclear on 0s and negatives
1524                         "100mm 100mm 100mm"
1525                 ]
1526         },
1527         "speak": {
1528                 domProp: "speak",
1529                 inherited: true,
1530                 backend_only: true,
1531                 type: CSS_TYPE_LONGHAND,
1532                 initial_values: [ "normal" ],
1533                 other_values: [ "none", "spell-out" ],
1534                 invalid_values: []
1535         },
1536         "speak-header": {
1537                 domProp: "speakHeader",
1538                 inherited: true,
1539                 backend_only: true,
1540                 type: CSS_TYPE_LONGHAND,
1541                 initial_values: [ "once" ],
1542                 other_values: [ "always" ],
1543                 invalid_values: []
1544         },
1545         "speak-numeral": {
1546                 domProp: "speakNumeral",
1547                 inherited: true,
1548                 backend_only: true,
1549                 type: CSS_TYPE_LONGHAND,
1550                 initial_values: [ "continuous" ],
1551                 other_values: [ "digits" ],
1552                 invalid_values: []
1553         },
1554         "speak-punctuation": {
1555                 domProp: "speakPunctuation",
1556                 inherited: true,
1557                 backend_only: true,
1558                 type: CSS_TYPE_LONGHAND,
1559                 initial_values: [ "none" ],
1560                 other_values: [ "code" ],
1561                 invalid_values: []
1562         },
1563         "speech-rate": {
1564                 domProp: "speechRate",
1565                 inherited: true,
1566                 backend_only: true,
1567                 type: CSS_TYPE_LONGHAND,
1568                 initial_values: [ "medium" ],
1569                 other_values: [ "x-slow", "slow", "fast", "x-fast", "faster", "slower", "80", "500", "73.2" ],
1570                 invalid_values: [
1571                         // "0", "-80" // unclear
1572                 ]
1573         },
1574         "stress": {
1575                 domProp: "stress",
1576                 inherited: true,
1577                 backend_only: true,
1578                 type: CSS_TYPE_LONGHAND,
1579                 initial_values: [ "50", "50.0" ],
1580                 other_values: [ "0", "100.0", "99.7", "47", "3.2" ],
1581                 invalid_values: [" -0.01", "100.2", "108", "-3" ]
1582         },
1583         "table-layout": {
1584                 domProp: "tableLayout",
1585                 inherited: false,
1586                 type: CSS_TYPE_LONGHAND,
1587                 initial_values: [ "auto" ],
1588                 other_values: [ "fixed" ],
1589                 invalid_values: []
1590         },
1591         "text-align": {
1592                 domProp: "textAlign",
1593                 inherited: true,
1594                 type: CSS_TYPE_LONGHAND,
1595                 // don't know whether left and right are same as start
1596                 initial_values: [ "start" ],
1597                 other_values: [ "center", "justify" ],
1598                 invalid_values: []
1599         },
1600         "text-decoration": {
1601                 domProp: "textDecoration",
1602                 inherited: false,
1603                 type: CSS_TYPE_LONGHAND,
1604                 initial_values: [ "none" ],
1605                 other_values: [ "underline", "overline", "line-through", "blink line-through underline", "underline overline line-through blink" ],
1606                 invalid_values: [ "underline none", "none underline", "line-through blink line-through" ]
1607         },
1608         "text-indent": {
1609                 domProp: "textIndent",
1610                 inherited: true,
1611                 type: CSS_TYPE_LONGHAND,
1612                 initial_values: [ "0" ],
1613                 other_values: [ "2em", "5%", "-10px" ],
1614                 invalid_values: []
1615         },
1616         "text-shadow": {
1617                 domProp: "textShadow",
1618                 inherited: true,
1619                 type: CSS_TYPE_LONGHAND,
1620                 initial_values: [ "none" ],
1621                 prerequisites: { "color": "blue" },
1622                 other_values: [ "2px 2px", "2px 2px 1px", "2px 2px green", "2px 2px 1px green", "green 2px 2px", "green 2px 2px 1px", "green 2px 2px, blue 1px 3px 4px", "currentColor 3px 3px", "blue 2px 2px, currentColor 1px 2px" ],
1623                 invalid_values: [ "3% 3%", "2px 2px 2px 2px", "2px 2px, none", "none, 2px 2px", "inherit, 2px 2px", "2px 2px, inherit" ]
1624         },
1625         "text-transform": {
1626                 domProp: "textTransform",
1627                 inherited: true,
1628                 type: CSS_TYPE_LONGHAND,
1629                 initial_values: [ "none" ],
1630                 other_values: [ "capitalize", "uppercase", "lowercase" ],
1631                 invalid_values: []
1632         },
1633         "top": {
1634                 domProp: "top",
1635                 inherited: false,
1636                 type: CSS_TYPE_LONGHAND,
1637                 /* XXX requires position to be set */
1638                 /* XXX 0 may or may not be equal to auto */
1639                 initial_values: [ "auto" ],
1640                 other_values: [ "32px", "-3em", "12%" ],
1641                 invalid_values: []
1642         },
1643         "unicode-bidi": {
1644                 domProp: "unicodeBidi",
1645                 inherited: false,
1646                 type: CSS_TYPE_LONGHAND,
1647                 initial_values: [ "normal" ],
1648                 other_values: [ "embed", "bidi-override" ],
1649                 invalid_values: [ "auto", "none" ]
1650         },
1651         "vertical-align": {
1652                 domProp: "verticalAlign",
1653                 inherited: false,
1654                 type: CSS_TYPE_LONGHAND,
1655                 initial_values: [ "baseline" ],
1656                 other_values: [ "sub", "super", "top", "text-top", "middle", "bottom", "text-bottom", "15%", "3px", "0.2em", "-5px", "-3%" ],
1657                 invalid_values: []
1658         },
1659         "visibility": {
1660                 domProp: "visibility",
1661                 inherited: true,
1662                 type: CSS_TYPE_LONGHAND,
1663                 initial_values: [ "visible" ],
1664                 other_values: [ "hidden", "collapse" ],
1665                 invalid_values: []
1666         },
1667         "voice-family": {
1668                 domProp: "voiceFamily",
1669                 inherited: true,
1670                 backend_only: true,
1671                 type: CSS_TYPE_LONGHAND,
1672                 initial_values: [ "male" ], /* arbitrary guess */
1673                 other_values: [ "female", "child", "Bob, male", "Jane, Juliet, female" ],
1674                 invalid_values: []
1675         },
1676         "volume": {
1677                 domProp: "volume",
1678                 inherited: true,
1679                 backend_only: true,
1680                 type: CSS_TYPE_LONGHAND,
1681                 initial_values: [ "50", "50.0", "medium" ],
1682                 other_values: [ "0", "100.0", "99.7", "47", "3.2", "silent", "x-soft", "soft", "loud", "x-loud" ],
1683                 invalid_values: [" -0.01", "100.2", "108", "-3" ]
1684         },
1685         "white-space": {
1686                 domProp: "whiteSpace",
1687                 inherited: true,
1688                 type: CSS_TYPE_LONGHAND,
1689                 initial_values: [ "normal" ],
1690                 other_values: [ "pre", "nowrap", "pre-wrap", "pre-line" ],
1691                 invalid_values: []
1692         },
1693         "widows": {
1694                 domProp: "widows",
1695                 inherited: true,
1696                 backend_only: true,
1697                 type: CSS_TYPE_LONGHAND,
1698                 // XXX requires display:block
1699                 initial_values: [ "2" ],
1700                 other_values: [ "1", "7" ],
1701                 invalid_values: [
1702                         // "0", // not clear whether it's valid or not.
1703                         // "-1", // not clear whether it's valid or not.
1704                         "0px", "3px"
1705                 ]
1706         },
1707         "width": {
1708                 domProp: "width",
1709                 inherited: false,
1710                 type: CSS_TYPE_LONGHAND,
1711                 initial_values: [ " auto" ],
1712                 /* XXX these have prerequisites */
1713                 other_values: [ "15px", "3em", "15%", "-moz-max-content", "-moz-min-content", "-moz-fit-content", "-moz-available" ],
1714                 invalid_values: [ "none" ]
1715         },
1716         "word-spacing": {
1717                 domProp: "wordSpacing",
1718                 inherited: true,
1719                 type: CSS_TYPE_LONGHAND,
1720                 initial_values: [ "normal", "0", "0px", "-0em" ],
1721                 other_values: [ "1em", "2px", "-3px" ],
1722                 invalid_values: []
1723         },
1724         "word-wrap": {
1725                 domProp: "wordWrap",
1726                 inherited: true,
1727                 type: CSS_TYPE_LONGHAND,
1728                 initial_values: [ "normal" ],
1729                 other_values: [ "break-word" ],
1730                 invalid_values: []
1731         },
1732         "z-index": {
1733                 domProp: "zIndex",
1734                 inherited: false,
1735                 type: CSS_TYPE_LONGHAND,
1736                 /* XXX requires position */
1737                 initial_values: [ "auto" ],
1738                 other_values: [ "0", "3", "-7000", "12000" ],
1739                 invalid_values: [ "3.0", "17.5" ]
1740         }
1741         ,
1742         "clip-path": {
1743                 domProp: null,
1744                 inherited: false,
1745                 type: CSS_TYPE_LONGHAND,
1746                 initial_values: [ "none" ],
1747                 other_values: [ "url(#mypath)", "url('404.svg#mypath')" ],
1748                 invalid_values: []
1749         },
1750         "clip-rule": {
1751                 domProp: null,
1752                 inherited: true,
1753                 type: CSS_TYPE_LONGHAND,
1754                 initial_values: [ "nonzero" ],
1755                 other_values: [ "evenodd" ],
1756                 invalid_values: []
1757         },
1758         "color-interpolation": {
1759                 domProp: null,
1760                 inherited: true,
1761                 type: CSS_TYPE_LONGHAND,
1762                 initial_values: [ "sRGB" ],
1763                 other_values: [ "auto", "linearRGB" ],
1764                 invalid_values: []
1765         },
1766         "color-interpolation-filters": {
1767                 domProp: null,
1768                 inherited: true,
1769                 type: CSS_TYPE_LONGHAND,
1770                 initial_values: [ "linearRGB" ],
1771                 other_values: [ "sRGB", "auto" ],
1772                 invalid_values: []
1773         },
1774         "dominant-baseline": {
1775                 domProp: null,
1776                 inherited: false,
1777                 type: CSS_TYPE_LONGHAND,
1778                 initial_values: [ "auto" ],
1779                 other_values: [ "use-script", "no-change", "reset-size", "ideographic", "alphabetic", "hanging", "mathematical", "central", "middle", "text-after-edge", "text-before-edge" ],
1780                 invalid_values: []
1781         },
1782         "fill": {
1783                 domProp: null,
1784                 inherited: true,
1785                 type: CSS_TYPE_LONGHAND,
1786                 prerequisites: { "color": "blue" },
1787                 initial_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)" ],
1788                 other_values: [ "green", "#fc3", "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green', "none", "currentColor" ],
1789                 invalid_values: []
1790         },
1791         "fill-opacity": {
1792                 domProp: null,
1793                 inherited: true,
1794                 type: CSS_TYPE_LONGHAND,
1795                 initial_values: [ "1", "2.8", "1.000" ],
1796                 other_values: [ "0", "0.3", "-7.3" ],
1797                 invalid_values: []
1798         },
1799         "fill-rule": {
1800                 domProp: null,
1801                 inherited: true,
1802                 type: CSS_TYPE_LONGHAND,
1803                 initial_values: [ "nonzero" ],
1804                 other_values: [ "evenodd" ],
1805                 invalid_values: []
1806         },
1807         "filter": {
1808                 domProp: null,
1809                 inherited: false,
1810                 type: CSS_TYPE_LONGHAND,
1811                 initial_values: [ "none" ],
1812                 other_values: [ "url(#myfilt)" ],
1813                 invalid_values: [ "url(#myfilt) none" ]
1814         },
1815         "flood-color": {
1816                 domProp: null,
1817                 inherited: false,
1818                 type: CSS_TYPE_LONGHAND,
1819                 prerequisites: { "color": "blue" },
1820                 initial_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)" ],
1821                 other_values: [ "green", "#fc3", "currentColor" ],
1822                 invalid_values: [ "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green' ]
1823         },
1824         "flood-opacity": {
1825                 domProp: null,
1826                 inherited: false,
1827                 type: CSS_TYPE_LONGHAND,
1828                 initial_values: [ "1", "2.8", "1.000" ],
1829                 other_values: [ "0", "0.3", "-7.3" ],
1830                 invalid_values: []
1831         },
1832         "lighting-color": {
1833                 domProp: null,
1834                 inherited: false,
1835                 type: CSS_TYPE_LONGHAND,
1836                 prerequisites: { "color": "blue" },
1837                 initial_values: [ "white", "#fff", "#ffffff", "rgb(255,255,255)", "rgba(255,255,255,1.0)", "rgba(255,255,255,42.0)" ],
1838                 other_values: [ "green", "#fc3", "currentColor" ],
1839                 invalid_values: [ "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green' ]
1840         },
1841         "marker": {
1842                 domProp: null,
1843                 inherited: true,
1844                 type: CSS_TYPE_TRUE_SHORTHAND,
1845                 subproperties: [ "marker-start", "marker-mid", "marker-end" ],
1846                 initial_values: [ "none" ],
1847                 other_values: [ "url(#mysym)" ],
1848                 invalid_values: [ "none none", "url(#mysym) url(#mysym)", "none url(#mysym)", "url(#mysym) none" ]
1849         },
1850         "marker-end": {
1851                 domProp: null,
1852                 inherited: true,
1853                 type: CSS_TYPE_LONGHAND,
1854                 initial_values: [ "none" ],
1855                 other_values: [ "url(#mysym)" ],
1856                 invalid_values: []
1857         },
1858         "marker-mid": {
1859                 domProp: null,
1860                 inherited: true,
1861                 type: CSS_TYPE_LONGHAND,
1862                 initial_values: [ "none" ],
1863                 other_values: [ "url(#mysym)" ],
1864                 invalid_values: []
1865         },
1866         "marker-start": {
1867                 domProp: null,
1868                 inherited: true,
1869                 type: CSS_TYPE_LONGHAND,
1870                 initial_values: [ "none" ],
1871                 other_values: [ "url(#mysym)" ],
1872                 invalid_values: []
1873         },
1874         "mask": {
1875                 domProp: null,
1876                 inherited: false,
1877                 type: CSS_TYPE_LONGHAND,
1878                 initial_values: [ "none" ],
1879                 other_values: [ "url(#mymask)" ],
1880                 invalid_values: []
1881         },
1882         "pointer-events": {
1883                 domProp: null,
1884                 inherited: true,
1885                 type: CSS_TYPE_LONGHAND,
1886                 initial_values: [ "visiblepainted" ],
1887                 other_values: [ "visibleFill", "visiblestroke", "Visible", "painted", "fill", "stroke", "all", "none" ],
1888                 invalid_values: []
1889         },
1890         "shape-rendering": {
1891                 domProp: null,
1892                 inherited: true,
1893                 type: CSS_TYPE_LONGHAND,
1894                 initial_values: [ "auto" ],
1895                 other_values: [ "optimizeSpeed", "crispEdges", "geometricPrecision" ],
1896                 invalid_values: []
1897         },
1898         "stop-color": {
1899                 domProp: null,
1900                 inherited: false,
1901                 type: CSS_TYPE_LONGHAND,
1902                 prerequisites: { "color": "blue" },
1903                 initial_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)" ],
1904                 other_values: [ "green", "#fc3", "currentColor" ],
1905                 invalid_values: [ "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green' ]
1906         },
1907         "stop-opacity": {
1908                 domProp: null,
1909                 inherited: false,
1910                 type: CSS_TYPE_LONGHAND,
1911                 initial_values: [ "1", "2.8", "1.000" ],
1912                 other_values: [ "0", "0.3", "-7.3" ],
1913                 invalid_values: []
1914         },
1915         "stroke": {
1916                 domProp: null,
1917                 inherited: true,
1918                 type: CSS_TYPE_LONGHAND,
1919                 initial_values: [ "none" ],
1920                 other_values: [ "black", "#000", "#000000", "rgb(0,0,0)", "rgba(0,0,0,1)", "green", "#fc3", "url('#myserver')", "url(foo.svg#myserver)", 'url("#myserver") green', "currentColor" ],
1921                 invalid_values: []
1922         },
1923         "stroke-dasharray": {
1924                 domProp: null,
1925                 inherited: true,
1926                 type: CSS_TYPE_LONGHAND,
1927                 initial_values: [ "none" ],
1928                 other_values: [ "5px,3px,2px", "  5px ,3px  , 2px ", "1px", "5%", "3em" ],
1929                 invalid_values: []
1930         },
1931         "stroke-dashoffset": {
1932                 domProp: null,
1933                 inherited: true,
1934                 type: CSS_TYPE_LONGHAND,
1935                 initial_values: [ "0", "-0px", "0em" ],
1936                 other_values: [ "3px", "3%", "1em" ],
1937                 invalid_values: []
1938         },
1939         "stroke-linecap": {
1940                 domProp: null,
1941                 inherited: true,
1942                 type: CSS_TYPE_LONGHAND,
1943                 initial_values: [ "butt" ],
1944                 other_values: [ "round", "square" ],
1945                 invalid_values: []
1946         },
1947         "stroke-linejoin": {
1948                 domProp: null,
1949                 inherited: true,
1950                 type: CSS_TYPE_LONGHAND,
1951                 initial_values: [ "miter" ],
1952                 other_values: [ "round", "bevel" ],
1953                 invalid_values: []
1954         },
1955         "stroke-miterlimit": {
1956                 domProp: null,
1957                 inherited: true,
1958                 type: CSS_TYPE_LONGHAND,
1959                 initial_values: [ "4" ],
1960                 other_values: [ "1", "7", "5000" ],
1961                 invalid_values: [ "0.9", "0", "-1", "3px" ]
1962         },
1963         "stroke-opacity": {
1964                 domProp: null,
1965                 inherited: true,
1966                 type: CSS_TYPE_LONGHAND,
1967                 initial_values: [ "1", "2.8", "1.000" ],
1968                 other_values: [ "0", "0.3", "-7.3" ],
1969                 invalid_values: []
1970         },
1971         "stroke-width": {
1972                 domProp: null,
1973                 inherited: true,
1974                 type: CSS_TYPE_LONGHAND,
1975                 initial_values: [ "1px" ],
1976                 other_values: [ "0", "0px", "-0em", "17px", "0.2em" ],
1977                 invalid_values: [ "-0.1px", "-3px" ]
1978         },
1979         "text-anchor": {
1980                 domProp: null,
1981                 inherited: true,
1982                 type: CSS_TYPE_LONGHAND,
1983                 initial_values: [ "start" ],
1984                 other_values: [ "middle", "end" ],
1985                 invalid_values: []
1986         },
1987         "text-rendering": {
1988                 domProp: null,
1989                 inherited: true,
1990                 type: CSS_TYPE_LONGHAND,
1991                 initial_values: [ "auto" ],
1992                 other_values: [ "optimizeSpeed", "optimizeLegibility", "geometricPrecision" ],
1993                 invalid_values: []
1994         }
1997 function logical_box_prop_get_computed(cs, property)
1999         if (! /^-moz-/.test(property))
2000                 throw "Unexpected property";
2001         property = property.substring(5);
2002         if (cs.getPropertyValue("direction") == "ltr")
2003                 property = property.replace("-start", "-left").replace("-end", "-right");
2004         else
2005                 property = property.replace("-start", "-right").replace("-end", "-left");
2006         return cs.getPropertyValue(property);
2009 // Get the computed value for a property.  For shorthands, return the
2010 // computed values of all the subproperties, delimited by " ; ".
2011 function get_computed_value(cs, property)
2013         var info = gCSSProperties[property];
2014         if ("subproperties" in info) {
2015                 var results = [];
2016                 for (var idx in info.subproperties) {
2017                         var subprop = info.subproperties[idx];
2018                         results.push(get_computed_value(cs, subprop));
2019                 }
2020                 return results.join(" ; ");
2021         }
2022         if (info.get_computed)
2023                 return info.get_computed(cs, property);
2024         return cs.getPropertyValue(property);