AX: Implement updated CSS3 Speech for 'speak' and 'speak-as' properties
[WebKit-https.git] / Source / WebCore / rendering / style / RenderStyleConstants.h
1 /*
2  * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3  *           (C) 2000 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2000 Dirk Mueller (mueller@kde.org)
5  * Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
6  * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
7  * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Library General Public
11  * License as published by the Free Software Foundation; either
12  * version 2 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Library General Public License for more details.
18  *
19  * You should have received a copy of the GNU Library General Public License
20  * along with this library; see the file COPYING.LIB.  If not, write to
21  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22  * Boston, MA 02110-1301, USA.
23  *
24  */
25
26 #pragma once
27
28 #include <initializer_list>
29
30 namespace WTF {
31 class TextStream;
32 }
33
34 namespace WebCore {
35
36 static const size_t PrintColorAdjustBits = 1;
37 enum PrintColorAdjust {
38     PrintColorAdjustEconomy,
39     PrintColorAdjustExact
40 };
41
42 // The difference between two styles.  The following values are used:
43 // - StyleDifferenceEqual - The two styles are identical
44 // - StyleDifferenceRecompositeLayer - The layer needs its position and transform updated, but no repaint
45 // - StyleDifferenceRepaint - The object just needs to be repainted.
46 // - StyleDifferenceRepaintIfTextOrBorderOrOutline - The object needs to be repainted if it contains text or a border or outline.
47 // - StyleDifferenceRepaintLayer - The layer and its descendant layers needs to be repainted.
48 // - StyleDifferenceLayoutPositionedMovementOnly - Only the position of this positioned object has been updated
49 // - StyleDifferenceSimplifiedLayout - Only overflow needs to be recomputed
50 // - StyleDifferenceSimplifiedLayoutAndPositionedMovement - Both positioned movement and simplified layout updates are required.
51 // - StyleDifferenceLayout - A full layout is required.
52 enum StyleDifference {
53     StyleDifferenceEqual,
54     StyleDifferenceRecompositeLayer,
55     StyleDifferenceRepaint,
56     StyleDifferenceRepaintIfTextOrBorderOrOutline,
57     StyleDifferenceRepaintLayer,
58     StyleDifferenceLayoutPositionedMovementOnly,
59     StyleDifferenceSimplifiedLayout,
60     StyleDifferenceSimplifiedLayoutAndPositionedMovement,
61     StyleDifferenceLayout,
62     StyleDifferenceNewStyle
63 };
64
65 // When some style properties change, different amounts of work have to be done depending on
66 // context (e.g. whether the property is changing on an element which has a compositing layer).
67 // A simple StyleDifference does not provide enough information so we return a bit mask of
68 // StyleDifferenceContextSensitiveProperties from RenderStyle::diff() too.
69 enum StyleDifferenceContextSensitiveProperty {
70     ContextSensitivePropertyNone        = 0,
71     ContextSensitivePropertyTransform   = 1 << 0,
72     ContextSensitivePropertyOpacity     = 1 << 1,
73     ContextSensitivePropertyFilter      = 1 << 2,
74     ContextSensitivePropertyClipRect    = 1 << 3,
75     ContextSensitivePropertyClipPath    = 1 << 4,
76     ContextSensitivePropertyWillChange  = 1 << 5,
77 };
78
79 // Static pseudo styles. Dynamic ones are produced on the fly.
80 enum PseudoId : unsigned char {
81     // The order must be NOP ID, public IDs, and then internal IDs.
82     NOPSEUDO, FIRST_LINE, FIRST_LETTER, MARKER, BEFORE, AFTER, SELECTION, SCROLLBAR,
83     // Internal IDs follow:
84     SCROLLBAR_THUMB, SCROLLBAR_BUTTON, SCROLLBAR_TRACK, SCROLLBAR_TRACK_PIECE, SCROLLBAR_CORNER, RESIZER,
85     AFTER_LAST_INTERNAL_PSEUDOID,
86     FIRST_PUBLIC_PSEUDOID = FIRST_LINE,
87     FIRST_INTERNAL_PSEUDOID = SCROLLBAR_THUMB,
88     PUBLIC_PSEUDOID_MASK = ((1 << FIRST_INTERNAL_PSEUDOID) - 1) & ~((1 << FIRST_PUBLIC_PSEUDOID) - 1)
89 };
90
91 class PseudoIdSet {
92 public:
93     PseudoIdSet()
94         : m_data(0)
95     {
96     }
97
98     PseudoIdSet(std::initializer_list<PseudoId> initializerList)
99         : m_data(0)
100     {
101         for (PseudoId pseudoId : initializerList)
102             add(pseudoId);
103     }
104
105     static PseudoIdSet fromMask(unsigned rawPseudoIdSet)
106     {
107         return PseudoIdSet(rawPseudoIdSet);
108     }
109
110     bool has(PseudoId pseudoId) const
111     {
112         ASSERT((sizeof(m_data) * 8) > pseudoId);
113         return m_data & (1U << pseudoId);
114     }
115
116     void add(PseudoId pseudoId)
117     {
118         ASSERT((sizeof(m_data) * 8) > pseudoId);
119         m_data |= (1U << pseudoId);
120     }
121
122     void merge(PseudoIdSet source)
123     {
124         m_data |= source.m_data;
125     }
126
127     PseudoIdSet operator &(const PseudoIdSet& pseudoIdSet) const
128     {
129         return PseudoIdSet(m_data & pseudoIdSet.m_data);
130     }
131
132     PseudoIdSet operator |(const PseudoIdSet& pseudoIdSet) const
133     {
134         return PseudoIdSet(m_data | pseudoIdSet.m_data);
135     }
136
137     explicit operator bool() const
138     {
139         return m_data;
140     }
141
142     unsigned data() const { return m_data; }
143
144     static ptrdiff_t dataMemoryOffset() { return OBJECT_OFFSETOF(PseudoIdSet, m_data); }
145
146 private:
147     explicit PseudoIdSet(unsigned rawPseudoIdSet)
148         : m_data(rawPseudoIdSet)
149     {
150     }
151
152     unsigned m_data;
153 };
154
155 enum ColumnFill { ColumnFillBalance, ColumnFillAuto };
156
157 enum ColumnSpan { ColumnSpanNone = 0, ColumnSpanAll };
158
159 enum EBorderCollapse { BSEPARATE = 0, BCOLLAPSE = 1 };
160
161 // These have been defined in the order of their precedence for border-collapsing. Do
162 // not change this order! This order also must match the order in CSSValueKeywords.in.
163 enum EBorderStyle { BNONE, BHIDDEN, INSET, GROOVE, OUTSET, RIDGE, DOTTED, DASHED, SOLID, DOUBLE };
164
165 enum EBorderPrecedence { BOFF, BTABLE, BCOLGROUP, BCOL, BROWGROUP, BROW, BCELL };
166
167 enum OutlineIsAuto { AUTO_OFF = 0, AUTO_ON };
168
169 enum EPosition {
170     StaticPosition = 0,
171     RelativePosition = 1,
172     AbsolutePosition = 2,
173     StickyPosition = 3,
174     // This value is required to pack our bits efficiently in RenderObject.
175     FixedPosition = 6
176 };
177
178 enum EFloat {
179     NoFloat, LeftFloat, RightFloat
180 };
181
182 enum EMarginCollapse { MCOLLAPSE, MSEPARATE, MDISCARD };
183
184 // Box decoration attributes. Not inherited.
185
186 enum EBoxDecorationBreak { DSLICE, DCLONE };
187
188 // Box attributes. Not inherited.
189
190 enum EBoxSizing { CONTENT_BOX, BORDER_BOX };
191
192 // Random visual rendering model attributes. Not inherited.
193
194 enum EOverflow {
195     OVISIBLE, OHIDDEN, OSCROLL, OAUTO, OOVERLAY, OPAGEDX, OPAGEDY
196 };
197
198 enum EVerticalAlign {
199     BASELINE, MIDDLE, SUB, SUPER, TEXT_TOP,
200     TEXT_BOTTOM, TOP, BOTTOM, BASELINE_MIDDLE, LENGTH
201 };
202
203 enum EClear {
204     CNONE = 0, CLEFT = 1, CRIGHT = 2, CBOTH = 3
205 };
206
207 enum ETableLayout {
208     TAUTO, TFIXED
209 };
210
211 enum TextCombine {
212     TextCombineNone, TextCombineHorizontal
213 };
214
215 enum EFillAttachment {
216     ScrollBackgroundAttachment, LocalBackgroundAttachment, FixedBackgroundAttachment
217 };
218
219 enum EFillBox {
220     BorderFillBox, PaddingFillBox, ContentFillBox, TextFillBox
221 };
222
223 enum EFillRepeat {
224     RepeatFill, NoRepeatFill, RoundFill, SpaceFill
225 };
226
227 enum EFillLayerType {
228     BackgroundFillLayer, MaskFillLayer
229 };
230
231 // CSS3 Background Values
232 enum EFillSizeType { Contain, Cover, SizeLength, SizeNone };
233
234 // CSS3 <position>
235 enum class Edge { Top, Right, Bottom, Left };
236
237 // CSS3 Mask Source Types
238 enum EMaskSourceType { MaskAlpha, MaskLuminance };
239
240 // CSS3 Marquee Properties
241
242 enum EMarqueeBehavior { MNONE, MSCROLL, MSLIDE, MALTERNATE };
243 enum EMarqueeDirection { MAUTO = 0, MLEFT = 1, MRIGHT = -1, MUP = 2, MDOWN = -2, MFORWARD = 3, MBACKWARD = -3 };
244
245 // Deprecated Flexible Box Properties
246
247 enum EBoxPack { Start, Center, End, Justify };
248 enum EBoxAlignment { BSTRETCH, BSTART, BCENTER, BEND, BBASELINE };
249 enum EBoxOrient { HORIZONTAL, VERTICAL };
250 enum EBoxLines { SINGLE, MULTIPLE };
251 enum EBoxDirection { BNORMAL, BREVERSE };
252
253 // CSS3 Flexbox Properties
254
255 enum EAlignContent { AlignContentFlexStart, AlignContentFlexEnd, AlignContentCenter, AlignContentSpaceBetween, AlignContentSpaceAround, AlignContentStretch };
256 enum EFlexDirection { FlowRow, FlowRowReverse, FlowColumn, FlowColumnReverse };
257 enum EFlexWrap { FlexNoWrap, FlexWrap, FlexWrapReverse };
258 enum ItemPosition { ItemPositionAuto, ItemPositionNormal, ItemPositionStretch, ItemPositionBaseline, ItemPositionLastBaseline, ItemPositionCenter, ItemPositionStart, ItemPositionEnd, ItemPositionSelfStart, ItemPositionSelfEnd, ItemPositionFlexStart, ItemPositionFlexEnd, ItemPositionLeft, ItemPositionRight };
259 enum OverflowAlignment { OverflowAlignmentDefault, OverflowAlignmentUnsafe, OverflowAlignmentSafe };
260 enum ItemPositionType { NonLegacyPosition, LegacyPosition };
261 enum ContentPosition { ContentPositionNormal, ContentPositionBaseline, ContentPositionLastBaseline, ContentPositionCenter, ContentPositionStart, ContentPositionEnd, ContentPositionFlexStart, ContentPositionFlexEnd, ContentPositionLeft, ContentPositionRight };
262 enum ContentDistributionType { ContentDistributionDefault, ContentDistributionSpaceBetween, ContentDistributionSpaceAround, ContentDistributionSpaceEvenly, ContentDistributionStretch };
263
264 enum ETextSecurity {
265     TSNONE, TSDISC, TSCIRCLE, TSSQUARE
266 };
267
268 // CSS3 User Modify Properties
269
270 enum EUserModify {
271     READ_ONLY, READ_WRITE, READ_WRITE_PLAINTEXT_ONLY
272 };
273
274 // CSS3 User Drag Values
275
276 enum EUserDrag {
277     DRAG_AUTO, DRAG_NONE, DRAG_ELEMENT
278 };
279
280 // CSS3 User Select Values
281
282 enum EUserSelect {
283     SELECT_NONE, SELECT_TEXT, SELECT_ALL
284 };
285
286 // CSS3 Image Values
287 enum ObjectFit {
288     ObjectFitFill, ObjectFitContain, ObjectFitCover, ObjectFitNone, ObjectFitScaleDown
289 };
290
291 enum AspectRatioType {
292     AspectRatioAuto, AspectRatioFromIntrinsic, AspectRatioFromDimensions, AspectRatioSpecified
293 };
294
295 enum EWordBreak {
296     NormalWordBreak, BreakAllWordBreak, KeepAllWordBreak, BreakWordBreak
297 };
298
299 enum EOverflowWrap {
300     NormalOverflowWrap, BreakOverflowWrap
301 };
302
303 enum ENBSPMode {
304     NBNORMAL, SPACE
305 };
306
307 enum LineBreak {
308     LineBreakAuto, LineBreakLoose, LineBreakNormal, LineBreakStrict, LineBreakAfterWhiteSpace
309 };
310
311 enum EResize {
312     RESIZE_NONE, RESIZE_BOTH, RESIZE_HORIZONTAL, RESIZE_VERTICAL
313 };
314
315 // The order of this enum must match the order of the list style types in CSSValueKeywords.in.
316 enum EListStyleType {
317     Disc,
318     Circle,
319     Square,
320     DecimalListStyle,
321     DecimalLeadingZero,
322     ArabicIndic,
323     BinaryListStyle,
324     Bengali,
325     Cambodian,
326     Khmer,
327     Devanagari,
328     Gujarati,
329     Gurmukhi,
330     Kannada,
331     LowerHexadecimal,
332     Lao,
333     Malayalam,
334     Mongolian,
335     Myanmar,
336     Octal,
337     Oriya,
338     Persian,
339     Urdu,
340     Telugu,
341     Tibetan,
342     Thai,
343     UpperHexadecimal,
344     LowerRoman,
345     UpperRoman,
346     LowerGreek,
347     LowerAlpha,
348     LowerLatin,
349     UpperAlpha,
350     UpperLatin,
351     Afar,
352     EthiopicHalehameAaEt,
353     EthiopicHalehameAaEr,
354     Amharic,
355     EthiopicHalehameAmEt,
356     AmharicAbegede,
357     EthiopicAbegedeAmEt,
358     CjkEarthlyBranch,
359     CjkHeavenlyStem,
360     Ethiopic,
361     EthiopicHalehameGez,
362     EthiopicAbegede,
363     EthiopicAbegedeGez,
364     HangulConsonant,
365     Hangul,
366     LowerNorwegian,
367     Oromo,
368     EthiopicHalehameOmEt,
369     Sidama,
370     EthiopicHalehameSidEt,
371     Somali,
372     EthiopicHalehameSoEt,
373     Tigre,
374     EthiopicHalehameTig,
375     TigrinyaEr,
376     EthiopicHalehameTiEr,
377     TigrinyaErAbegede,
378     EthiopicAbegedeTiEr,
379     TigrinyaEt,
380     EthiopicHalehameTiEt,
381     TigrinyaEtAbegede,
382     EthiopicAbegedeTiEt,
383     UpperGreek,
384     UpperNorwegian,
385     Asterisks,
386     Footnotes,
387     Hebrew,
388     Armenian,
389     LowerArmenian,
390     UpperArmenian,
391     Georgian,
392     CJKIdeographic,
393     Hiragana,
394     Katakana,
395     HiraganaIroha,
396     KatakanaIroha,
397     NoneListStyle
398 };
399
400 enum QuoteType {
401     OPEN_QUOTE, CLOSE_QUOTE, NO_OPEN_QUOTE, NO_CLOSE_QUOTE
402 };
403
404 enum EBorderFit { BorderFitBorder, BorderFitLines };
405
406 enum EAnimationFillMode { AnimationFillModeNone, AnimationFillModeForwards, AnimationFillModeBackwards, AnimationFillModeBoth };
407
408 enum EAnimPlayState {
409     AnimPlayStatePlaying = 0x0,
410     AnimPlayStatePaused = 0x1
411 };
412
413 enum EWhiteSpace {
414     NORMAL, PRE, PRE_WRAP, PRE_LINE, NOWRAP, KHTML_NOWRAP
415 };
416
417 // The order of this enum must match the order of the text align values in CSSValueKeywords.in.
418 enum ETextAlign {
419     LEFT, RIGHT, CENTER, JUSTIFY, WEBKIT_LEFT, WEBKIT_RIGHT, WEBKIT_CENTER, TASTART, TAEND,
420 };
421
422 enum ETextTransform {
423     CAPITALIZE, UPPERCASE, LOWERCASE, TTNONE
424 };
425
426 #if ENABLE(LETTERPRESS)
427 static const size_t TextDecorationBits = 5;
428 #else
429 static const size_t TextDecorationBits = 4;
430 #endif
431 enum TextDecoration {
432     TextDecorationNone = 0x0,
433     TextDecorationUnderline = 0x1,
434     TextDecorationOverline = 0x2,
435     TextDecorationLineThrough = 0x4,
436     TextDecorationBlink = 0x8,
437 #if ENABLE(LETTERPRESS)
438     TextDecorationLetterpress = 0x10,
439 #endif
440 };
441 inline TextDecoration operator| (TextDecoration a, TextDecoration b) { return TextDecoration(int(a) | int(b)); }
442 inline TextDecoration& operator|= (TextDecoration& a, TextDecoration b) { return a = a | b; }
443
444 enum TextDecorationStyle {
445     TextDecorationStyleSolid,
446     TextDecorationStyleDouble,
447     TextDecorationStyleDotted,
448     TextDecorationStyleDashed,
449     TextDecorationStyleWavy
450 };
451
452 #if ENABLE(CSS3_TEXT)
453 enum TextAlignLast {
454     TextAlignLastAuto, TextAlignLastStart, TextAlignLastEnd, TextAlignLastLeft, TextAlignLastRight, TextAlignLastCenter, TextAlignLastJustify
455 };
456
457 enum TextJustify {
458     TextJustifyAuto, TextJustifyNone, TextJustifyInterWord, TextJustifyDistribute
459 };
460 #endif // CSS3_TEXT
461
462 enum TextDecorationSkipItems {
463     TextDecorationSkipNone = 0,
464     TextDecorationSkipInk = 1 << 0,
465     TextDecorationSkipObjects = 1 << 1,
466     TextDecorationSkipAuto = 1 << 2
467 };
468 typedef unsigned TextDecorationSkip;
469
470 enum TextUnderlinePosition {
471     // FIXME: Implement support for 'under left' and 'under right' values.
472     TextUnderlinePositionAuto = 0x1, TextUnderlinePositionAlphabetic = 0x2, TextUnderlinePositionUnder = 0x4
473 };
474
475 enum TextZoom {
476     TextZoomNormal, TextZoomReset
477 };
478
479 enum BreakBetween {
480     AutoBreakBetween, AvoidBreakBetween, AvoidColumnBreakBetween, AvoidPageBreakBetween, ColumnBreakBetween, PageBreakBetween, LeftPageBreakBetween, RightPageBreakBetween, RectoPageBreakBetween, VersoPageBreakBetween
481 };
482 bool alwaysPageBreak(BreakBetween);
483     
484 enum BreakInside {
485     AutoBreakInside, AvoidBreakInside, AvoidColumnBreakInside, AvoidPageBreakInside
486 };
487
488 enum HangingPunctuation {
489     NoHangingPunctuation = 0,
490     FirstHangingPunctuation = 1 << 0,
491     LastHangingPunctuation = 1 << 1,
492     AllowEndHangingPunctuation = 1 << 2,
493     ForceEndHangingPunctuation = 1 << 3
494 };
495 inline HangingPunctuation operator| (HangingPunctuation a, HangingPunctuation b) { return HangingPunctuation(int(a) | int(b)); }
496 inline HangingPunctuation& operator|= (HangingPunctuation& a, HangingPunctuation b) { return a = a | b; }
497
498 enum EEmptyCell {
499     SHOW, HIDE
500 };
501
502 enum ECaptionSide {
503     CAPTOP, CAPBOTTOM, CAPLEFT, CAPRIGHT
504 };
505
506 enum EListStylePosition { OUTSIDE, INSIDE };
507
508 enum EVisibility { VISIBLE, HIDDEN, COLLAPSE };
509
510 enum ECursor {
511     // The following must match the order in CSSValueKeywords.in.
512     CursorAuto,
513     CursorDefault,
514     // CursorNone
515     CursorContextMenu,
516     CursorHelp,
517     CursorPointer,
518     CursorProgress,
519     CursorWait,
520     CursorCell,
521     CursorCrosshair,
522     CursorText,
523     CursorVerticalText,
524     CursorAlias,
525     // CursorCopy
526     CursorMove,
527     CursorNoDrop,
528     CursorNotAllowed,
529     CursorGrab,
530     CursorGrabbing,
531     CursorEResize,
532     CursorNResize,
533     CursorNeResize,
534     CursorNwResize,
535     CursorSResize,
536     CursorSeResize,
537     CursorSwResize,
538     CursorWResize,
539     CursorEwResize,
540     CursorNsResize,
541     CursorNeswResize,
542     CursorNwseResize,
543     CursorColResize,
544     CursorRowResize,
545     CursorAllScroll,
546     CursorZoomIn,
547     CursorZoomOut,
548
549     // The following are handled as exceptions so don't need to match.
550     CursorCopy,
551     CursorNone
552 };
553
554 #if ENABLE(CURSOR_VISIBILITY)
555 enum CursorVisibility {
556     CursorVisibilityAuto,
557     CursorVisibilityAutoHide,
558 };
559 #endif
560
561 // The order of this enum must match the order of the display values in CSSValueKeywords.in.
562 enum EDisplay {
563     INLINE, BLOCK, LIST_ITEM, COMPACT, INLINE_BLOCK,
564     TABLE, INLINE_TABLE, TABLE_ROW_GROUP,
565     TABLE_HEADER_GROUP, TABLE_FOOTER_GROUP, TABLE_ROW,
566     TABLE_COLUMN_GROUP, TABLE_COLUMN, TABLE_CELL,
567     TABLE_CAPTION, BOX, INLINE_BOX,
568     FLEX, WEBKIT_FLEX, INLINE_FLEX, WEBKIT_INLINE_FLEX,
569     CONTENTS, GRID, INLINE_GRID, NONE
570 };
571
572 enum EInsideLink {
573     NotInsideLink, InsideUnvisitedLink, InsideVisitedLink
574 };
575     
576 enum EPointerEvents {
577     PE_NONE, PE_AUTO, PE_STROKE, PE_FILL, PE_PAINTED, PE_VISIBLE,
578     PE_VISIBLE_STROKE, PE_VISIBLE_FILL, PE_VISIBLE_PAINTED, PE_ALL
579 };
580
581 enum ETransformStyle3D {
582     TransformStyle3DFlat, TransformStyle3DPreserve3D
583 };
584
585 enum EBackfaceVisibility {
586     BackfaceVisibilityVisible, BackfaceVisibilityHidden
587 };
588
589 enum class TransformBox {
590     BorderBox,
591     FillBox,
592     ViewBox
593 };
594
595 enum ELineClampType { LineClampLineCount, LineClampPercentage };
596
597 enum Hyphens { HyphensNone, HyphensManual, HyphensAuto };
598
599 enum ESpeakAs {
600     SpeakNormal = 0,
601     SpeakSpellOut = 1 << 0,
602     SpeakDigits = 1 << 1,
603     SpeakLiteralPunctuation = 1 << 2,
604     SpeakNoPunctuation = 1 << 3
605 };
606 inline ESpeakAs operator| (ESpeakAs a, ESpeakAs b) { return ESpeakAs(int(a) | int(b)); }
607 inline ESpeakAs& operator|= (ESpeakAs& a, ESpeakAs b) { return a = a | b; }
608
609 enum TextEmphasisFill { TextEmphasisFillFilled, TextEmphasisFillOpen };
610
611 enum TextEmphasisMark { TextEmphasisMarkNone, TextEmphasisMarkAuto, TextEmphasisMarkDot, TextEmphasisMarkCircle, TextEmphasisMarkDoubleCircle, TextEmphasisMarkTriangle, TextEmphasisMarkSesame, TextEmphasisMarkCustom };
612
613 enum TextEmphasisPositions {
614     TextEmphasisPositionOver = 1 << 0,
615     TextEmphasisPositionUnder = 1 << 1,
616     TextEmphasisPositionLeft = 1 << 2,
617     TextEmphasisPositionRight = 1 << 3
618 };
619 typedef unsigned TextEmphasisPosition;
620
621 enum class TextOrientation { Mixed, Upright, Sideways };
622
623 enum TextOverflow { TextOverflowClip = 0, TextOverflowEllipsis };
624
625 enum EImageRendering {
626     ImageRenderingAuto = 0,
627     ImageRenderingOptimizeSpeed,
628     ImageRenderingOptimizeQuality,
629     ImageRenderingCrispEdges,
630     ImageRenderingPixelated
631 };
632
633 enum ImageResolutionSource { ImageResolutionSpecified = 0, ImageResolutionFromImage };
634
635 enum ImageResolutionSnap { ImageResolutionNoSnap = 0, ImageResolutionSnapPixels };
636
637 enum Order { LogicalOrder = 0, VisualOrder };
638
639 enum ColumnAxis { HorizontalColumnAxis, VerticalColumnAxis, AutoColumnAxis };
640
641 enum ColumnProgression { NormalColumnProgression, ReverseColumnProgression };
642
643 enum LineSnap { LineSnapNone, LineSnapBaseline, LineSnapContain };
644
645 enum LineAlign { LineAlignNone, LineAlignEdges };
646
647 enum RubyPosition { RubyPositionBefore, RubyPositionAfter, RubyPositionInterCharacter };
648
649 static const size_t GridAutoFlowBits = 4;
650 enum InternalGridAutoFlowAlgorithm {
651     InternalAutoFlowAlgorithmSparse = 0x1,
652     InternalAutoFlowAlgorithmDense = 0x2,
653 };
654
655 enum InternalGridAutoFlowDirection {
656     InternalAutoFlowDirectionRow = 0x4,
657     InternalAutoFlowDirectionColumn = 0x8
658 };
659
660 enum GridAutoFlow {
661     AutoFlowRow = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionRow,
662     AutoFlowColumn = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionColumn,
663     AutoFlowRowDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionRow,
664     AutoFlowColumnDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionColumn
665 };
666
667 enum AutoRepeatType {
668     NoAutoRepeat,
669     AutoFill,
670     AutoFit
671 };
672
673 // Reasonable maximum to prevent insane font sizes from causing crashes on some platforms (such as Windows).
674 static const float maximumAllowedFontSize = 1000000.0f;
675
676 #if ENABLE(CSS3_TEXT)
677 enum TextIndentLine { TextIndentFirstLine, TextIndentEachLine };
678 enum TextIndentType { TextIndentNormal, TextIndentHanging };
679 #endif
680
681 enum Isolation { IsolationAuto, IsolationIsolate };
682
683 // Fill, Stroke, ViewBox are just used for SVG.
684 enum CSSBoxType { BoxMissing = 0, MarginBox, BorderBox, PaddingBox, ContentBox, Fill, Stroke, ViewBox };
685
686 #if ENABLE(TOUCH_EVENTS)
687 enum class TouchAction {
688     Auto,
689     Manipulation
690 };
691 #endif
692
693 #if ENABLE(CSS_SCROLL_SNAP)
694 enum class ScrollSnapStrictness {
695     None,
696     Proximity,
697     Mandatory
698 };
699
700 enum class ScrollSnapAxis {
701     XAxis,
702     YAxis,
703     Block,
704     Inline,
705     Both
706 };
707
708 enum class ScrollSnapAxisAlignType {
709     None,
710     Start,
711     Center,
712     End
713 };
714 #endif
715
716 #if ENABLE(CSS_TRAILING_WORD)
717 enum class TrailingWord {
718     Auto,
719     PartiallyBalanced
720 };
721 #endif
722
723 #if ENABLE(APPLE_PAY)
724 enum class ApplePayButtonStyle {
725     White,
726     WhiteOutline,
727     Black,
728 };
729
730 enum class ApplePayButtonType {
731     Plain,
732     Buy,
733     SetUp,
734     Donate,
735 };
736 #endif
737
738 WTF::TextStream& operator<<(WTF::TextStream&, EFillSizeType);
739 WTF::TextStream& operator<<(WTF::TextStream&, EFillAttachment);
740 WTF::TextStream& operator<<(WTF::TextStream&, EFillBox);
741 WTF::TextStream& operator<<(WTF::TextStream&, EFillRepeat);
742 WTF::TextStream& operator<<(WTF::TextStream&, EMaskSourceType);
743 WTF::TextStream& operator<<(WTF::TextStream&, Edge);
744
745 // These are all minimized combinations of paint-order.
746 enum class PaintOrder {
747     Normal,
748     Fill,
749     FillMarkers,
750     Stroke,
751     StrokeMarkers,
752     Markers,
753     MarkersStroke
754 };
755
756 enum class PaintType {
757     Fill,
758     Stroke,
759     Markers
760 };
761
762 enum class FontLoadingBehavior {
763     Auto, Block, Swap, Fallback, Optional
764 };
765
766 extern const float defaultMiterLimit;
767
768 } // namespace WebCore