Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : /*
8 : * methods for dealing with CSS properties and tables of the keyword
9 : * values they accept
10 : */
11 :
12 : #include "nsCSSProps.h"
13 :
14 : #include "mozilla/ArrayUtils.h"
15 : #include "mozilla/Casting.h"
16 :
17 : #include "nsCSSKeywords.h"
18 : #include "nsLayoutUtils.h"
19 : #include "nsStyleConsts.h"
20 : #include "nsIWidget.h"
21 : #include "nsThemeConstants.h" // For system widget appearance types
22 :
23 : #include "mozilla/dom/Animation.h"
24 : #include "mozilla/dom/AnimationEffectBinding.h" // for PlaybackDirection
25 : #include "mozilla/LookAndFeel.h" // for system colors
26 :
27 : #include "nsString.h"
28 : #include "nsStaticNameTable.h"
29 :
30 : #include "mozilla/Preferences.h"
31 : #include "mozilla/StaticPrefs.h"
32 :
33 : using namespace mozilla;
34 :
35 : typedef nsCSSProps::KTableEntry KTableEntry;
36 :
37 : // required to make the symbol external, so that TestCSSPropertyLookup.cpp can link with it
38 : extern const char* const kCSSRawProperties[];
39 :
40 : // define an array of all CSS properties
41 : const char* const kCSSRawProperties[eCSSProperty_COUNT_with_aliases] = {
42 : #define CSS_PROP_LONGHAND(name_, ...) #name_,
43 : #define CSS_PROP_SHORTHAND(name_, ...) #name_,
44 : #define CSS_PROP_ALIAS(name_, ...) #name_,
45 : #include "mozilla/ServoCSSPropList.h"
46 : #undef CSS_PROP_ALIAS
47 : #undef CSS_PROP_SHORTHAND
48 : #undef CSS_PROP_LONGHAND
49 : };
50 :
51 : using namespace mozilla;
52 :
53 : static int32_t gPropertyTableRefCount;
54 : static nsStaticCaseInsensitiveNameTable* gPropertyTable;
55 : static nsStaticCaseInsensitiveNameTable* gFontDescTable;
56 : static nsStaticCaseInsensitiveNameTable* gCounterDescTable;
57 : static nsDataHashtable<nsCStringHashKey,nsCSSPropertyID>* gPropertyIDLNameTable;
58 :
59 : static const char* const kCSSRawFontDescs[] = {
60 : #define CSS_FONT_DESC(name_, method_) #name_,
61 : #include "nsCSSFontDescList.h"
62 : #undef CSS_FONT_DESC
63 : };
64 :
65 : static const char* const kCSSRawCounterDescs[] = {
66 : #define CSS_COUNTER_DESC(name_, method_) #name_,
67 : #include "nsCSSCounterDescList.h"
68 : #undef CSS_COUNTER_DESC
69 : };
70 :
71 : // We need eCSSAliasCount so we can make gAliases nonzero size when there
72 : // are no aliases.
73 : enum {
74 : eCSSAliasCount = eCSSProperty_COUNT_with_aliases - eCSSProperty_COUNT
75 : };
76 :
77 : // The names are in kCSSRawProperties.
78 : static nsCSSPropertyID gAliases[eCSSAliasCount != 0 ? eCSSAliasCount : 1] = {
79 : #define CSS_PROP_ALIAS(aliasname_, aliasid_, propid_, aliasmethod_, pref_) \
80 : eCSSProperty_##propid_ ,
81 : #include "mozilla/ServoCSSPropList.h"
82 : #undef CSS_PROP_ALIAS
83 : };
84 :
85 0 : static nsStaticCaseInsensitiveNameTable*
86 : CreateStaticTable(const char* const aRawTable[], int32_t aLength)
87 0 : {
88 : auto table = new nsStaticCaseInsensitiveNameTable(aRawTable, aLength);
89 : #ifdef DEBUG
90 0 : // Partially verify the entries.
91 0 : for (int32_t index = 0; index < aLength; ++index) {
92 0 : nsAutoCString temp(aRawTable[index]);
93 : MOZ_ASSERT(-1 == temp.FindChar('_'),
94 : "underscore char in case insensitive name table");
95 : }
96 0 : #endif
97 : return table;
98 : }
99 :
100 0 : void
101 : nsCSSProps::AddRefTable(void)
102 0 : {
103 0 : if (0 == gPropertyTableRefCount++) {
104 0 : MOZ_ASSERT(!gPropertyTable, "pre existing array!");
105 0 : MOZ_ASSERT(!gFontDescTable, "pre existing array!");
106 0 : MOZ_ASSERT(!gCounterDescTable, "pre existing array!");
107 : MOZ_ASSERT(!gPropertyIDLNameTable, "pre existing array!");
108 0 :
109 : gPropertyTable = CreateStaticTable(
110 0 : kCSSRawProperties, eCSSProperty_COUNT_with_aliases);
111 0 : gFontDescTable = CreateStaticTable(kCSSRawFontDescs, eCSSFontDesc_COUNT);
112 : gCounterDescTable = CreateStaticTable(
113 : kCSSRawCounterDescs, eCSSCounterDesc_COUNT);
114 0 :
115 0 : gPropertyIDLNameTable = new nsDataHashtable<nsCStringHashKey,nsCSSPropertyID>;
116 0 : for (nsCSSPropertyID p = nsCSSPropertyID(0);
117 0 : size_t(p) < ArrayLength(kIDLNameTable);
118 0 : p = nsCSSPropertyID(p + 1)) {
119 0 : if (kIDLNameTable[p]) {
120 : gPropertyIDLNameTable->Put(nsDependentCString(kIDLNameTable[p]), p);
121 : }
122 : }
123 :
124 0 : static bool prefObserversInited = false;
125 0 : if (!prefObserversInited) {
126 130 : prefObserversInited = true;
127 130 : for (const PropertyPref* pref = kPropertyPrefTable;
128 129 : pref->mPropID != eCSSProperty_UNKNOWN; pref++) {
129 129 : bool* enabled = &gPropertyEnabled[pref->mPropID];
130 : Preferences::AddBoolVarCache(enabled, pref->mPref);
131 : }
132 : }
133 1 : }
134 : }
135 :
136 : #undef DEBUG_SHORTHANDS_CONTAINING
137 :
138 0 : void
139 : nsCSSProps::ReleaseTable(void)
140 0 : {
141 0 : if (0 == --gPropertyTableRefCount) {
142 0 : delete gPropertyTable;
143 : gPropertyTable = nullptr;
144 0 :
145 0 : delete gFontDescTable;
146 : gFontDescTable = nullptr;
147 0 :
148 0 : delete gCounterDescTable;
149 : gCounterDescTable = nullptr;
150 0 :
151 0 : delete gPropertyIDLNameTable;
152 : gPropertyIDLNameTable = nullptr;
153 0 : }
154 : }
155 :
156 0 : /* static */ bool
157 : nsCSSProps::IsCustomPropertyName(const nsAString& aProperty)
158 0 : {
159 0 : return aProperty.Length() >= CSS_CUSTOM_NAME_PREFIX_LENGTH &&
160 : StringBeginsWith(aProperty, NS_LITERAL_STRING("--"));
161 : }
162 :
163 61 : nsCSSPropertyID
164 : nsCSSProps::LookupProperty(const nsAString& aProperty, EnabledState aEnabled)
165 0 : {
166 : if (IsCustomPropertyName(aProperty)) {
167 : return eCSSPropertyExtra_variable;
168 : }
169 :
170 : // This is faster than converting and calling
171 : // LookupProperty(nsACString&). The table will do its own
172 0 : // converting and avoid a PromiseFlatCString() call.
173 0 : MOZ_ASSERT(gPropertyTable, "no lookup table, needs addref");
174 60 : nsCSSPropertyID res = nsCSSPropertyID(gPropertyTable->Lookup(aProperty));
175 60 : if (MOZ_LIKELY(res < eCSSProperty_COUNT)) {
176 0 : if (res != eCSSProperty_UNKNOWN && !IsEnabled(res, aEnabled)) {
177 : res = eCSSProperty_UNKNOWN;
178 : }
179 : return res;
180 : }
181 : MOZ_ASSERT(eCSSAliasCount != 0,
182 : "'res' must be an alias at this point so we better have some!");
183 : // We intentionally don't support CSSEnabledState::eInUASheets or
184 : // CSSEnabledState::eInChrome for aliases yet because it's unlikely
185 0 : // there will be a need for it.
186 0 : if (IsEnabled(res) || aEnabled == CSSEnabledState::eIgnoreEnabledState) {
187 0 : res = gAliases[res - eCSSProperty_COUNT];
188 : MOZ_ASSERT(0 <= res && res < eCSSProperty_COUNT,
189 0 : "aliases must not point to other aliases");
190 : if (IsEnabled(res) || aEnabled == CSSEnabledState::eIgnoreEnabledState) {
191 : return res;
192 : }
193 : }
194 : return eCSSProperty_UNKNOWN;
195 : }
196 :
197 0 : nsCSSPropertyID
198 : nsCSSProps::LookupPropertyByIDLName(const nsACString& aPropertyIDLName,
199 : EnabledState aEnabled)
200 : {
201 0 : nsCSSPropertyID res;
202 : if (!gPropertyIDLNameTable->Get(aPropertyIDLName, &res)) {
203 : return eCSSProperty_UNKNOWN;
204 0 : }
205 0 : MOZ_ASSERT(res < eCSSProperty_COUNT);
206 : if (!IsEnabled(res, aEnabled)) {
207 : return eCSSProperty_UNKNOWN;
208 0 : }
209 : return res;
210 : }
211 :
212 0 : nsCSSPropertyID
213 : nsCSSProps::LookupPropertyByIDLName(const nsAString& aPropertyIDLName,
214 : EnabledState aEnabled)
215 0 : {
216 0 : MOZ_ASSERT(gPropertyIDLNameTable, "no lookup table, needs addref");
217 0 : return LookupPropertyByIDLName(NS_ConvertUTF16toUTF8(aPropertyIDLName),
218 : aEnabled);
219 : }
220 :
221 0 : nsCSSFontDesc
222 : nsCSSProps::LookupFontDesc(const nsAString& aFontDesc)
223 0 : {
224 0 : MOZ_ASSERT(gFontDescTable, "no lookup table, needs addref");
225 : nsCSSFontDesc which = nsCSSFontDesc(gFontDescTable->Lookup(aFontDesc));
226 0 :
227 0 : if (which == eCSSFontDesc_Display &&
228 0 : !StaticPrefs::layout_css_font_display_enabled()) {
229 : which = eCSSFontDesc_UNKNOWN;
230 0 : }
231 : return which;
232 : }
233 :
234 12 : const nsCString&
235 : nsCSSProps::GetStringValue(nsCSSPropertyID aProperty)
236 12 : {
237 0 : MOZ_ASSERT(gPropertyTable, "no lookup table, needs addref");
238 0 : if (gPropertyTable) {
239 : return gPropertyTable->GetStringValue(int32_t(aProperty));
240 0 : } else {
241 : static nsDependentCString sNullStr("");
242 : return sNullStr;
243 : }
244 : }
245 :
246 0 : const nsCString&
247 : nsCSSProps::GetStringValue(nsCSSFontDesc aFontDescID)
248 0 : {
249 0 : MOZ_ASSERT(gFontDescTable, "no lookup table, needs addref");
250 0 : if (gFontDescTable) {
251 : return gFontDescTable->GetStringValue(int32_t(aFontDescID));
252 0 : } else {
253 : static nsDependentCString sNullStr("");
254 : return sNullStr;
255 : }
256 : }
257 :
258 0 : const nsCString&
259 : nsCSSProps::GetStringValue(nsCSSCounterDesc aCounterDesc)
260 0 : {
261 0 : MOZ_ASSERT(gCounterDescTable, "no lookup table, needs addref");
262 0 : if (gCounterDescTable) {
263 : return gCounterDescTable->GetStringValue(int32_t(aCounterDesc));
264 0 : } else {
265 : static nsDependentCString sNullStr("");
266 : return sNullStr;
267 : }
268 : }
269 :
270 : /***************************************************************************/
271 :
272 : const KTableEntry nsCSSProps::kAnimationDirectionKTable[] = {
273 : { eCSSKeyword_normal, static_cast<uint32_t>(dom::PlaybackDirection::Normal) },
274 : { eCSSKeyword_reverse, static_cast<uint32_t>(dom::PlaybackDirection::Reverse) },
275 : { eCSSKeyword_alternate, static_cast<uint32_t>(dom::PlaybackDirection::Alternate) },
276 : { eCSSKeyword_alternate_reverse, static_cast<uint32_t>(dom::PlaybackDirection::Alternate_reverse) },
277 : { eCSSKeyword_UNKNOWN, -1 }
278 : };
279 :
280 : const KTableEntry nsCSSProps::kAnimationFillModeKTable[] = {
281 : { eCSSKeyword_none, static_cast<uint32_t>(dom::FillMode::None) },
282 : { eCSSKeyword_forwards, static_cast<uint32_t>(dom::FillMode::Forwards) },
283 : { eCSSKeyword_backwards, static_cast<uint32_t>(dom::FillMode::Backwards) },
284 : { eCSSKeyword_both, static_cast<uint32_t>(dom::FillMode::Both) },
285 : { eCSSKeyword_UNKNOWN, -1 }
286 : };
287 :
288 : const KTableEntry nsCSSProps::kAnimationPlayStateKTable[] = {
289 : { eCSSKeyword_running, NS_STYLE_ANIMATION_PLAY_STATE_RUNNING },
290 : { eCSSKeyword_paused, NS_STYLE_ANIMATION_PLAY_STATE_PAUSED },
291 : { eCSSKeyword_UNKNOWN, -1 }
292 : };
293 :
294 : const KTableEntry nsCSSProps::kAppearanceKTable[] = {
295 : { eCSSKeyword_none, NS_THEME_NONE },
296 : { eCSSKeyword_button, NS_THEME_BUTTON },
297 : { eCSSKeyword_radio, NS_THEME_RADIO },
298 : { eCSSKeyword_checkbox, NS_THEME_CHECKBOX },
299 : { eCSSKeyword_button_bevel, NS_THEME_BUTTON_BEVEL },
300 : { eCSSKeyword_toolbox, NS_THEME_TOOLBOX },
301 : { eCSSKeyword_toolbar, NS_THEME_TOOLBAR },
302 : { eCSSKeyword_toolbarbutton, NS_THEME_TOOLBARBUTTON },
303 : { eCSSKeyword_toolbargripper, NS_THEME_TOOLBARGRIPPER },
304 : { eCSSKeyword_dualbutton, NS_THEME_DUALBUTTON },
305 : { eCSSKeyword_toolbarbutton_dropdown, NS_THEME_TOOLBARBUTTON_DROPDOWN },
306 : { eCSSKeyword_button_arrow_up, NS_THEME_BUTTON_ARROW_UP },
307 : { eCSSKeyword_button_arrow_down, NS_THEME_BUTTON_ARROW_DOWN },
308 : { eCSSKeyword_button_arrow_next, NS_THEME_BUTTON_ARROW_NEXT },
309 : { eCSSKeyword_button_arrow_previous, NS_THEME_BUTTON_ARROW_PREVIOUS },
310 : { eCSSKeyword_meterbar, NS_THEME_METERBAR },
311 : { eCSSKeyword_meterchunk, NS_THEME_METERCHUNK },
312 : { eCSSKeyword_number_input, NS_THEME_NUMBER_INPUT },
313 : { eCSSKeyword_separator, NS_THEME_SEPARATOR },
314 : { eCSSKeyword_splitter, NS_THEME_SPLITTER },
315 : { eCSSKeyword_statusbar, NS_THEME_STATUSBAR },
316 : { eCSSKeyword_statusbarpanel, NS_THEME_STATUSBARPANEL },
317 : { eCSSKeyword_resizerpanel, NS_THEME_RESIZERPANEL },
318 : { eCSSKeyword_resizer, NS_THEME_RESIZER },
319 : { eCSSKeyword_listbox, NS_THEME_LISTBOX },
320 : { eCSSKeyword_listitem, NS_THEME_LISTITEM },
321 : { eCSSKeyword_treeview, NS_THEME_TREEVIEW },
322 : { eCSSKeyword_treeitem, NS_THEME_TREEITEM },
323 : { eCSSKeyword_treetwisty, NS_THEME_TREETWISTY },
324 : { eCSSKeyword_treetwistyopen, NS_THEME_TREETWISTYOPEN },
325 : { eCSSKeyword_treeline, NS_THEME_TREELINE },
326 : { eCSSKeyword_treeheader, NS_THEME_TREEHEADER },
327 : { eCSSKeyword_treeheadercell, NS_THEME_TREEHEADERCELL },
328 : { eCSSKeyword_treeheadersortarrow, NS_THEME_TREEHEADERSORTARROW },
329 : { eCSSKeyword_progressbar, NS_THEME_PROGRESSBAR },
330 : { eCSSKeyword_progresschunk, NS_THEME_PROGRESSCHUNK },
331 : { eCSSKeyword_progressbar_vertical, NS_THEME_PROGRESSBAR_VERTICAL },
332 : { eCSSKeyword_progresschunk_vertical, NS_THEME_PROGRESSCHUNK_VERTICAL },
333 : { eCSSKeyword_tab, NS_THEME_TAB },
334 : { eCSSKeyword_tabpanels, NS_THEME_TABPANELS },
335 : { eCSSKeyword_tabpanel, NS_THEME_TABPANEL },
336 : { eCSSKeyword_tab_scroll_arrow_back, NS_THEME_TAB_SCROLL_ARROW_BACK },
337 : { eCSSKeyword_tab_scroll_arrow_forward, NS_THEME_TAB_SCROLL_ARROW_FORWARD },
338 : { eCSSKeyword_tooltip, NS_THEME_TOOLTIP },
339 : { eCSSKeyword_inner_spin_button, NS_THEME_INNER_SPIN_BUTTON },
340 : { eCSSKeyword_spinner, NS_THEME_SPINNER },
341 : { eCSSKeyword_spinner_upbutton, NS_THEME_SPINNER_UPBUTTON },
342 : { eCSSKeyword_spinner_downbutton, NS_THEME_SPINNER_DOWNBUTTON },
343 : { eCSSKeyword_spinner_textfield, NS_THEME_SPINNER_TEXTFIELD },
344 : { eCSSKeyword_scrollbar, NS_THEME_SCROLLBAR },
345 : { eCSSKeyword_scrollbar_small, NS_THEME_SCROLLBAR_SMALL },
346 : { eCSSKeyword_scrollbar_horizontal, NS_THEME_SCROLLBAR_HORIZONTAL },
347 : { eCSSKeyword_scrollbar_vertical, NS_THEME_SCROLLBAR_VERTICAL },
348 : { eCSSKeyword_scrollbarbutton_up, NS_THEME_SCROLLBARBUTTON_UP },
349 : { eCSSKeyword_scrollbarbutton_down, NS_THEME_SCROLLBARBUTTON_DOWN },
350 : { eCSSKeyword_scrollbarbutton_left, NS_THEME_SCROLLBARBUTTON_LEFT },
351 : { eCSSKeyword_scrollbarbutton_right, NS_THEME_SCROLLBARBUTTON_RIGHT },
352 : { eCSSKeyword_scrollbartrack_horizontal, NS_THEME_SCROLLBARTRACK_HORIZONTAL },
353 : { eCSSKeyword_scrollbartrack_vertical, NS_THEME_SCROLLBARTRACK_VERTICAL },
354 : { eCSSKeyword_scrollbarthumb_horizontal, NS_THEME_SCROLLBARTHUMB_HORIZONTAL },
355 : { eCSSKeyword_scrollbarthumb_vertical, NS_THEME_SCROLLBARTHUMB_VERTICAL },
356 : { eCSSKeyword_textfield, NS_THEME_TEXTFIELD },
357 : { eCSSKeyword_textfield_multiline, NS_THEME_TEXTFIELD_MULTILINE },
358 : { eCSSKeyword_caret, NS_THEME_CARET },
359 : { eCSSKeyword_searchfield, NS_THEME_SEARCHFIELD },
360 : { eCSSKeyword_menulist, NS_THEME_MENULIST },
361 : { eCSSKeyword_menulist_button, NS_THEME_MENULIST_BUTTON },
362 : { eCSSKeyword_menulist_text, NS_THEME_MENULIST_TEXT },
363 : { eCSSKeyword_menulist_textfield, NS_THEME_MENULIST_TEXTFIELD },
364 : { eCSSKeyword_range, NS_THEME_RANGE },
365 : { eCSSKeyword_range_thumb, NS_THEME_RANGE_THUMB },
366 : { eCSSKeyword_scale_horizontal, NS_THEME_SCALE_HORIZONTAL },
367 : { eCSSKeyword_scale_vertical, NS_THEME_SCALE_VERTICAL },
368 : { eCSSKeyword_scalethumb_horizontal, NS_THEME_SCALETHUMB_HORIZONTAL },
369 : { eCSSKeyword_scalethumb_vertical, NS_THEME_SCALETHUMB_VERTICAL },
370 : { eCSSKeyword_scalethumbstart, NS_THEME_SCALETHUMBSTART },
371 : { eCSSKeyword_scalethumbend, NS_THEME_SCALETHUMBEND },
372 : { eCSSKeyword_scalethumbtick, NS_THEME_SCALETHUMBTICK },
373 : { eCSSKeyword_groupbox, NS_THEME_GROUPBOX },
374 : { eCSSKeyword_checkbox_container, NS_THEME_CHECKBOX_CONTAINER },
375 : { eCSSKeyword_radio_container, NS_THEME_RADIO_CONTAINER },
376 : { eCSSKeyword_checkbox_label, NS_THEME_CHECKBOX_LABEL },
377 : { eCSSKeyword_radio_label, NS_THEME_RADIO_LABEL },
378 : { eCSSKeyword_button_focus, NS_THEME_BUTTON_FOCUS },
379 : // Even though window is meant for OS window styling, web developers use
380 : // `window` on <select> to remove the dropmarker. Care should be taken when
381 : // changing -moz-appearance:window to avoid web compatibility regressions.
382 : // See https://bugzilla.mozilla.org/show_bug.cgi?id=1466715#c10
383 : { eCSSKeyword_window, NS_THEME_WINDOW },
384 : { eCSSKeyword_dialog, NS_THEME_DIALOG },
385 : { eCSSKeyword_menubar, NS_THEME_MENUBAR },
386 : { eCSSKeyword_menupopup, NS_THEME_MENUPOPUP },
387 : { eCSSKeyword_menuitem, NS_THEME_MENUITEM },
388 : { eCSSKeyword_checkmenuitem, NS_THEME_CHECKMENUITEM },
389 : { eCSSKeyword_radiomenuitem, NS_THEME_RADIOMENUITEM },
390 : { eCSSKeyword_menucheckbox, NS_THEME_MENUCHECKBOX },
391 : { eCSSKeyword_menuradio, NS_THEME_MENURADIO },
392 : { eCSSKeyword_menuseparator, NS_THEME_MENUSEPARATOR },
393 : { eCSSKeyword_menuarrow, NS_THEME_MENUARROW },
394 : { eCSSKeyword_menuimage, NS_THEME_MENUIMAGE },
395 : { eCSSKeyword_menuitemtext, NS_THEME_MENUITEMTEXT },
396 : { eCSSKeyword__moz_win_media_toolbox, NS_THEME_WIN_MEDIA_TOOLBOX },
397 : { eCSSKeyword__moz_win_communications_toolbox, NS_THEME_WIN_COMMUNICATIONS_TOOLBOX },
398 : { eCSSKeyword__moz_win_browsertabbar_toolbox, NS_THEME_WIN_BROWSERTABBAR_TOOLBOX },
399 : { eCSSKeyword__moz_win_glass, NS_THEME_WIN_GLASS },
400 : { eCSSKeyword__moz_win_borderless_glass, NS_THEME_WIN_BORDERLESS_GLASS },
401 : { eCSSKeyword__moz_mac_fullscreen_button, NS_THEME_MAC_FULLSCREEN_BUTTON },
402 : { eCSSKeyword__moz_mac_help_button, NS_THEME_MAC_HELP_BUTTON },
403 : { eCSSKeyword__moz_window_titlebar, NS_THEME_WINDOW_TITLEBAR },
404 : { eCSSKeyword__moz_window_titlebar_maximized, NS_THEME_WINDOW_TITLEBAR_MAXIMIZED },
405 : { eCSSKeyword__moz_window_frame_left, NS_THEME_WINDOW_FRAME_LEFT },
406 : { eCSSKeyword__moz_window_frame_right, NS_THEME_WINDOW_FRAME_RIGHT },
407 : { eCSSKeyword__moz_window_frame_bottom, NS_THEME_WINDOW_FRAME_BOTTOM },
408 : { eCSSKeyword__moz_window_button_close, NS_THEME_WINDOW_BUTTON_CLOSE },
409 : { eCSSKeyword__moz_window_button_minimize, NS_THEME_WINDOW_BUTTON_MINIMIZE },
410 : { eCSSKeyword__moz_window_button_maximize, NS_THEME_WINDOW_BUTTON_MAXIMIZE },
411 : { eCSSKeyword__moz_window_button_restore, NS_THEME_WINDOW_BUTTON_RESTORE },
412 : { eCSSKeyword__moz_window_button_box, NS_THEME_WINDOW_BUTTON_BOX },
413 : { eCSSKeyword__moz_window_button_box_maximized, NS_THEME_WINDOW_BUTTON_BOX_MAXIMIZED },
414 : { eCSSKeyword__moz_win_exclude_glass, NS_THEME_WIN_EXCLUDE_GLASS },
415 : { eCSSKeyword__moz_mac_vibrancy_light, NS_THEME_MAC_VIBRANCY_LIGHT },
416 : { eCSSKeyword__moz_mac_vibrancy_dark, NS_THEME_MAC_VIBRANCY_DARK },
417 : { eCSSKeyword__moz_mac_vibrant_titlebar_light, NS_THEME_MAC_VIBRANT_TITLEBAR_LIGHT },
418 : { eCSSKeyword__moz_mac_vibrant_titlebar_dark, NS_THEME_MAC_VIBRANT_TITLEBAR_DARK },
419 : { eCSSKeyword__moz_mac_disclosure_button_open, NS_THEME_MAC_DISCLOSURE_BUTTON_OPEN },
420 : { eCSSKeyword__moz_mac_disclosure_button_closed, NS_THEME_MAC_DISCLOSURE_BUTTON_CLOSED },
421 : { eCSSKeyword__moz_gtk_info_bar, NS_THEME_GTK_INFO_BAR },
422 : { eCSSKeyword__moz_mac_source_list, NS_THEME_MAC_SOURCE_LIST },
423 : { eCSSKeyword__moz_mac_source_list_selection, NS_THEME_MAC_SOURCE_LIST_SELECTION },
424 : { eCSSKeyword__moz_mac_active_source_list_selection, NS_THEME_MAC_ACTIVE_SOURCE_LIST_SELECTION },
425 : { eCSSKeyword_UNKNOWN, -1 }
426 : };
427 :
428 : const KTableEntry nsCSSProps::kBackfaceVisibilityKTable[] = {
429 : { eCSSKeyword_visible, NS_STYLE_BACKFACE_VISIBILITY_VISIBLE },
430 : { eCSSKeyword_hidden, NS_STYLE_BACKFACE_VISIBILITY_HIDDEN },
431 : { eCSSKeyword_UNKNOWN, -1 }
432 : };
433 :
434 : const KTableEntry nsCSSProps::kTransformStyleKTable[] = {
435 : { eCSSKeyword_flat, NS_STYLE_TRANSFORM_STYLE_FLAT },
436 : { eCSSKeyword_preserve_3d, NS_STYLE_TRANSFORM_STYLE_PRESERVE_3D },
437 : { eCSSKeyword_UNKNOWN, -1 }
438 : };
439 :
440 : const KTableEntry nsCSSProps::kImageLayerAttachmentKTable[] = {
441 : { eCSSKeyword_fixed, StyleImageLayerAttachment::Fixed },
442 : { eCSSKeyword_scroll, StyleImageLayerAttachment::Scroll },
443 : { eCSSKeyword_local, StyleImageLayerAttachment::Local },
444 : { eCSSKeyword_UNKNOWN, -1 }
445 : };
446 :
447 : const KTableEntry nsCSSProps::kBackgroundOriginKTable[] = {
448 : { eCSSKeyword_border_box, StyleGeometryBox::BorderBox },
449 : { eCSSKeyword_padding_box, StyleGeometryBox::PaddingBox },
450 : { eCSSKeyword_content_box, StyleGeometryBox::ContentBox },
451 : { eCSSKeyword_UNKNOWN, -1 }
452 : };
453 :
454 : KTableEntry nsCSSProps::kBackgroundClipKTable[] = {
455 : { eCSSKeyword_border_box, StyleGeometryBox::BorderBox },
456 : { eCSSKeyword_padding_box, StyleGeometryBox::PaddingBox },
457 : { eCSSKeyword_content_box, StyleGeometryBox::ContentBox },
458 : { eCSSKeyword_text, StyleGeometryBox::Text },
459 : { eCSSKeyword_UNKNOWN, -1 }
460 : };
461 :
462 : const KTableEntry nsCSSProps::kMaskOriginKTable[] = {
463 : { eCSSKeyword_border_box, StyleGeometryBox::BorderBox },
464 : { eCSSKeyword_padding_box, StyleGeometryBox::PaddingBox },
465 : { eCSSKeyword_content_box, StyleGeometryBox::ContentBox },
466 : { eCSSKeyword_fill_box, StyleGeometryBox::FillBox },
467 : { eCSSKeyword_stroke_box, StyleGeometryBox::StrokeBox },
468 : { eCSSKeyword_view_box, StyleGeometryBox::ViewBox },
469 : { eCSSKeyword_UNKNOWN, -1 }
470 : };
471 :
472 : const KTableEntry nsCSSProps::kMaskClipKTable[] = {
473 : { eCSSKeyword_border_box, StyleGeometryBox::BorderBox },
474 : { eCSSKeyword_padding_box, StyleGeometryBox::PaddingBox },
475 : { eCSSKeyword_content_box, StyleGeometryBox::ContentBox },
476 : { eCSSKeyword_fill_box, StyleGeometryBox::FillBox },
477 : { eCSSKeyword_stroke_box, StyleGeometryBox::StrokeBox },
478 : { eCSSKeyword_view_box, StyleGeometryBox::ViewBox },
479 : { eCSSKeyword_no_clip, StyleGeometryBox::NoClip },
480 : { eCSSKeyword_UNKNOWN, -1 }
481 : };
482 :
483 : const KTableEntry nsCSSProps::kImageLayerRepeatKTable[] = {
484 : { eCSSKeyword_no_repeat, StyleImageLayerRepeat::NoRepeat },
485 : { eCSSKeyword_repeat, StyleImageLayerRepeat::Repeat },
486 : { eCSSKeyword_repeat_x, StyleImageLayerRepeat::RepeatX },
487 : { eCSSKeyword_repeat_y, StyleImageLayerRepeat::RepeatY },
488 : { eCSSKeyword_round, StyleImageLayerRepeat::Round},
489 : { eCSSKeyword_space, StyleImageLayerRepeat::Space},
490 : { eCSSKeyword_UNKNOWN, -1 }
491 : };
492 :
493 : const KTableEntry nsCSSProps::kImageLayerModeKTable[] = {
494 : { eCSSKeyword_alpha, NS_STYLE_MASK_MODE_ALPHA },
495 : { eCSSKeyword_luminance, NS_STYLE_MASK_MODE_LUMINANCE },
496 : { eCSSKeyword_match_source, NS_STYLE_MASK_MODE_MATCH_SOURCE },
497 : { eCSSKeyword_UNKNOWN, -1 }
498 : };
499 :
500 : const KTableEntry nsCSSProps::kImageLayerCompositeKTable[] = {
501 : { eCSSKeyword_add, NS_STYLE_MASK_COMPOSITE_ADD },
502 : { eCSSKeyword_subtract, NS_STYLE_MASK_COMPOSITE_SUBTRACT },
503 : { eCSSKeyword_intersect, NS_STYLE_MASK_COMPOSITE_INTERSECT },
504 : { eCSSKeyword_exclude, NS_STYLE_MASK_COMPOSITE_EXCLUDE },
505 : { eCSSKeyword_UNKNOWN, -1 }
506 : };
507 :
508 : const KTableEntry nsCSSProps::kBlendModeKTable[] = {
509 : { eCSSKeyword_normal, NS_STYLE_BLEND_NORMAL },
510 : { eCSSKeyword_multiply, NS_STYLE_BLEND_MULTIPLY },
511 : { eCSSKeyword_screen, NS_STYLE_BLEND_SCREEN },
512 : { eCSSKeyword_overlay, NS_STYLE_BLEND_OVERLAY },
513 : { eCSSKeyword_darken, NS_STYLE_BLEND_DARKEN },
514 : { eCSSKeyword_lighten, NS_STYLE_BLEND_LIGHTEN },
515 : { eCSSKeyword_color_dodge, NS_STYLE_BLEND_COLOR_DODGE },
516 : { eCSSKeyword_color_burn, NS_STYLE_BLEND_COLOR_BURN },
517 : { eCSSKeyword_hard_light, NS_STYLE_BLEND_HARD_LIGHT },
518 : { eCSSKeyword_soft_light, NS_STYLE_BLEND_SOFT_LIGHT },
519 : { eCSSKeyword_difference, NS_STYLE_BLEND_DIFFERENCE },
520 : { eCSSKeyword_exclusion, NS_STYLE_BLEND_EXCLUSION },
521 : { eCSSKeyword_hue, NS_STYLE_BLEND_HUE },
522 : { eCSSKeyword_saturation, NS_STYLE_BLEND_SATURATION },
523 : { eCSSKeyword_color, NS_STYLE_BLEND_COLOR },
524 : { eCSSKeyword_luminosity, NS_STYLE_BLEND_LUMINOSITY },
525 : { eCSSKeyword_UNKNOWN, -1 }
526 : };
527 :
528 : const KTableEntry nsCSSProps::kBorderCollapseKTable[] = {
529 : { eCSSKeyword_collapse, NS_STYLE_BORDER_COLLAPSE },
530 : { eCSSKeyword_separate, NS_STYLE_BORDER_SEPARATE },
531 : { eCSSKeyword_UNKNOWN, -1 }
532 : };
533 :
534 : const KTableEntry nsCSSProps::kBorderImageRepeatKTable[] = {
535 : { eCSSKeyword_stretch, StyleBorderImageRepeat::Stretch },
536 : { eCSSKeyword_repeat, StyleBorderImageRepeat::Repeat },
537 : { eCSSKeyword_round, StyleBorderImageRepeat::Round },
538 : { eCSSKeyword_space, StyleBorderImageRepeat::Space },
539 : { eCSSKeyword_UNKNOWN, -1 }
540 : };
541 :
542 : const KTableEntry nsCSSProps::kBorderStyleKTable[] = {
543 : { eCSSKeyword_none, NS_STYLE_BORDER_STYLE_NONE },
544 : { eCSSKeyword_hidden, NS_STYLE_BORDER_STYLE_HIDDEN },
545 : { eCSSKeyword_dotted, NS_STYLE_BORDER_STYLE_DOTTED },
546 : { eCSSKeyword_dashed, NS_STYLE_BORDER_STYLE_DASHED },
547 : { eCSSKeyword_solid, NS_STYLE_BORDER_STYLE_SOLID },
548 : { eCSSKeyword_double, NS_STYLE_BORDER_STYLE_DOUBLE },
549 : { eCSSKeyword_groove, NS_STYLE_BORDER_STYLE_GROOVE },
550 : { eCSSKeyword_ridge, NS_STYLE_BORDER_STYLE_RIDGE },
551 : { eCSSKeyword_inset, NS_STYLE_BORDER_STYLE_INSET },
552 : { eCSSKeyword_outset, NS_STYLE_BORDER_STYLE_OUTSET },
553 : { eCSSKeyword_UNKNOWN, -1 }
554 : };
555 :
556 : const KTableEntry nsCSSProps::kBoxDecorationBreakKTable[] = {
557 : { eCSSKeyword_slice, StyleBoxDecorationBreak::Slice },
558 : { eCSSKeyword_clone, StyleBoxDecorationBreak::Clone },
559 : { eCSSKeyword_UNKNOWN, -1 }
560 : };
561 :
562 : const KTableEntry nsCSSProps::kBoxShadowTypeKTable[] = {
563 : { eCSSKeyword_inset, uint8_t(StyleBoxShadowType::Inset) },
564 : { eCSSKeyword_UNKNOWN, -1 }
565 : };
566 :
567 : const KTableEntry nsCSSProps::kBoxSizingKTable[] = {
568 : { eCSSKeyword_content_box, StyleBoxSizing::Content },
569 : { eCSSKeyword_border_box, StyleBoxSizing::Border },
570 : { eCSSKeyword_UNKNOWN, -1 }
571 : };
572 :
573 : const KTableEntry nsCSSProps::kCaptionSideKTable[] = {
574 : { eCSSKeyword_top, NS_STYLE_CAPTION_SIDE_TOP },
575 : { eCSSKeyword_right, NS_STYLE_CAPTION_SIDE_RIGHT },
576 : { eCSSKeyword_bottom, NS_STYLE_CAPTION_SIDE_BOTTOM },
577 : { eCSSKeyword_left, NS_STYLE_CAPTION_SIDE_LEFT },
578 : { eCSSKeyword_top_outside, NS_STYLE_CAPTION_SIDE_TOP_OUTSIDE },
579 : { eCSSKeyword_bottom_outside, NS_STYLE_CAPTION_SIDE_BOTTOM_OUTSIDE },
580 : { eCSSKeyword_UNKNOWN, -1 }
581 : };
582 :
583 : const KTableEntry nsCSSProps::kClearKTable[] = {
584 : { eCSSKeyword_none, StyleClear::None },
585 : { eCSSKeyword_left, StyleClear::Left },
586 : { eCSSKeyword_right, StyleClear::Right },
587 : { eCSSKeyword_inline_start, StyleClear::InlineStart },
588 : { eCSSKeyword_inline_end, StyleClear::InlineEnd },
589 : { eCSSKeyword_both, StyleClear::Both },
590 : { eCSSKeyword_UNKNOWN, -1 }
591 : };
592 :
593 : const KTableEntry nsCSSProps::kCounterSystemKTable[] = {
594 : { eCSSKeyword_cyclic, NS_STYLE_COUNTER_SYSTEM_CYCLIC },
595 : { eCSSKeyword_numeric, NS_STYLE_COUNTER_SYSTEM_NUMERIC },
596 : { eCSSKeyword_alphabetic, NS_STYLE_COUNTER_SYSTEM_ALPHABETIC },
597 : { eCSSKeyword_symbolic, NS_STYLE_COUNTER_SYSTEM_SYMBOLIC },
598 : { eCSSKeyword_additive, NS_STYLE_COUNTER_SYSTEM_ADDITIVE },
599 : { eCSSKeyword_fixed, NS_STYLE_COUNTER_SYSTEM_FIXED },
600 : { eCSSKeyword_extends, NS_STYLE_COUNTER_SYSTEM_EXTENDS },
601 : { eCSSKeyword_UNKNOWN, -1 }
602 : };
603 :
604 : const KTableEntry nsCSSProps::kCursorKTable[] = {
605 : // CSS 2.0
606 : { eCSSKeyword_auto, NS_STYLE_CURSOR_AUTO },
607 : { eCSSKeyword_crosshair, NS_STYLE_CURSOR_CROSSHAIR },
608 : { eCSSKeyword_default, NS_STYLE_CURSOR_DEFAULT },
609 : { eCSSKeyword_pointer, NS_STYLE_CURSOR_POINTER },
610 : { eCSSKeyword_move, NS_STYLE_CURSOR_MOVE },
611 : { eCSSKeyword_e_resize, NS_STYLE_CURSOR_E_RESIZE },
612 : { eCSSKeyword_ne_resize, NS_STYLE_CURSOR_NE_RESIZE },
613 : { eCSSKeyword_nw_resize, NS_STYLE_CURSOR_NW_RESIZE },
614 : { eCSSKeyword_n_resize, NS_STYLE_CURSOR_N_RESIZE },
615 : { eCSSKeyword_se_resize, NS_STYLE_CURSOR_SE_RESIZE },
616 : { eCSSKeyword_sw_resize, NS_STYLE_CURSOR_SW_RESIZE },
617 : { eCSSKeyword_s_resize, NS_STYLE_CURSOR_S_RESIZE },
618 : { eCSSKeyword_w_resize, NS_STYLE_CURSOR_W_RESIZE },
619 : { eCSSKeyword_text, NS_STYLE_CURSOR_TEXT },
620 : { eCSSKeyword_wait, NS_STYLE_CURSOR_WAIT },
621 : { eCSSKeyword_help, NS_STYLE_CURSOR_HELP },
622 : // CSS 2.1
623 : { eCSSKeyword_progress, NS_STYLE_CURSOR_SPINNING },
624 : // CSS3 basic user interface module
625 : { eCSSKeyword_copy, NS_STYLE_CURSOR_COPY },
626 : { eCSSKeyword_alias, NS_STYLE_CURSOR_ALIAS },
627 : { eCSSKeyword_context_menu, NS_STYLE_CURSOR_CONTEXT_MENU },
628 : { eCSSKeyword_cell, NS_STYLE_CURSOR_CELL },
629 : { eCSSKeyword_not_allowed, NS_STYLE_CURSOR_NOT_ALLOWED },
630 : { eCSSKeyword_col_resize, NS_STYLE_CURSOR_COL_RESIZE },
631 : { eCSSKeyword_row_resize, NS_STYLE_CURSOR_ROW_RESIZE },
632 : { eCSSKeyword_no_drop, NS_STYLE_CURSOR_NO_DROP },
633 : { eCSSKeyword_vertical_text, NS_STYLE_CURSOR_VERTICAL_TEXT },
634 : { eCSSKeyword_all_scroll, NS_STYLE_CURSOR_ALL_SCROLL },
635 : { eCSSKeyword_nesw_resize, NS_STYLE_CURSOR_NESW_RESIZE },
636 : { eCSSKeyword_nwse_resize, NS_STYLE_CURSOR_NWSE_RESIZE },
637 : { eCSSKeyword_ns_resize, NS_STYLE_CURSOR_NS_RESIZE },
638 : { eCSSKeyword_ew_resize, NS_STYLE_CURSOR_EW_RESIZE },
639 : { eCSSKeyword_none, NS_STYLE_CURSOR_NONE },
640 : { eCSSKeyword_grab, NS_STYLE_CURSOR_GRAB },
641 : { eCSSKeyword_grabbing, NS_STYLE_CURSOR_GRABBING },
642 : { eCSSKeyword_zoom_in, NS_STYLE_CURSOR_ZOOM_IN },
643 : { eCSSKeyword_zoom_out, NS_STYLE_CURSOR_ZOOM_OUT },
644 : // -moz- prefixed vendor specific
645 : { eCSSKeyword__moz_grab, NS_STYLE_CURSOR_GRAB },
646 : { eCSSKeyword__moz_grabbing, NS_STYLE_CURSOR_GRABBING },
647 : { eCSSKeyword__moz_zoom_in, NS_STYLE_CURSOR_ZOOM_IN },
648 : { eCSSKeyword__moz_zoom_out, NS_STYLE_CURSOR_ZOOM_OUT },
649 : { eCSSKeyword_UNKNOWN, -1 }
650 : };
651 :
652 : const KTableEntry nsCSSProps::kDirectionKTable[] = {
653 : { eCSSKeyword_ltr, NS_STYLE_DIRECTION_LTR },
654 : { eCSSKeyword_rtl, NS_STYLE_DIRECTION_RTL },
655 : { eCSSKeyword_UNKNOWN, -1 }
656 : };
657 :
658 : KTableEntry nsCSSProps::kDisplayKTable[] = {
659 : { eCSSKeyword_none, StyleDisplay::None },
660 : { eCSSKeyword_inline, StyleDisplay::Inline },
661 : { eCSSKeyword_block, StyleDisplay::Block },
662 : { eCSSKeyword_inline_block, StyleDisplay::InlineBlock },
663 : { eCSSKeyword_list_item, StyleDisplay::ListItem },
664 : { eCSSKeyword_table, StyleDisplay::Table },
665 : { eCSSKeyword_inline_table, StyleDisplay::InlineTable },
666 : { eCSSKeyword_table_row_group, StyleDisplay::TableRowGroup },
667 : { eCSSKeyword_table_header_group, StyleDisplay::TableHeaderGroup },
668 : { eCSSKeyword_table_footer_group, StyleDisplay::TableFooterGroup },
669 : { eCSSKeyword_table_row, StyleDisplay::TableRow },
670 : { eCSSKeyword_table_column_group, StyleDisplay::TableColumnGroup },
671 : { eCSSKeyword_table_column, StyleDisplay::TableColumn },
672 : { eCSSKeyword_table_cell, StyleDisplay::TableCell },
673 : { eCSSKeyword_table_caption, StyleDisplay::TableCaption },
674 : // Make sure this is kept in sync with the code in
675 : // nsCSSFrameConstructor::ConstructXULFrame
676 : { eCSSKeyword__moz_box, StyleDisplay::MozBox },
677 : { eCSSKeyword__moz_inline_box, StyleDisplay::MozInlineBox },
678 : #ifdef MOZ_XUL
679 : { eCSSKeyword__moz_grid, StyleDisplay::MozGrid },
680 : { eCSSKeyword__moz_inline_grid, StyleDisplay::MozInlineGrid },
681 : { eCSSKeyword__moz_grid_group, StyleDisplay::MozGridGroup },
682 : { eCSSKeyword__moz_grid_line, StyleDisplay::MozGridLine },
683 : { eCSSKeyword__moz_stack, StyleDisplay::MozStack },
684 : { eCSSKeyword__moz_inline_stack, StyleDisplay::MozInlineStack },
685 : { eCSSKeyword__moz_deck, StyleDisplay::MozDeck },
686 : { eCSSKeyword__moz_popup, StyleDisplay::MozPopup },
687 : { eCSSKeyword__moz_groupbox, StyleDisplay::MozGroupbox },
688 : #endif
689 : { eCSSKeyword_flex, StyleDisplay::Flex },
690 : { eCSSKeyword_inline_flex, StyleDisplay::InlineFlex },
691 : { eCSSKeyword_ruby, StyleDisplay::Ruby },
692 : { eCSSKeyword_ruby_base, StyleDisplay::RubyBase },
693 : { eCSSKeyword_ruby_base_container, StyleDisplay::RubyBaseContainer },
694 : { eCSSKeyword_ruby_text, StyleDisplay::RubyText },
695 : { eCSSKeyword_ruby_text_container, StyleDisplay::RubyTextContainer },
696 : { eCSSKeyword_grid, StyleDisplay::Grid },
697 : { eCSSKeyword_inline_grid, StyleDisplay::InlineGrid },
698 : // The next 4 entries are controlled by the layout.css.prefixes.webkit pref.
699 : { eCSSKeyword__webkit_box, StyleDisplay::WebkitBox },
700 : { eCSSKeyword__webkit_inline_box, StyleDisplay::WebkitInlineBox },
701 : { eCSSKeyword__webkit_flex, StyleDisplay::Flex },
702 : { eCSSKeyword__webkit_inline_flex, StyleDisplay::InlineFlex },
703 : { eCSSKeyword_contents, StyleDisplay::Contents },
704 : { eCSSKeyword_flow_root, StyleDisplay::FlowRoot },
705 : { eCSSKeyword_UNKNOWN, -1 }
706 : };
707 :
708 : const KTableEntry nsCSSProps::kEmptyCellsKTable[] = {
709 : { eCSSKeyword_show, NS_STYLE_TABLE_EMPTY_CELLS_SHOW },
710 : { eCSSKeyword_hide, NS_STYLE_TABLE_EMPTY_CELLS_HIDE },
711 : { eCSSKeyword_UNKNOWN, -1 }
712 : };
713 :
714 : const KTableEntry nsCSSProps::kAlignAllKeywords[] = {
715 : { eCSSKeyword_auto, NS_STYLE_ALIGN_AUTO },
716 : { eCSSKeyword_normal, NS_STYLE_ALIGN_NORMAL },
717 : { eCSSKeyword_start, NS_STYLE_ALIGN_START },
718 : { eCSSKeyword_end, NS_STYLE_ALIGN_END },
719 : { eCSSKeyword_flex_start, NS_STYLE_ALIGN_FLEX_START },
720 : { eCSSKeyword_flex_end, NS_STYLE_ALIGN_FLEX_END },
721 : { eCSSKeyword_center, NS_STYLE_ALIGN_CENTER },
722 : { eCSSKeyword_left, NS_STYLE_ALIGN_LEFT },
723 : { eCSSKeyword_right, NS_STYLE_ALIGN_RIGHT },
724 : { eCSSKeyword_baseline, NS_STYLE_ALIGN_BASELINE },
725 : // Also "first/last baseline"; see nsCSSValue::AppendAlignJustifyValueToString
726 : { eCSSKeyword_stretch, NS_STYLE_ALIGN_STRETCH },
727 : { eCSSKeyword_self_start, NS_STYLE_ALIGN_SELF_START },
728 : { eCSSKeyword_self_end, NS_STYLE_ALIGN_SELF_END },
729 : { eCSSKeyword_space_between, NS_STYLE_ALIGN_SPACE_BETWEEN },
730 : { eCSSKeyword_space_around, NS_STYLE_ALIGN_SPACE_AROUND },
731 : { eCSSKeyword_space_evenly, NS_STYLE_ALIGN_SPACE_EVENLY },
732 : { eCSSKeyword_legacy, NS_STYLE_ALIGN_LEGACY },
733 : { eCSSKeyword_safe, NS_STYLE_ALIGN_SAFE },
734 : { eCSSKeyword_unsafe, NS_STYLE_ALIGN_UNSAFE },
735 : { eCSSKeyword_UNKNOWN, -1 }
736 : };
737 :
738 : const KTableEntry nsCSSProps::kAlignOverflowPosition[] = {
739 : { eCSSKeyword_unsafe, NS_STYLE_ALIGN_UNSAFE },
740 : { eCSSKeyword_safe, NS_STYLE_ALIGN_SAFE },
741 : { eCSSKeyword_UNKNOWN, -1 }
742 : };
743 :
744 : const KTableEntry nsCSSProps::kAlignSelfPosition[] = {
745 : { eCSSKeyword_start, NS_STYLE_ALIGN_START },
746 : { eCSSKeyword_end, NS_STYLE_ALIGN_END },
747 : { eCSSKeyword_flex_start, NS_STYLE_ALIGN_FLEX_START },
748 : { eCSSKeyword_flex_end, NS_STYLE_ALIGN_FLEX_END },
749 : { eCSSKeyword_center, NS_STYLE_ALIGN_CENTER },
750 : { eCSSKeyword_left, NS_STYLE_ALIGN_LEFT },
751 : { eCSSKeyword_right, NS_STYLE_ALIGN_RIGHT },
752 : { eCSSKeyword_self_start, NS_STYLE_ALIGN_SELF_START },
753 : { eCSSKeyword_self_end, NS_STYLE_ALIGN_SELF_END },
754 : { eCSSKeyword_UNKNOWN, -1 }
755 : };
756 :
757 : const KTableEntry nsCSSProps::kAlignLegacy[] = {
758 : { eCSSKeyword_legacy, NS_STYLE_ALIGN_LEGACY },
759 : { eCSSKeyword_UNKNOWN, -1 }
760 : };
761 :
762 : const KTableEntry nsCSSProps::kAlignLegacyPosition[] = {
763 : { eCSSKeyword_center, NS_STYLE_ALIGN_CENTER },
764 : { eCSSKeyword_left, NS_STYLE_ALIGN_LEFT },
765 : { eCSSKeyword_right, NS_STYLE_ALIGN_RIGHT },
766 : { eCSSKeyword_UNKNOWN, -1 }
767 : };
768 :
769 : const KTableEntry nsCSSProps::kAlignAutoNormalStretchBaseline[] = {
770 : { eCSSKeyword_auto, NS_STYLE_ALIGN_AUTO },
771 : { eCSSKeyword_normal, NS_STYLE_ALIGN_NORMAL },
772 : { eCSSKeyword_stretch, NS_STYLE_ALIGN_STRETCH },
773 : { eCSSKeyword_baseline, NS_STYLE_ALIGN_BASELINE },
774 : // Also "first baseline" & "last baseline"; see CSSParserImpl::ParseAlignEnum
775 : { eCSSKeyword_UNKNOWN, -1 }
776 : };
777 :
778 : const KTableEntry nsCSSProps::kAlignNormalStretchBaseline[] = {
779 : { eCSSKeyword_normal, NS_STYLE_ALIGN_NORMAL },
780 : { eCSSKeyword_stretch, NS_STYLE_ALIGN_STRETCH },
781 : { eCSSKeyword_baseline, NS_STYLE_ALIGN_BASELINE },
782 : // Also "first baseline" & "last baseline"; see CSSParserImpl::ParseAlignEnum
783 : { eCSSKeyword_UNKNOWN, -1 }
784 : };
785 :
786 : const KTableEntry nsCSSProps::kAlignNormalBaseline[] = {
787 : { eCSSKeyword_normal, NS_STYLE_ALIGN_NORMAL },
788 : { eCSSKeyword_baseline, NS_STYLE_ALIGN_BASELINE },
789 : // Also "first baseline" & "last baseline"; see CSSParserImpl::ParseAlignEnum
790 : { eCSSKeyword_UNKNOWN, -1 }
791 : };
792 :
793 : const KTableEntry nsCSSProps::kAlignContentDistribution[] = {
794 : { eCSSKeyword_stretch, NS_STYLE_ALIGN_STRETCH },
795 : { eCSSKeyword_space_between, NS_STYLE_ALIGN_SPACE_BETWEEN },
796 : { eCSSKeyword_space_around, NS_STYLE_ALIGN_SPACE_AROUND },
797 : { eCSSKeyword_space_evenly, NS_STYLE_ALIGN_SPACE_EVENLY },
798 : { eCSSKeyword_UNKNOWN, -1 }
799 : };
800 :
801 : const KTableEntry nsCSSProps::kAlignContentPosition[] = {
802 : { eCSSKeyword_start, NS_STYLE_ALIGN_START },
803 : { eCSSKeyword_end, NS_STYLE_ALIGN_END },
804 : { eCSSKeyword_flex_start, NS_STYLE_ALIGN_FLEX_START },
805 : { eCSSKeyword_flex_end, NS_STYLE_ALIGN_FLEX_END },
806 : { eCSSKeyword_center, NS_STYLE_ALIGN_CENTER },
807 : { eCSSKeyword_left, NS_STYLE_ALIGN_LEFT },
808 : { eCSSKeyword_right, NS_STYLE_ALIGN_RIGHT },
809 : { eCSSKeyword_UNKNOWN, -1 }
810 : };
811 :
812 : // <NOTE> these are only used for auto-completion, not parsing:
813 : const KTableEntry nsCSSProps::kAutoCompletionAlignJustifySelf[] = {
814 : { eCSSKeyword_auto, NS_STYLE_ALIGN_AUTO },
815 : { eCSSKeyword_normal, NS_STYLE_ALIGN_NORMAL },
816 : { eCSSKeyword_stretch, NS_STYLE_ALIGN_STRETCH },
817 : { eCSSKeyword_baseline, NS_STYLE_ALIGN_BASELINE },
818 : { eCSSKeyword_last_baseline, NS_STYLE_ALIGN_LAST_BASELINE },
819 : { eCSSKeyword_start, NS_STYLE_ALIGN_START },
820 : { eCSSKeyword_end, NS_STYLE_ALIGN_END },
821 : { eCSSKeyword_flex_start, NS_STYLE_ALIGN_FLEX_START },
822 : { eCSSKeyword_flex_end, NS_STYLE_ALIGN_FLEX_END },
823 : { eCSSKeyword_center, NS_STYLE_ALIGN_CENTER },
824 : { eCSSKeyword_left, NS_STYLE_ALIGN_LEFT },
825 : { eCSSKeyword_right, NS_STYLE_ALIGN_RIGHT },
826 : { eCSSKeyword_self_start, NS_STYLE_ALIGN_SELF_START },
827 : { eCSSKeyword_self_end, NS_STYLE_ALIGN_SELF_END },
828 : { eCSSKeyword_UNKNOWN, -1 }
829 : };
830 :
831 : const KTableEntry nsCSSProps::kAutoCompletionAlignItems[] = {
832 : // Intentionally no 'auto' here.
833 : { eCSSKeyword_normal, NS_STYLE_ALIGN_NORMAL },
834 : { eCSSKeyword_stretch, NS_STYLE_ALIGN_STRETCH },
835 : { eCSSKeyword_baseline, NS_STYLE_ALIGN_BASELINE },
836 : { eCSSKeyword_last_baseline, NS_STYLE_ALIGN_LAST_BASELINE },
837 : { eCSSKeyword_start, NS_STYLE_ALIGN_START },
838 : { eCSSKeyword_end, NS_STYLE_ALIGN_END },
839 : { eCSSKeyword_flex_start, NS_STYLE_ALIGN_FLEX_START },
840 : { eCSSKeyword_flex_end, NS_STYLE_ALIGN_FLEX_END },
841 : { eCSSKeyword_center, NS_STYLE_ALIGN_CENTER },
842 : { eCSSKeyword_left, NS_STYLE_ALIGN_LEFT },
843 : { eCSSKeyword_right, NS_STYLE_ALIGN_RIGHT },
844 : { eCSSKeyword_self_start, NS_STYLE_ALIGN_SELF_START },
845 : { eCSSKeyword_self_end, NS_STYLE_ALIGN_SELF_END },
846 : { eCSSKeyword_UNKNOWN, -1 }
847 : };
848 :
849 : const KTableEntry nsCSSProps::kAutoCompletionAlignJustifyContent[] = {
850 : // Intentionally no 'auto' here.
851 : { eCSSKeyword_normal, NS_STYLE_ALIGN_NORMAL },
852 : { eCSSKeyword_baseline, NS_STYLE_ALIGN_BASELINE },
853 : { eCSSKeyword_last_baseline, NS_STYLE_ALIGN_LAST_BASELINE },
854 : { eCSSKeyword_stretch, NS_STYLE_ALIGN_STRETCH },
855 : { eCSSKeyword_space_between, NS_STYLE_ALIGN_SPACE_BETWEEN },
856 : { eCSSKeyword_space_around, NS_STYLE_ALIGN_SPACE_AROUND },
857 : { eCSSKeyword_space_evenly, NS_STYLE_ALIGN_SPACE_EVENLY },
858 : { eCSSKeyword_start, NS_STYLE_ALIGN_START },
859 : { eCSSKeyword_end, NS_STYLE_ALIGN_END },
860 : { eCSSKeyword_flex_start, NS_STYLE_ALIGN_FLEX_START },
861 : { eCSSKeyword_flex_end, NS_STYLE_ALIGN_FLEX_END },
862 : { eCSSKeyword_center, NS_STYLE_ALIGN_CENTER },
863 : { eCSSKeyword_left, NS_STYLE_ALIGN_LEFT },
864 : { eCSSKeyword_right, NS_STYLE_ALIGN_RIGHT },
865 : { eCSSKeyword_UNKNOWN, -1 }
866 : };
867 : // </NOTE>
868 :
869 : const KTableEntry nsCSSProps::kFlexDirectionKTable[] = {
870 : { eCSSKeyword_row, NS_STYLE_FLEX_DIRECTION_ROW },
871 : { eCSSKeyword_row_reverse, NS_STYLE_FLEX_DIRECTION_ROW_REVERSE },
872 : { eCSSKeyword_column, NS_STYLE_FLEX_DIRECTION_COLUMN },
873 : { eCSSKeyword_column_reverse, NS_STYLE_FLEX_DIRECTION_COLUMN_REVERSE },
874 : { eCSSKeyword_UNKNOWN, -1 }
875 : };
876 :
877 : const KTableEntry nsCSSProps::kFlexWrapKTable[] = {
878 : { eCSSKeyword_nowrap, NS_STYLE_FLEX_WRAP_NOWRAP },
879 : { eCSSKeyword_wrap, NS_STYLE_FLEX_WRAP_WRAP },
880 : { eCSSKeyword_wrap_reverse, NS_STYLE_FLEX_WRAP_WRAP_REVERSE },
881 : { eCSSKeyword_UNKNOWN, -1 }
882 : };
883 :
884 : const KTableEntry nsCSSProps::kHyphensKTable[] = {
885 : { eCSSKeyword_none, StyleHyphens::None },
886 : { eCSSKeyword_manual, StyleHyphens::Manual },
887 : { eCSSKeyword_auto, StyleHyphens::Auto },
888 : { eCSSKeyword_UNKNOWN, -1 }
889 : };
890 :
891 : const KTableEntry nsCSSProps::kFloatKTable[] = {
892 : { eCSSKeyword_none, StyleFloat::None },
893 : { eCSSKeyword_left, StyleFloat::Left },
894 : { eCSSKeyword_right, StyleFloat::Right },
895 : { eCSSKeyword_inline_start, StyleFloat::InlineStart },
896 : { eCSSKeyword_inline_end, StyleFloat::InlineEnd },
897 : { eCSSKeyword_UNKNOWN, -1 }
898 : };
899 :
900 : const KTableEntry nsCSSProps::kFloatEdgeKTable[] = {
901 : { eCSSKeyword_content_box, uint8_t(StyleFloatEdge::ContentBox) },
902 : { eCSSKeyword_margin_box, uint8_t(StyleFloatEdge::MarginBox) },
903 : { eCSSKeyword_UNKNOWN, -1 }
904 : };
905 :
906 : const KTableEntry nsCSSProps::kFontKerningKTable[] = {
907 : { eCSSKeyword_auto, NS_FONT_KERNING_AUTO },
908 : { eCSSKeyword_none, NS_FONT_KERNING_NONE },
909 : { eCSSKeyword_normal, NS_FONT_KERNING_NORMAL },
910 : { eCSSKeyword_UNKNOWN, -1 }
911 : };
912 :
913 : const KTableEntry nsCSSProps::kFontOpticalSizingKTable[] = {
914 : { eCSSKeyword_auto, NS_FONT_OPTICAL_SIZING_AUTO },
915 : { eCSSKeyword_none, NS_FONT_OPTICAL_SIZING_NONE },
916 : { eCSSKeyword_UNKNOWN, -1 }
917 : };
918 :
919 : const KTableEntry nsCSSProps::kFontSmoothingKTable[] = {
920 : { eCSSKeyword_auto, NS_FONT_SMOOTHING_AUTO },
921 : { eCSSKeyword_grayscale, NS_FONT_SMOOTHING_GRAYSCALE },
922 : { eCSSKeyword_UNKNOWN, -1 }
923 : };
924 :
925 : const KTableEntry nsCSSProps::kFontSynthesisKTable[] = {
926 : { eCSSKeyword_weight, NS_FONT_SYNTHESIS_WEIGHT },
927 : { eCSSKeyword_style, NS_FONT_SYNTHESIS_STYLE },
928 : { eCSSKeyword_UNKNOWN, -1 }
929 : };
930 :
931 : const KTableEntry nsCSSProps::kFontVariantAlternatesKTable[] = {
932 : { eCSSKeyword_historical_forms, NS_FONT_VARIANT_ALTERNATES_HISTORICAL },
933 : { eCSSKeyword_UNKNOWN, -1 }
934 : };
935 :
936 : const KTableEntry nsCSSProps::kFontVariantAlternatesFuncsKTable[] = {
937 : { eCSSKeyword_stylistic, NS_FONT_VARIANT_ALTERNATES_STYLISTIC },
938 : { eCSSKeyword_styleset, NS_FONT_VARIANT_ALTERNATES_STYLESET },
939 : { eCSSKeyword_character_variant, NS_FONT_VARIANT_ALTERNATES_CHARACTER_VARIANT },
940 : { eCSSKeyword_swash, NS_FONT_VARIANT_ALTERNATES_SWASH },
941 : { eCSSKeyword_ornaments, NS_FONT_VARIANT_ALTERNATES_ORNAMENTS },
942 : { eCSSKeyword_annotation, NS_FONT_VARIANT_ALTERNATES_ANNOTATION },
943 : { eCSSKeyword_UNKNOWN, -1 }
944 : };
945 :
946 : const KTableEntry nsCSSProps::kFontVariantCapsKTable[] = {
947 : { eCSSKeyword_small_caps, NS_FONT_VARIANT_CAPS_SMALLCAPS },
948 : { eCSSKeyword_all_small_caps, NS_FONT_VARIANT_CAPS_ALLSMALL },
949 : { eCSSKeyword_petite_caps, NS_FONT_VARIANT_CAPS_PETITECAPS },
950 : { eCSSKeyword_all_petite_caps, NS_FONT_VARIANT_CAPS_ALLPETITE },
951 : { eCSSKeyword_titling_caps, NS_FONT_VARIANT_CAPS_TITLING },
952 : { eCSSKeyword_unicase, NS_FONT_VARIANT_CAPS_UNICASE },
953 : { eCSSKeyword_UNKNOWN, -1 }
954 : };
955 :
956 : const KTableEntry nsCSSProps::kFontVariantEastAsianKTable[] = {
957 : { eCSSKeyword_jis78, NS_FONT_VARIANT_EAST_ASIAN_JIS78 },
958 : { eCSSKeyword_jis83, NS_FONT_VARIANT_EAST_ASIAN_JIS83 },
959 : { eCSSKeyword_jis90, NS_FONT_VARIANT_EAST_ASIAN_JIS90 },
960 : { eCSSKeyword_jis04, NS_FONT_VARIANT_EAST_ASIAN_JIS04 },
961 : { eCSSKeyword_simplified, NS_FONT_VARIANT_EAST_ASIAN_SIMPLIFIED },
962 : { eCSSKeyword_traditional, NS_FONT_VARIANT_EAST_ASIAN_TRADITIONAL },
963 : { eCSSKeyword_full_width, NS_FONT_VARIANT_EAST_ASIAN_FULL_WIDTH },
964 : { eCSSKeyword_proportional_width, NS_FONT_VARIANT_EAST_ASIAN_PROP_WIDTH },
965 : { eCSSKeyword_ruby, NS_FONT_VARIANT_EAST_ASIAN_RUBY },
966 : { eCSSKeyword_UNKNOWN, -1 }
967 : };
968 :
969 : const KTableEntry nsCSSProps::kFontVariantLigaturesKTable[] = {
970 : { eCSSKeyword_common_ligatures, NS_FONT_VARIANT_LIGATURES_COMMON },
971 : { eCSSKeyword_no_common_ligatures, NS_FONT_VARIANT_LIGATURES_NO_COMMON },
972 : { eCSSKeyword_discretionary_ligatures, NS_FONT_VARIANT_LIGATURES_DISCRETIONARY },
973 : { eCSSKeyword_no_discretionary_ligatures, NS_FONT_VARIANT_LIGATURES_NO_DISCRETIONARY },
974 : { eCSSKeyword_historical_ligatures, NS_FONT_VARIANT_LIGATURES_HISTORICAL },
975 : { eCSSKeyword_no_historical_ligatures, NS_FONT_VARIANT_LIGATURES_NO_HISTORICAL },
976 : { eCSSKeyword_contextual, NS_FONT_VARIANT_LIGATURES_CONTEXTUAL },
977 : { eCSSKeyword_no_contextual, NS_FONT_VARIANT_LIGATURES_NO_CONTEXTUAL },
978 : { eCSSKeyword_UNKNOWN, -1 }
979 : };
980 :
981 : const KTableEntry nsCSSProps::kFontVariantNumericKTable[] = {
982 : { eCSSKeyword_lining_nums, NS_FONT_VARIANT_NUMERIC_LINING },
983 : { eCSSKeyword_oldstyle_nums, NS_FONT_VARIANT_NUMERIC_OLDSTYLE },
984 : { eCSSKeyword_proportional_nums, NS_FONT_VARIANT_NUMERIC_PROPORTIONAL },
985 : { eCSSKeyword_tabular_nums, NS_FONT_VARIANT_NUMERIC_TABULAR },
986 : { eCSSKeyword_diagonal_fractions, NS_FONT_VARIANT_NUMERIC_DIAGONAL_FRACTIONS },
987 : { eCSSKeyword_stacked_fractions, NS_FONT_VARIANT_NUMERIC_STACKED_FRACTIONS },
988 : { eCSSKeyword_slashed_zero, NS_FONT_VARIANT_NUMERIC_SLASHZERO },
989 : { eCSSKeyword_ordinal, NS_FONT_VARIANT_NUMERIC_ORDINAL },
990 : { eCSSKeyword_UNKNOWN, -1 }
991 : };
992 :
993 : const KTableEntry nsCSSProps::kFontVariantPositionKTable[] = {
994 : { eCSSKeyword_super, NS_FONT_VARIANT_POSITION_SUPER },
995 : { eCSSKeyword_sub, NS_FONT_VARIANT_POSITION_SUB },
996 : { eCSSKeyword_UNKNOWN, -1 }
997 : };
998 :
999 : const KTableEntry nsCSSProps::kGridAutoFlowKTable[] = {
1000 : { eCSSKeyword_row, NS_STYLE_GRID_AUTO_FLOW_ROW },
1001 : { eCSSKeyword_column, NS_STYLE_GRID_AUTO_FLOW_COLUMN },
1002 : { eCSSKeyword_dense, NS_STYLE_GRID_AUTO_FLOW_DENSE },
1003 : { eCSSKeyword_UNKNOWN, -1 }
1004 : };
1005 :
1006 : const KTableEntry nsCSSProps::kGridTrackBreadthKTable[] = {
1007 : { eCSSKeyword_min_content, StyleGridTrackBreadth::MinContent },
1008 : { eCSSKeyword_max_content, StyleGridTrackBreadth::MaxContent },
1009 : { eCSSKeyword_UNKNOWN, -1 }
1010 : };
1011 :
1012 : const KTableEntry nsCSSProps::kIsolationKTable[] = {
1013 : { eCSSKeyword_auto, NS_STYLE_ISOLATION_AUTO },
1014 : { eCSSKeyword_isolate, NS_STYLE_ISOLATION_ISOLATE },
1015 : { eCSSKeyword_UNKNOWN, -1 }
1016 : };
1017 :
1018 : const KTableEntry nsCSSProps::kIMEModeKTable[] = {
1019 : { eCSSKeyword_normal, NS_STYLE_IME_MODE_NORMAL },
1020 : { eCSSKeyword_auto, NS_STYLE_IME_MODE_AUTO },
1021 : { eCSSKeyword_active, NS_STYLE_IME_MODE_ACTIVE },
1022 : { eCSSKeyword_disabled, NS_STYLE_IME_MODE_DISABLED },
1023 : { eCSSKeyword_inactive, NS_STYLE_IME_MODE_INACTIVE },
1024 : { eCSSKeyword_UNKNOWN, -1 }
1025 : };
1026 :
1027 : const KTableEntry nsCSSProps::kLineHeightKTable[] = {
1028 : // -moz- prefixed, intended for internal use for single-line controls
1029 : { eCSSKeyword__moz_block_height, NS_STYLE_LINE_HEIGHT_BLOCK_HEIGHT },
1030 : { eCSSKeyword_UNKNOWN, -1 }
1031 : };
1032 :
1033 : const KTableEntry nsCSSProps::kListStylePositionKTable[] = {
1034 : { eCSSKeyword_inside, NS_STYLE_LIST_STYLE_POSITION_INSIDE },
1035 : { eCSSKeyword_outside, NS_STYLE_LIST_STYLE_POSITION_OUTSIDE },
1036 : { eCSSKeyword_UNKNOWN, -1 }
1037 : };
1038 :
1039 : const KTableEntry nsCSSProps::kContainKTable[] = {
1040 : { eCSSKeyword_none, NS_STYLE_CONTAIN_NONE },
1041 : { eCSSKeyword_strict, NS_STYLE_CONTAIN_STRICT },
1042 : { eCSSKeyword_content, NS_STYLE_CONTAIN_CONTENT },
1043 : { eCSSKeyword_layout, NS_STYLE_CONTAIN_LAYOUT },
1044 : { eCSSKeyword_style, NS_STYLE_CONTAIN_STYLE },
1045 : { eCSSKeyword_paint, NS_STYLE_CONTAIN_PAINT },
1046 : { eCSSKeyword_size, NS_STYLE_CONTAIN_SIZE },
1047 : { eCSSKeyword_UNKNOWN, -1 }
1048 : };
1049 :
1050 : const KTableEntry nsCSSProps::kObjectFitKTable[] = {
1051 : { eCSSKeyword_fill, NS_STYLE_OBJECT_FIT_FILL },
1052 : { eCSSKeyword_contain, NS_STYLE_OBJECT_FIT_CONTAIN },
1053 : { eCSSKeyword_cover, NS_STYLE_OBJECT_FIT_COVER },
1054 : { eCSSKeyword_none, NS_STYLE_OBJECT_FIT_NONE },
1055 : { eCSSKeyword_scale_down, NS_STYLE_OBJECT_FIT_SCALE_DOWN },
1056 : { eCSSKeyword_UNKNOWN, -1 }
1057 : };
1058 :
1059 : const KTableEntry nsCSSProps::kOrientKTable[] = {
1060 : { eCSSKeyword_inline, StyleOrient::Inline },
1061 : { eCSSKeyword_block, StyleOrient::Block },
1062 : { eCSSKeyword_horizontal, StyleOrient::Horizontal },
1063 : { eCSSKeyword_vertical, StyleOrient::Vertical },
1064 : { eCSSKeyword_UNKNOWN, -1 }
1065 : };
1066 :
1067 : // Same as kBorderStyleKTable except 'hidden'.
1068 : const KTableEntry nsCSSProps::kOutlineStyleKTable[] = {
1069 : { eCSSKeyword_none, NS_STYLE_BORDER_STYLE_NONE },
1070 : { eCSSKeyword_auto, NS_STYLE_BORDER_STYLE_AUTO },
1071 : { eCSSKeyword_dotted, NS_STYLE_BORDER_STYLE_DOTTED },
1072 : { eCSSKeyword_dashed, NS_STYLE_BORDER_STYLE_DASHED },
1073 : { eCSSKeyword_solid, NS_STYLE_BORDER_STYLE_SOLID },
1074 : { eCSSKeyword_double, NS_STYLE_BORDER_STYLE_DOUBLE },
1075 : { eCSSKeyword_groove, NS_STYLE_BORDER_STYLE_GROOVE },
1076 : { eCSSKeyword_ridge, NS_STYLE_BORDER_STYLE_RIDGE },
1077 : { eCSSKeyword_inset, NS_STYLE_BORDER_STYLE_INSET },
1078 : { eCSSKeyword_outset, NS_STYLE_BORDER_STYLE_OUTSET },
1079 : { eCSSKeyword_UNKNOWN, -1 }
1080 : };
1081 :
1082 : const KTableEntry nsCSSProps::kOverflowKTable[] = {
1083 : { eCSSKeyword_auto, NS_STYLE_OVERFLOW_AUTO },
1084 : { eCSSKeyword_visible, NS_STYLE_OVERFLOW_VISIBLE },
1085 : { eCSSKeyword_hidden, NS_STYLE_OVERFLOW_HIDDEN },
1086 : { eCSSKeyword_scroll, NS_STYLE_OVERFLOW_SCROLL },
1087 : // Deprecated:
1088 : { eCSSKeyword__moz_scrollbars_none, NS_STYLE_OVERFLOW_HIDDEN },
1089 : { eCSSKeyword__moz_scrollbars_horizontal, NS_STYLE_OVERFLOW_SCROLLBARS_HORIZONTAL },
1090 : { eCSSKeyword__moz_scrollbars_vertical, NS_STYLE_OVERFLOW_SCROLLBARS_VERTICAL },
1091 : { eCSSKeyword__moz_hidden_unscrollable, NS_STYLE_OVERFLOW_CLIP },
1092 : { eCSSKeyword_UNKNOWN, -1 }
1093 : };
1094 :
1095 : const KTableEntry nsCSSProps::kOverflowClipBoxKTable[] = {
1096 : { eCSSKeyword_padding_box, NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX },
1097 : { eCSSKeyword_content_box, NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX },
1098 : { eCSSKeyword_UNKNOWN, -1 }
1099 : };
1100 :
1101 : const KTableEntry nsCSSProps::kOverflowSubKTable[] = {
1102 : { eCSSKeyword_auto, NS_STYLE_OVERFLOW_AUTO },
1103 : { eCSSKeyword_visible, NS_STYLE_OVERFLOW_VISIBLE },
1104 : { eCSSKeyword_hidden, NS_STYLE_OVERFLOW_HIDDEN },
1105 : { eCSSKeyword_scroll, NS_STYLE_OVERFLOW_SCROLL },
1106 : // Deprecated:
1107 : { eCSSKeyword__moz_hidden_unscrollable, NS_STYLE_OVERFLOW_CLIP },
1108 : { eCSSKeyword_UNKNOWN, -1 }
1109 : };
1110 :
1111 : const KTableEntry nsCSSProps::kPageBreakInsideKTable[] = {
1112 : { eCSSKeyword_auto, NS_STYLE_PAGE_BREAK_AUTO },
1113 : { eCSSKeyword_avoid, NS_STYLE_PAGE_BREAK_AVOID },
1114 : { eCSSKeyword_UNKNOWN, -1 }
1115 : };
1116 :
1117 : const KTableEntry nsCSSProps::kPointerEventsKTable[] = {
1118 : { eCSSKeyword_none, NS_STYLE_POINTER_EVENTS_NONE },
1119 : { eCSSKeyword_visiblepainted, NS_STYLE_POINTER_EVENTS_VISIBLEPAINTED },
1120 : { eCSSKeyword_visiblefill, NS_STYLE_POINTER_EVENTS_VISIBLEFILL },
1121 : { eCSSKeyword_visiblestroke, NS_STYLE_POINTER_EVENTS_VISIBLESTROKE },
1122 : { eCSSKeyword_visible, NS_STYLE_POINTER_EVENTS_VISIBLE },
1123 : { eCSSKeyword_painted, NS_STYLE_POINTER_EVENTS_PAINTED },
1124 : { eCSSKeyword_fill, NS_STYLE_POINTER_EVENTS_FILL },
1125 : { eCSSKeyword_stroke, NS_STYLE_POINTER_EVENTS_STROKE },
1126 : { eCSSKeyword_all, NS_STYLE_POINTER_EVENTS_ALL },
1127 : { eCSSKeyword_auto, NS_STYLE_POINTER_EVENTS_AUTO },
1128 : { eCSSKeyword_UNKNOWN, -1 }
1129 : };
1130 :
1131 : const KTableEntry nsCSSProps::kPositionKTable[] = {
1132 : { eCSSKeyword_static, NS_STYLE_POSITION_STATIC },
1133 : { eCSSKeyword_relative, NS_STYLE_POSITION_RELATIVE },
1134 : { eCSSKeyword_absolute, NS_STYLE_POSITION_ABSOLUTE },
1135 : { eCSSKeyword_fixed, NS_STYLE_POSITION_FIXED },
1136 : { eCSSKeyword_sticky, NS_STYLE_POSITION_STICKY },
1137 : { eCSSKeyword_UNKNOWN, -1 }
1138 : };
1139 :
1140 : const KTableEntry nsCSSProps::kRadialGradientSizeKTable[] = {
1141 : { eCSSKeyword_closest_side, NS_STYLE_GRADIENT_SIZE_CLOSEST_SIDE },
1142 : { eCSSKeyword_closest_corner, NS_STYLE_GRADIENT_SIZE_CLOSEST_CORNER },
1143 : { eCSSKeyword_farthest_side, NS_STYLE_GRADIENT_SIZE_FARTHEST_SIDE },
1144 : { eCSSKeyword_farthest_corner, NS_STYLE_GRADIENT_SIZE_FARTHEST_CORNER },
1145 : { eCSSKeyword_UNKNOWN, -1 }
1146 : };
1147 :
1148 : const KTableEntry nsCSSProps::kResizeKTable[] = {
1149 : { eCSSKeyword_none, NS_STYLE_RESIZE_NONE },
1150 : { eCSSKeyword_both, NS_STYLE_RESIZE_BOTH },
1151 : { eCSSKeyword_horizontal, NS_STYLE_RESIZE_HORIZONTAL },
1152 : { eCSSKeyword_vertical, NS_STYLE_RESIZE_VERTICAL },
1153 : { eCSSKeyword_UNKNOWN, -1 }
1154 : };
1155 :
1156 : const KTableEntry nsCSSProps::kRubyAlignKTable[] = {
1157 : { eCSSKeyword_start, NS_STYLE_RUBY_ALIGN_START },
1158 : { eCSSKeyword_center, NS_STYLE_RUBY_ALIGN_CENTER },
1159 : { eCSSKeyword_space_between, NS_STYLE_RUBY_ALIGN_SPACE_BETWEEN },
1160 : { eCSSKeyword_space_around, NS_STYLE_RUBY_ALIGN_SPACE_AROUND },
1161 : { eCSSKeyword_UNKNOWN, -1 }
1162 : };
1163 :
1164 : const KTableEntry nsCSSProps::kRubyPositionKTable[] = {
1165 : { eCSSKeyword_over, NS_STYLE_RUBY_POSITION_OVER },
1166 : { eCSSKeyword_under, NS_STYLE_RUBY_POSITION_UNDER },
1167 : // bug 1055672 for 'inter-character' support
1168 : // { eCSSKeyword_inter_character, NS_STYLE_RUBY_POSITION_INTER_CHARACTER },
1169 : { eCSSKeyword_UNKNOWN, -1 }
1170 : };
1171 :
1172 : const KTableEntry nsCSSProps::kScrollBehaviorKTable[] = {
1173 : { eCSSKeyword_auto, NS_STYLE_SCROLL_BEHAVIOR_AUTO },
1174 : { eCSSKeyword_smooth, NS_STYLE_SCROLL_BEHAVIOR_SMOOTH },
1175 : { eCSSKeyword_UNKNOWN, -1 }
1176 : };
1177 :
1178 : const KTableEntry nsCSSProps::kOverscrollBehaviorKTable[] = {
1179 : { eCSSKeyword_auto, StyleOverscrollBehavior::Auto },
1180 : { eCSSKeyword_contain, StyleOverscrollBehavior::Contain },
1181 : { eCSSKeyword_none, StyleOverscrollBehavior::None },
1182 : { eCSSKeyword_UNKNOWN, -1 }
1183 : };
1184 :
1185 : const KTableEntry nsCSSProps::kScrollSnapTypeKTable[] = {
1186 : { eCSSKeyword_none, NS_STYLE_SCROLL_SNAP_TYPE_NONE },
1187 : { eCSSKeyword_mandatory, NS_STYLE_SCROLL_SNAP_TYPE_MANDATORY },
1188 : { eCSSKeyword_proximity, NS_STYLE_SCROLL_SNAP_TYPE_PROXIMITY },
1189 : { eCSSKeyword_UNKNOWN, -1 }
1190 : };
1191 :
1192 : const KTableEntry nsCSSProps::kStackSizingKTable[] = {
1193 : { eCSSKeyword_ignore, StyleStackSizing::Ignore },
1194 : { eCSSKeyword_stretch_to_fit, StyleStackSizing::StretchToFit },
1195 : { eCSSKeyword_ignore_horizontal, StyleStackSizing::IgnoreHorizontal },
1196 : { eCSSKeyword_ignore_vertical, StyleStackSizing::IgnoreVertical },
1197 : { eCSSKeyword_UNKNOWN, -1 }
1198 : };
1199 :
1200 : const KTableEntry nsCSSProps::kTableLayoutKTable[] = {
1201 : { eCSSKeyword_auto, NS_STYLE_TABLE_LAYOUT_AUTO },
1202 : { eCSSKeyword_fixed, NS_STYLE_TABLE_LAYOUT_FIXED },
1203 : { eCSSKeyword_UNKNOWN, -1 }
1204 : };
1205 :
1206 : KTableEntry nsCSSProps::kTextAlignKTable[] = {
1207 : { eCSSKeyword_left, NS_STYLE_TEXT_ALIGN_LEFT },
1208 : { eCSSKeyword_right, NS_STYLE_TEXT_ALIGN_RIGHT },
1209 : { eCSSKeyword_center, NS_STYLE_TEXT_ALIGN_CENTER },
1210 : { eCSSKeyword_justify, NS_STYLE_TEXT_ALIGN_JUSTIFY },
1211 : { eCSSKeyword__moz_center, NS_STYLE_TEXT_ALIGN_MOZ_CENTER },
1212 : { eCSSKeyword__moz_right, NS_STYLE_TEXT_ALIGN_MOZ_RIGHT },
1213 : { eCSSKeyword__moz_left, NS_STYLE_TEXT_ALIGN_MOZ_LEFT },
1214 : { eCSSKeyword_start, NS_STYLE_TEXT_ALIGN_START },
1215 : { eCSSKeyword_end, NS_STYLE_TEXT_ALIGN_END },
1216 : { eCSSKeyword_unsafe, NS_STYLE_TEXT_ALIGN_UNSAFE },
1217 : { eCSSKeyword_match_parent, NS_STYLE_TEXT_ALIGN_MATCH_PARENT },
1218 : { eCSSKeyword_UNKNOWN, -1 }
1219 : };
1220 :
1221 : KTableEntry nsCSSProps::kTextAlignLastKTable[] = {
1222 : { eCSSKeyword_auto, NS_STYLE_TEXT_ALIGN_AUTO },
1223 : { eCSSKeyword_left, NS_STYLE_TEXT_ALIGN_LEFT },
1224 : { eCSSKeyword_right, NS_STYLE_TEXT_ALIGN_RIGHT },
1225 : { eCSSKeyword_center, NS_STYLE_TEXT_ALIGN_CENTER },
1226 : { eCSSKeyword_justify, NS_STYLE_TEXT_ALIGN_JUSTIFY },
1227 : { eCSSKeyword_start, NS_STYLE_TEXT_ALIGN_START },
1228 : { eCSSKeyword_end, NS_STYLE_TEXT_ALIGN_END },
1229 : { eCSSKeyword_unsafe, NS_STYLE_TEXT_ALIGN_UNSAFE },
1230 : { eCSSKeyword_UNKNOWN, -1 }
1231 : };
1232 :
1233 : const KTableEntry nsCSSProps::kTextJustifyKTable[] = {
1234 : { eCSSKeyword_none, StyleTextJustify::None },
1235 : { eCSSKeyword_auto, StyleTextJustify::Auto },
1236 : { eCSSKeyword_inter_word, StyleTextJustify::InterWord },
1237 : { eCSSKeyword_inter_character, StyleTextJustify::InterCharacter },
1238 : // For legacy reasons, UAs must also support the keyword "distribute" with
1239 : // the exact same meaning and behavior as "inter-character".
1240 : { eCSSKeyword_distribute, StyleTextJustify::InterCharacter },
1241 : { eCSSKeyword_UNKNOWN, -1 }
1242 : };
1243 :
1244 : const KTableEntry nsCSSProps::kTextCombineUprightKTable[] = {
1245 : { eCSSKeyword_none, NS_STYLE_TEXT_COMBINE_UPRIGHT_NONE },
1246 : { eCSSKeyword_all, NS_STYLE_TEXT_COMBINE_UPRIGHT_ALL },
1247 : { eCSSKeyword_UNKNOWN, -1 }
1248 : };
1249 :
1250 : const KTableEntry nsCSSProps::kTextDecorationLineKTable[] = {
1251 : { eCSSKeyword_none, NS_STYLE_TEXT_DECORATION_LINE_NONE },
1252 : { eCSSKeyword_underline, NS_STYLE_TEXT_DECORATION_LINE_UNDERLINE },
1253 : { eCSSKeyword_overline, NS_STYLE_TEXT_DECORATION_LINE_OVERLINE },
1254 : { eCSSKeyword_line_through, NS_STYLE_TEXT_DECORATION_LINE_LINE_THROUGH },
1255 : { eCSSKeyword_blink, NS_STYLE_TEXT_DECORATION_LINE_BLINK },
1256 : { eCSSKeyword_UNKNOWN, -1 }
1257 : };
1258 :
1259 : const KTableEntry nsCSSProps::kTextDecorationStyleKTable[] = {
1260 : { eCSSKeyword__moz_none, NS_STYLE_TEXT_DECORATION_STYLE_NONE },
1261 : { eCSSKeyword_solid, NS_STYLE_TEXT_DECORATION_STYLE_SOLID },
1262 : { eCSSKeyword_double, NS_STYLE_TEXT_DECORATION_STYLE_DOUBLE },
1263 : { eCSSKeyword_dotted, NS_STYLE_TEXT_DECORATION_STYLE_DOTTED },
1264 : { eCSSKeyword_dashed, NS_STYLE_TEXT_DECORATION_STYLE_DASHED },
1265 : { eCSSKeyword_wavy, NS_STYLE_TEXT_DECORATION_STYLE_WAVY },
1266 : { eCSSKeyword_UNKNOWN, -1 }
1267 : };
1268 :
1269 : const KTableEntry nsCSSProps::kTextOrientationKTable[] = {
1270 : { eCSSKeyword_mixed, NS_STYLE_TEXT_ORIENTATION_MIXED },
1271 : { eCSSKeyword_upright, NS_STYLE_TEXT_ORIENTATION_UPRIGHT },
1272 : { eCSSKeyword_sideways, NS_STYLE_TEXT_ORIENTATION_SIDEWAYS },
1273 : { eCSSKeyword_sideways_right, NS_STYLE_TEXT_ORIENTATION_SIDEWAYS },
1274 : { eCSSKeyword_UNKNOWN, -1 }
1275 : };
1276 :
1277 : const KTableEntry nsCSSProps::kTextEmphasisStyleShapeKTable[] = {
1278 : { eCSSKeyword_dot, NS_STYLE_TEXT_EMPHASIS_STYLE_DOT },
1279 : { eCSSKeyword_circle, NS_STYLE_TEXT_EMPHASIS_STYLE_CIRCLE },
1280 : { eCSSKeyword_double_circle, NS_STYLE_TEXT_EMPHASIS_STYLE_DOUBLE_CIRCLE },
1281 : { eCSSKeyword_triangle, NS_STYLE_TEXT_EMPHASIS_STYLE_TRIANGLE },
1282 : { eCSSKeyword_sesame, NS_STYLE_TEXT_EMPHASIS_STYLE_SESAME} ,
1283 : { eCSSKeyword_UNKNOWN, -1 }
1284 : };
1285 :
1286 : const KTableEntry nsCSSProps::kTextOverflowKTable[] = {
1287 : { eCSSKeyword_clip, NS_STYLE_TEXT_OVERFLOW_CLIP },
1288 : { eCSSKeyword_ellipsis, NS_STYLE_TEXT_OVERFLOW_ELLIPSIS },
1289 : { eCSSKeyword_UNKNOWN, -1 }
1290 : };
1291 :
1292 : const KTableEntry nsCSSProps::kTextSizeAdjustKTable[] = {
1293 : { eCSSKeyword_none, NS_STYLE_TEXT_SIZE_ADJUST_NONE },
1294 : { eCSSKeyword_auto, NS_STYLE_TEXT_SIZE_ADJUST_AUTO },
1295 : { eCSSKeyword_UNKNOWN, -1 }
1296 : };
1297 :
1298 : const KTableEntry nsCSSProps::kTextTransformKTable[] = {
1299 : { eCSSKeyword_none, NS_STYLE_TEXT_TRANSFORM_NONE },
1300 : { eCSSKeyword_capitalize, NS_STYLE_TEXT_TRANSFORM_CAPITALIZE },
1301 : { eCSSKeyword_lowercase, NS_STYLE_TEXT_TRANSFORM_LOWERCASE },
1302 : { eCSSKeyword_uppercase, NS_STYLE_TEXT_TRANSFORM_UPPERCASE },
1303 : { eCSSKeyword_full_width, NS_STYLE_TEXT_TRANSFORM_FULL_WIDTH },
1304 : { eCSSKeyword_UNKNOWN, -1 }
1305 : };
1306 :
1307 : const KTableEntry nsCSSProps::kTouchActionKTable[] = {
1308 : { eCSSKeyword_none, NS_STYLE_TOUCH_ACTION_NONE },
1309 : { eCSSKeyword_auto, NS_STYLE_TOUCH_ACTION_AUTO },
1310 : { eCSSKeyword_pan_x, NS_STYLE_TOUCH_ACTION_PAN_X },
1311 : { eCSSKeyword_pan_y, NS_STYLE_TOUCH_ACTION_PAN_Y },
1312 : { eCSSKeyword_manipulation, NS_STYLE_TOUCH_ACTION_MANIPULATION },
1313 : { eCSSKeyword_UNKNOWN, -1 }
1314 : };
1315 :
1316 : const KTableEntry nsCSSProps::kTransformBoxKTable[] = {
1317 : { eCSSKeyword_border_box, StyleGeometryBox::BorderBox },
1318 : { eCSSKeyword_fill_box, StyleGeometryBox::FillBox },
1319 : { eCSSKeyword_view_box, StyleGeometryBox::ViewBox },
1320 : { eCSSKeyword_UNKNOWN, -1 }
1321 : };
1322 :
1323 : const KTableEntry nsCSSProps::kTransitionTimingFunctionKTable[] = {
1324 : { eCSSKeyword_ease, NS_STYLE_TRANSITION_TIMING_FUNCTION_EASE },
1325 : { eCSSKeyword_linear, NS_STYLE_TRANSITION_TIMING_FUNCTION_LINEAR },
1326 : { eCSSKeyword_ease_in, NS_STYLE_TRANSITION_TIMING_FUNCTION_EASE_IN },
1327 : { eCSSKeyword_ease_out, NS_STYLE_TRANSITION_TIMING_FUNCTION_EASE_OUT },
1328 : { eCSSKeyword_ease_in_out, NS_STYLE_TRANSITION_TIMING_FUNCTION_EASE_IN_OUT },
1329 : { eCSSKeyword_step_start, NS_STYLE_TRANSITION_TIMING_FUNCTION_STEP_START },
1330 : { eCSSKeyword_step_end, NS_STYLE_TRANSITION_TIMING_FUNCTION_STEP_END },
1331 : { eCSSKeyword_UNKNOWN, -1 }
1332 : };
1333 :
1334 : const KTableEntry nsCSSProps::kUnicodeBidiKTable[] = {
1335 : { eCSSKeyword_normal, NS_STYLE_UNICODE_BIDI_NORMAL },
1336 : { eCSSKeyword_embed, NS_STYLE_UNICODE_BIDI_EMBED },
1337 : { eCSSKeyword_bidi_override, NS_STYLE_UNICODE_BIDI_BIDI_OVERRIDE },
1338 : { eCSSKeyword_isolate, NS_STYLE_UNICODE_BIDI_ISOLATE },
1339 : { eCSSKeyword_isolate_override, NS_STYLE_UNICODE_BIDI_ISOLATE_OVERRIDE },
1340 : { eCSSKeyword_plaintext, NS_STYLE_UNICODE_BIDI_PLAINTEXT },
1341 : { eCSSKeyword_UNKNOWN, -1 }
1342 : };
1343 :
1344 : const KTableEntry nsCSSProps::kUserFocusKTable[] = {
1345 : { eCSSKeyword_none, uint8_t(StyleUserFocus::None) },
1346 : { eCSSKeyword_normal, uint8_t(StyleUserFocus::Normal) },
1347 : { eCSSKeyword_ignore, uint8_t(StyleUserFocus::Ignore) },
1348 : { eCSSKeyword_select_all, uint8_t(StyleUserFocus::SelectAll) },
1349 : { eCSSKeyword_select_before, uint8_t(StyleUserFocus::SelectBefore) },
1350 : { eCSSKeyword_select_after, uint8_t(StyleUserFocus::SelectAfter) },
1351 : { eCSSKeyword_select_same, uint8_t(StyleUserFocus::SelectSame) },
1352 : { eCSSKeyword_select_menu, uint8_t(StyleUserFocus::SelectMenu) },
1353 : { eCSSKeyword_UNKNOWN, -1 }
1354 : };
1355 :
1356 : const KTableEntry nsCSSProps::kUserInputKTable[] = {
1357 : { eCSSKeyword_none, StyleUserInput::None },
1358 : { eCSSKeyword_auto, StyleUserInput::Auto },
1359 : { eCSSKeyword_UNKNOWN, -1 }
1360 : };
1361 :
1362 : const KTableEntry nsCSSProps::kUserModifyKTable[] = {
1363 : { eCSSKeyword_read_only, StyleUserModify::ReadOnly },
1364 : { eCSSKeyword_read_write, StyleUserModify::ReadWrite },
1365 : { eCSSKeyword_write_only, StyleUserModify::WriteOnly },
1366 : { eCSSKeyword_UNKNOWN, -1 }
1367 : };
1368 :
1369 : const KTableEntry nsCSSProps::kUserSelectKTable[] = {
1370 : { eCSSKeyword_none, StyleUserSelect::None },
1371 : { eCSSKeyword_auto, StyleUserSelect::Auto },
1372 : { eCSSKeyword_text, StyleUserSelect::Text },
1373 : { eCSSKeyword_element, StyleUserSelect::Element },
1374 : { eCSSKeyword_elements, StyleUserSelect::Elements },
1375 : { eCSSKeyword_all, StyleUserSelect::All },
1376 : { eCSSKeyword_toggle, StyleUserSelect::Toggle },
1377 : { eCSSKeyword_tri_state, StyleUserSelect::TriState },
1378 : { eCSSKeyword__moz_all, StyleUserSelect::MozAll },
1379 : { eCSSKeyword__moz_none, StyleUserSelect::None },
1380 : { eCSSKeyword__moz_text, StyleUserSelect::MozText },
1381 : { eCSSKeyword_UNKNOWN, -1 }
1382 : };
1383 :
1384 : const KTableEntry nsCSSProps::kVerticalAlignKTable[] = {
1385 : { eCSSKeyword_baseline, NS_STYLE_VERTICAL_ALIGN_BASELINE },
1386 : { eCSSKeyword_sub, NS_STYLE_VERTICAL_ALIGN_SUB },
1387 : { eCSSKeyword_super, NS_STYLE_VERTICAL_ALIGN_SUPER },
1388 : { eCSSKeyword_top, NS_STYLE_VERTICAL_ALIGN_TOP },
1389 : { eCSSKeyword_text_top, NS_STYLE_VERTICAL_ALIGN_TEXT_TOP },
1390 : { eCSSKeyword_middle, NS_STYLE_VERTICAL_ALIGN_MIDDLE },
1391 : { eCSSKeyword__moz_middle_with_baseline, NS_STYLE_VERTICAL_ALIGN_MIDDLE_WITH_BASELINE },
1392 : { eCSSKeyword_bottom, NS_STYLE_VERTICAL_ALIGN_BOTTOM },
1393 : { eCSSKeyword_text_bottom, NS_STYLE_VERTICAL_ALIGN_TEXT_BOTTOM },
1394 : { eCSSKeyword_UNKNOWN, -1 }
1395 : };
1396 :
1397 : const KTableEntry nsCSSProps::kVisibilityKTable[] = {
1398 : { eCSSKeyword_visible, NS_STYLE_VISIBILITY_VISIBLE },
1399 : { eCSSKeyword_hidden, NS_STYLE_VISIBILITY_HIDDEN },
1400 : { eCSSKeyword_collapse, NS_STYLE_VISIBILITY_COLLAPSE },
1401 : { eCSSKeyword_UNKNOWN, -1 }
1402 : };
1403 :
1404 : const KTableEntry nsCSSProps::kWhitespaceKTable[] = {
1405 : { eCSSKeyword_normal, StyleWhiteSpace::Normal },
1406 : { eCSSKeyword_pre, StyleWhiteSpace::Pre },
1407 : { eCSSKeyword_nowrap, StyleWhiteSpace::Nowrap },
1408 : { eCSSKeyword_pre_wrap, StyleWhiteSpace::PreWrap },
1409 : { eCSSKeyword_pre_line, StyleWhiteSpace::PreLine },
1410 : { eCSSKeyword__moz_pre_space, StyleWhiteSpace::PreSpace },
1411 : { eCSSKeyword_UNKNOWN, -1 }
1412 : };
1413 :
1414 : const KTableEntry nsCSSProps::kWidthKTable[] = {
1415 : { eCSSKeyword__moz_max_content, NS_STYLE_WIDTH_MAX_CONTENT },
1416 : { eCSSKeyword__moz_min_content, NS_STYLE_WIDTH_MIN_CONTENT },
1417 : { eCSSKeyword__moz_fit_content, NS_STYLE_WIDTH_FIT_CONTENT },
1418 : { eCSSKeyword__moz_available, NS_STYLE_WIDTH_AVAILABLE },
1419 : { eCSSKeyword_UNKNOWN, -1 }
1420 : };
1421 :
1422 : // This must be the same as kWidthKTable, but just with 'content' added:
1423 : const KTableEntry nsCSSProps::kFlexBasisKTable[] = {
1424 : { eCSSKeyword__moz_max_content, NS_STYLE_WIDTH_MAX_CONTENT },
1425 : { eCSSKeyword__moz_min_content, NS_STYLE_WIDTH_MIN_CONTENT },
1426 : { eCSSKeyword__moz_fit_content, NS_STYLE_WIDTH_FIT_CONTENT },
1427 : { eCSSKeyword__moz_available, NS_STYLE_WIDTH_AVAILABLE },
1428 : { eCSSKeyword_content, NS_STYLE_FLEX_BASIS_CONTENT },
1429 : { eCSSKeyword_UNKNOWN, -1 }
1430 : };
1431 : static_assert(ArrayLength(nsCSSProps::kFlexBasisKTable) ==
1432 : ArrayLength(nsCSSProps::kWidthKTable) + 1,
1433 : "kFlexBasisKTable should have the same entries as "
1434 : "kWidthKTable, plus one more for 'content'");
1435 :
1436 : const KTableEntry nsCSSProps::kWindowDraggingKTable[] = {
1437 : { eCSSKeyword_default, StyleWindowDragging::Default },
1438 : { eCSSKeyword_drag, StyleWindowDragging::Drag },
1439 : { eCSSKeyword_no_drag, StyleWindowDragging::NoDrag },
1440 : { eCSSKeyword_UNKNOWN, -1 }
1441 : };
1442 :
1443 : const KTableEntry nsCSSProps::kWindowShadowKTable[] = {
1444 : { eCSSKeyword_none, NS_STYLE_WINDOW_SHADOW_NONE },
1445 : { eCSSKeyword_default, NS_STYLE_WINDOW_SHADOW_DEFAULT },
1446 : { eCSSKeyword_menu, NS_STYLE_WINDOW_SHADOW_MENU },
1447 : { eCSSKeyword_tooltip, NS_STYLE_WINDOW_SHADOW_TOOLTIP },
1448 : { eCSSKeyword_sheet, NS_STYLE_WINDOW_SHADOW_SHEET },
1449 : { eCSSKeyword_UNKNOWN, -1 }
1450 : };
1451 :
1452 : const KTableEntry nsCSSProps::kWordBreakKTable[] = {
1453 : { eCSSKeyword_normal, NS_STYLE_WORDBREAK_NORMAL },
1454 : { eCSSKeyword_break_all, NS_STYLE_WORDBREAK_BREAK_ALL },
1455 : { eCSSKeyword_keep_all, NS_STYLE_WORDBREAK_KEEP_ALL },
1456 : { eCSSKeyword_UNKNOWN, -1 }
1457 : };
1458 :
1459 : const KTableEntry nsCSSProps::kOverflowWrapKTable[] = {
1460 : { eCSSKeyword_normal, NS_STYLE_OVERFLOWWRAP_NORMAL },
1461 : { eCSSKeyword_break_word, NS_STYLE_OVERFLOWWRAP_BREAK_WORD },
1462 : { eCSSKeyword_UNKNOWN, -1 }
1463 : };
1464 :
1465 : const KTableEntry nsCSSProps::kWritingModeKTable[] = {
1466 : { eCSSKeyword_horizontal_tb, NS_STYLE_WRITING_MODE_HORIZONTAL_TB },
1467 : { eCSSKeyword_vertical_lr, NS_STYLE_WRITING_MODE_VERTICAL_LR },
1468 : { eCSSKeyword_vertical_rl, NS_STYLE_WRITING_MODE_VERTICAL_RL },
1469 : { eCSSKeyword_sideways_lr, NS_STYLE_WRITING_MODE_SIDEWAYS_LR },
1470 : { eCSSKeyword_sideways_rl, NS_STYLE_WRITING_MODE_SIDEWAYS_RL },
1471 : { eCSSKeyword_lr, NS_STYLE_WRITING_MODE_HORIZONTAL_TB },
1472 : { eCSSKeyword_lr_tb, NS_STYLE_WRITING_MODE_HORIZONTAL_TB },
1473 : { eCSSKeyword_rl, NS_STYLE_WRITING_MODE_HORIZONTAL_TB },
1474 : { eCSSKeyword_rl_tb, NS_STYLE_WRITING_MODE_HORIZONTAL_TB },
1475 : { eCSSKeyword_tb, NS_STYLE_WRITING_MODE_VERTICAL_RL },
1476 : { eCSSKeyword_tb_rl, NS_STYLE_WRITING_MODE_VERTICAL_RL },
1477 : { eCSSKeyword_UNKNOWN, -1 }
1478 : };
1479 :
1480 : // Specific keyword tables for XUL.properties
1481 : const KTableEntry nsCSSProps::kBoxAlignKTable[] = {
1482 : { eCSSKeyword_stretch, StyleBoxAlign::Stretch },
1483 : { eCSSKeyword_start, StyleBoxAlign::Start },
1484 : { eCSSKeyword_center, StyleBoxAlign::Center },
1485 : { eCSSKeyword_baseline, StyleBoxAlign::Baseline },
1486 : { eCSSKeyword_end, StyleBoxAlign::End },
1487 : { eCSSKeyword_UNKNOWN, -1 }
1488 : };
1489 :
1490 : const KTableEntry nsCSSProps::kBoxDirectionKTable[] = {
1491 : { eCSSKeyword_normal, StyleBoxDirection::Normal },
1492 : { eCSSKeyword_reverse, StyleBoxDirection::Reverse },
1493 : { eCSSKeyword_UNKNOWN, -1 }
1494 : };
1495 :
1496 : const KTableEntry nsCSSProps::kBoxOrientKTable[] = {
1497 : { eCSSKeyword_horizontal, StyleBoxOrient::Horizontal },
1498 : { eCSSKeyword_vertical, StyleBoxOrient::Vertical },
1499 : { eCSSKeyword_inline_axis, StyleBoxOrient::Horizontal },
1500 : { eCSSKeyword_block_axis, StyleBoxOrient::Vertical },
1501 : { eCSSKeyword_UNKNOWN, -1 }
1502 : };
1503 :
1504 : const KTableEntry nsCSSProps::kBoxPackKTable[] = {
1505 : { eCSSKeyword_start, StyleBoxPack::Start },
1506 : { eCSSKeyword_center, StyleBoxPack::Center },
1507 : { eCSSKeyword_end, StyleBoxPack::End },
1508 : { eCSSKeyword_justify, StyleBoxPack::Justify },
1509 : { eCSSKeyword_UNKNOWN, -1 }
1510 : };
1511 :
1512 : // keyword tables for SVG properties
1513 :
1514 : const KTableEntry nsCSSProps::kDominantBaselineKTable[] = {
1515 : { eCSSKeyword_auto, NS_STYLE_DOMINANT_BASELINE_AUTO },
1516 : { eCSSKeyword_use_script, NS_STYLE_DOMINANT_BASELINE_USE_SCRIPT },
1517 : { eCSSKeyword_no_change, NS_STYLE_DOMINANT_BASELINE_NO_CHANGE },
1518 : { eCSSKeyword_reset_size, NS_STYLE_DOMINANT_BASELINE_RESET_SIZE },
1519 : { eCSSKeyword_alphabetic, NS_STYLE_DOMINANT_BASELINE_ALPHABETIC },
1520 : { eCSSKeyword_hanging, NS_STYLE_DOMINANT_BASELINE_HANGING },
1521 : { eCSSKeyword_ideographic, NS_STYLE_DOMINANT_BASELINE_IDEOGRAPHIC },
1522 : { eCSSKeyword_mathematical, NS_STYLE_DOMINANT_BASELINE_MATHEMATICAL },
1523 : { eCSSKeyword_central, NS_STYLE_DOMINANT_BASELINE_CENTRAL },
1524 : { eCSSKeyword_middle, NS_STYLE_DOMINANT_BASELINE_MIDDLE },
1525 : { eCSSKeyword_text_after_edge, NS_STYLE_DOMINANT_BASELINE_TEXT_AFTER_EDGE },
1526 : { eCSSKeyword_text_before_edge, NS_STYLE_DOMINANT_BASELINE_TEXT_BEFORE_EDGE },
1527 : { eCSSKeyword_UNKNOWN, -1 }
1528 : };
1529 :
1530 : const KTableEntry nsCSSProps::kFillRuleKTable[] = {
1531 : { eCSSKeyword_nonzero, StyleFillRule::Nonzero },
1532 : { eCSSKeyword_evenodd, StyleFillRule::Evenodd },
1533 : { eCSSKeyword_UNKNOWN, -1 }
1534 : };
1535 :
1536 : const KTableEntry nsCSSProps::kClipPathGeometryBoxKTable[] = {
1537 : { eCSSKeyword_content_box, StyleGeometryBox::ContentBox },
1538 : { eCSSKeyword_padding_box, StyleGeometryBox::PaddingBox },
1539 : { eCSSKeyword_border_box, StyleGeometryBox::BorderBox },
1540 : { eCSSKeyword_margin_box, StyleGeometryBox::MarginBox },
1541 : { eCSSKeyword_fill_box, StyleGeometryBox::FillBox },
1542 : { eCSSKeyword_stroke_box, StyleGeometryBox::StrokeBox },
1543 : { eCSSKeyword_view_box, StyleGeometryBox::ViewBox },
1544 : { eCSSKeyword_UNKNOWN, -1 }
1545 : };
1546 :
1547 : const KTableEntry nsCSSProps::kShapeRadiusKTable[] = {
1548 : { eCSSKeyword_closest_side, StyleShapeRadius::ClosestSide },
1549 : { eCSSKeyword_farthest_side, StyleShapeRadius::FarthestSide },
1550 : { eCSSKeyword_UNKNOWN, -1 }
1551 : };
1552 :
1553 : const KTableEntry nsCSSProps::kFilterFunctionKTable[] = {
1554 : { eCSSKeyword_blur, NS_STYLE_FILTER_BLUR },
1555 : { eCSSKeyword_brightness, NS_STYLE_FILTER_BRIGHTNESS },
1556 : { eCSSKeyword_contrast, NS_STYLE_FILTER_CONTRAST },
1557 : { eCSSKeyword_grayscale, NS_STYLE_FILTER_GRAYSCALE },
1558 : { eCSSKeyword_invert, NS_STYLE_FILTER_INVERT },
1559 : { eCSSKeyword_opacity, NS_STYLE_FILTER_OPACITY },
1560 : { eCSSKeyword_saturate, NS_STYLE_FILTER_SATURATE },
1561 : { eCSSKeyword_sepia, NS_STYLE_FILTER_SEPIA },
1562 : { eCSSKeyword_hue_rotate, NS_STYLE_FILTER_HUE_ROTATE },
1563 : { eCSSKeyword_drop_shadow, NS_STYLE_FILTER_DROP_SHADOW },
1564 : { eCSSKeyword_UNKNOWN, -1 }
1565 : };
1566 :
1567 : const KTableEntry nsCSSProps::kImageRenderingKTable[] = {
1568 : { eCSSKeyword_auto, NS_STYLE_IMAGE_RENDERING_AUTO },
1569 : { eCSSKeyword_optimizespeed, NS_STYLE_IMAGE_RENDERING_OPTIMIZESPEED },
1570 : { eCSSKeyword_optimizequality, NS_STYLE_IMAGE_RENDERING_OPTIMIZEQUALITY },
1571 : { eCSSKeyword__moz_crisp_edges, NS_STYLE_IMAGE_RENDERING_CRISPEDGES },
1572 : { eCSSKeyword_UNKNOWN, -1 }
1573 : };
1574 :
1575 : const KTableEntry nsCSSProps::kMaskTypeKTable[] = {
1576 : { eCSSKeyword_luminance, NS_STYLE_MASK_TYPE_LUMINANCE },
1577 : { eCSSKeyword_alpha, NS_STYLE_MASK_TYPE_ALPHA },
1578 : { eCSSKeyword_UNKNOWN, -1 }
1579 : };
1580 :
1581 : const KTableEntry nsCSSProps::kShapeOutsideShapeBoxKTable[] = {
1582 : { eCSSKeyword_content_box, StyleGeometryBox::ContentBox },
1583 : { eCSSKeyword_padding_box, StyleGeometryBox::PaddingBox },
1584 : { eCSSKeyword_border_box, StyleGeometryBox::BorderBox },
1585 : { eCSSKeyword_margin_box, StyleGeometryBox::MarginBox },
1586 : { eCSSKeyword_UNKNOWN, -1 }
1587 : };
1588 :
1589 : const KTableEntry nsCSSProps::kShapeRenderingKTable[] = {
1590 : { eCSSKeyword_auto, NS_STYLE_SHAPE_RENDERING_AUTO },
1591 : { eCSSKeyword_optimizespeed, NS_STYLE_SHAPE_RENDERING_OPTIMIZESPEED },
1592 : { eCSSKeyword_crispedges, NS_STYLE_SHAPE_RENDERING_CRISPEDGES },
1593 : { eCSSKeyword_geometricprecision, NS_STYLE_SHAPE_RENDERING_GEOMETRICPRECISION },
1594 : { eCSSKeyword_UNKNOWN, -1 }
1595 : };
1596 :
1597 : const KTableEntry nsCSSProps::kStrokeLinecapKTable[] = {
1598 : { eCSSKeyword_butt, NS_STYLE_STROKE_LINECAP_BUTT },
1599 : { eCSSKeyword_round, NS_STYLE_STROKE_LINECAP_ROUND },
1600 : { eCSSKeyword_square, NS_STYLE_STROKE_LINECAP_SQUARE },
1601 : { eCSSKeyword_UNKNOWN, -1 }
1602 : };
1603 :
1604 : const KTableEntry nsCSSProps::kStrokeLinejoinKTable[] = {
1605 : { eCSSKeyword_miter, NS_STYLE_STROKE_LINEJOIN_MITER },
1606 : { eCSSKeyword_round, NS_STYLE_STROKE_LINEJOIN_ROUND },
1607 : { eCSSKeyword_bevel, NS_STYLE_STROKE_LINEJOIN_BEVEL },
1608 : { eCSSKeyword_UNKNOWN, -1 }
1609 : };
1610 :
1611 : const KTableEntry nsCSSProps::kTextAnchorKTable[] = {
1612 : { eCSSKeyword_start, NS_STYLE_TEXT_ANCHOR_START },
1613 : { eCSSKeyword_middle, NS_STYLE_TEXT_ANCHOR_MIDDLE },
1614 : { eCSSKeyword_end, NS_STYLE_TEXT_ANCHOR_END },
1615 : { eCSSKeyword_UNKNOWN, -1 }
1616 : };
1617 :
1618 : const KTableEntry nsCSSProps::kTextRenderingKTable[] = {
1619 : { eCSSKeyword_auto, NS_STYLE_TEXT_RENDERING_AUTO },
1620 : { eCSSKeyword_optimizespeed, NS_STYLE_TEXT_RENDERING_OPTIMIZESPEED },
1621 : { eCSSKeyword_optimizelegibility, NS_STYLE_TEXT_RENDERING_OPTIMIZELEGIBILITY },
1622 : { eCSSKeyword_geometricprecision, NS_STYLE_TEXT_RENDERING_GEOMETRICPRECISION },
1623 : { eCSSKeyword_UNKNOWN, -1 }
1624 : };
1625 :
1626 : const KTableEntry nsCSSProps::kVectorEffectKTable[] = {
1627 : { eCSSKeyword_none, NS_STYLE_VECTOR_EFFECT_NONE },
1628 : { eCSSKeyword_non_scaling_stroke, NS_STYLE_VECTOR_EFFECT_NON_SCALING_STROKE },
1629 : { eCSSKeyword_UNKNOWN, -1 }
1630 : };
1631 :
1632 : const KTableEntry nsCSSProps::kColorAdjustKTable[] = {
1633 : { eCSSKeyword_economy, NS_STYLE_COLOR_ADJUST_ECONOMY },
1634 : { eCSSKeyword_exact, NS_STYLE_COLOR_ADJUST_EXACT },
1635 : { eCSSKeyword_UNKNOWN, -1 }
1636 : };
1637 :
1638 : const KTableEntry nsCSSProps::kColorInterpolationKTable[] = {
1639 : { eCSSKeyword_auto, NS_STYLE_COLOR_INTERPOLATION_AUTO },
1640 : { eCSSKeyword_srgb, NS_STYLE_COLOR_INTERPOLATION_SRGB },
1641 : { eCSSKeyword_linearrgb, NS_STYLE_COLOR_INTERPOLATION_LINEARRGB },
1642 : { eCSSKeyword_UNKNOWN, -1 }
1643 : };
1644 :
1645 : const KTableEntry nsCSSProps::kColumnFillKTable[] = {
1646 : { eCSSKeyword_auto, NS_STYLE_COLUMN_FILL_AUTO },
1647 : { eCSSKeyword_balance, NS_STYLE_COLUMN_FILL_BALANCE },
1648 : { eCSSKeyword_UNKNOWN, -1 }
1649 : };
1650 :
1651 : const KTableEntry nsCSSProps::kColumnSpanKTable[] = {
1652 : { eCSSKeyword_all, NS_STYLE_COLUMN_SPAN_ALL },
1653 : { eCSSKeyword_none, NS_STYLE_COLUMN_SPAN_NONE },
1654 : { eCSSKeyword_UNKNOWN, -1 }
1655 : };
1656 :
1657 0 : int32_t
1658 : nsCSSProps::FindIndexOfKeyword(nsCSSKeyword aKeyword,
1659 : const KTableEntry aTable[])
1660 0 : {
1661 : if (eCSSKeyword_UNKNOWN == aKeyword) {
1662 : // NOTE: we can have keyword tables where eCSSKeyword_UNKNOWN is used
1663 : // not only for the sentinel, but also in the middle of the table to
1664 : // knock out values that have been disabled by prefs, e.g. kDisplayKTable.
1665 : // So we deal with eCSSKeyword_UNKNOWN up front to avoid returning a valid
1666 : // index in the loop below.
1667 : return -1;
1668 0 : }
1669 0 : for (int32_t i = 0; ; ++i) {
1670 0 : const KTableEntry& entry = aTable[i];
1671 : if (entry.IsSentinel()) {
1672 : break;
1673 0 : }
1674 : if (aKeyword == entry.mKeyword) {
1675 : return i;
1676 0 : }
1677 : }
1678 : return -1;
1679 : }
1680 :
1681 0 : bool
1682 : nsCSSProps::FindKeyword(nsCSSKeyword aKeyword, const KTableEntry aTable[],
1683 : int32_t& aResult)
1684 0 : {
1685 0 : int32_t index = FindIndexOfKeyword(aKeyword, aTable);
1686 0 : if (index >= 0) {
1687 0 : aResult = aTable[index].mValue;
1688 : return true;
1689 : }
1690 : return false;
1691 : }
1692 :
1693 0 : nsCSSKeyword
1694 : nsCSSProps::ValueToKeywordEnum(int32_t aValue, const KTableEntry aTable[])
1695 : {
1696 : #ifdef DEBUG
1697 0 : typedef decltype(aTable[0].mValue) table_value_type;
1698 : NS_ASSERTION(table_value_type(aValue) == aValue, "Value out of range");
1699 0 : #endif
1700 0 : for (int32_t i = 0; ; ++i) {
1701 0 : const KTableEntry& entry = aTable[i];
1702 : if (entry.IsSentinel()) {
1703 : break;
1704 0 : }
1705 0 : if (aValue == entry.mValue) {
1706 : return entry.mKeyword;
1707 0 : }
1708 : }
1709 : return eCSSKeyword_UNKNOWN;
1710 : }
1711 :
1712 0 : const nsCString&
1713 : nsCSSProps::ValueToKeyword(int32_t aValue, const KTableEntry aTable[])
1714 0 : {
1715 0 : nsCSSKeyword keyword = ValueToKeywordEnum(aValue, aTable);
1716 0 : if (keyword == eCSSKeyword_UNKNOWN) {
1717 : static nsDependentCString sNullStr("");
1718 : return sNullStr;
1719 0 : } else {
1720 : return nsCSSKeywords::GetStringValue(keyword);
1721 : }
1722 : }
1723 :
1724 : const CSSPropFlags nsCSSProps::kFlagsTable[eCSSProperty_COUNT] = {
1725 : #define CSS_PROP_LONGHAND(name_, id_, method_, flags_, ...) flags_,
1726 : #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, ...) flags_,
1727 : #include "mozilla/ServoCSSPropList.h"
1728 : #undef CSS_PROP_SHORTHAND
1729 : #undef CSS_PROP_LONGHAND
1730 : };
1731 :
1732 : /* static */ bool
1733 : nsCSSProps::gPropertyEnabled[eCSSProperty_COUNT_with_aliases] = {
1734 : // If the property has any "ENABLED_IN" flag set, it is disabled by
1735 : // default. Note that, if a property has pref, whatever its default
1736 : // value is, it will later be changed in nsCSSProps::AddRefTable().
1737 : // If the property has "ENABLED_IN" flags but doesn't have a pref,
1738 : // it is an internal property which is disabled elsewhere.
1739 : #define IS_ENABLED_BY_DEFAULT(flags_) \
1740 : (!((flags_) & (CSSPropFlags::EnabledMask | CSSPropFlags::Inaccessible)))
1741 :
1742 : #define CSS_PROP_LONGHAND(name_, id_, method_, flags_, ...) \
1743 : IS_ENABLED_BY_DEFAULT(flags_),
1744 : #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, ...) \
1745 : IS_ENABLED_BY_DEFAULT(flags_),
1746 : #define CSS_PROP_ALIAS(...) true,
1747 : #include "mozilla/ServoCSSPropList.h"
1748 : #undef CSS_PROP_ALIAS
1749 : #undef CSS_PROP_SHORTHAND
1750 : #undef CSS_PROP_LONGHAND
1751 :
1752 : #undef IS_ENABLED_BY_DEFAULT
1753 : };
1754 :
1755 : #include "../../dom/base/PropertyUseCounterMap.inc"
1756 :
1757 : /* static */ const UseCounter
1758 : nsCSSProps::gPropertyUseCounter[eCSSProperty_COUNT_no_shorthands] = {
1759 : #define CSS_PROP_PUBLIC_OR_PRIVATE(publicname_, privatename_) privatename_
1760 : // Need an extra level of macro nesting to force expansion of method_
1761 : // params before they get pasted.
1762 : #define CSS_PROP_USE_COUNTER(method_) \
1763 : static_cast<UseCounter>(USE_COUNTER_FOR_CSS_PROPERTY_##method_),
1764 : #define CSS_PROP_LONGHAND(name_, id_, method_, ...) \
1765 : CSS_PROP_USE_COUNTER(method_)
1766 : #include "mozilla/ServoCSSPropList.h"
1767 : #undef CSS_PROP_LONGHAND
1768 : #undef CSS_PROP_USE_COUNTER
1769 : #undef CSS_PROP_PUBLIC_OR_PRIVATE
1770 : };
1771 :
1772 : #include "nsCSSPropsGenerated.inc"
|