Implement TextStream-based dumping for all the RenderStyle and SVGRenderStyle enum...
[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 "CSSReflectionDirection.h" // FIXME: CSSReflectionDirection should just move here.
29 #include <initializer_list>
30
31 namespace WTF {
32 class TextStream;
33 }
34
35 namespace WebCore {
36
37 static const size_t PrintColorAdjustBits = 1;
38 enum class PrintColorAdjust : uint8_t {
39     Economy,
40     Exact
41 };
42
43 // The difference between two styles.  The following values are used:
44 // - StyleDifference::Equal - The two styles are identical
45 // - StyleDifference::RecompositeLayer - The layer needs its position and transform updated, but no repaint
46 // - StyleDifference::Repaint - The object just needs to be repainted.
47 // - StyleDifference::RepaintIfTextOrBorderOrOutline - The object needs to be repainted if it contains text or a border or outline.
48 // - StyleDifference::RepaintLayer - The layer and its descendant layers needs to be repainted.
49 // - StyleDifference::LayoutPositionedMovementOnly - Only the position of this positioned object has been updated
50 // - StyleDifference::SimplifiedLayout - Only overflow needs to be recomputed
51 // - StyleDifference::SimplifiedLayoutAndPositionedMovement - Both positioned movement and simplified layout updates are required.
52 // - StyleDifference::Layout - A full layout is required.
53 enum class StyleDifference {
54     Equal,
55     RecompositeLayer,
56     Repaint,
57     RepaintIfTextOrBorderOrOutline,
58     RepaintLayer,
59     LayoutPositionedMovementOnly,
60     SimplifiedLayout,
61     SimplifiedLayoutAndPositionedMovement,
62     Layout,
63     NewStyle
64 };
65
66 // When some style properties change, different amounts of work have to be done depending on
67 // context (e.g. whether the property is changing on an element which has a compositing layer).
68 // A simple StyleDifference does not provide enough information so we return a bit mask of
69 // StyleDifferenceContextSensitiveProperties from RenderStyle::diff() too.
70 enum class StyleDifferenceContextSensitiveProperty {
71     None        = 0,
72     Transform   = 1 << 0,
73     Opacity     = 1 << 1,
74     Filter      = 1 << 2,
75     ClipRect    = 1 << 3,
76     ClipPath    = 1 << 4,
77     WillChange  = 1 << 5,
78 };
79
80 // Static pseudo styles. Dynamic ones are produced on the fly.
81 enum class PseudoId : uint8_t {
82     // The order must be None, public IDs, and then internal IDs.
83     None,
84
85     // Public:
86     FirstLine,
87     FirstLetter,
88     Marker,
89     Before,
90     After,
91     Selection,
92     Scrollbar,
93
94     // Internal:
95     ScrollbarThumb,
96     ScrollbarButton,
97     ScrollbarTrack,
98     ScrollbarTrackPiece,
99     ScrollbarCorner,
100     Resizer,
101
102     AfterLastInternalPseudoId,
103
104     FirstPublicPseudoId = FirstLine,
105     FirstInternalPseudoId = ScrollbarThumb,
106     PublicPseudoIdMask = ((1 << FirstInternalPseudoId) - 1) & ~((1 << FirstPublicPseudoId) - 1)
107 };
108
109 class PseudoIdSet {
110 public:
111     PseudoIdSet()
112         : m_data(0)
113     {
114     }
115
116     PseudoIdSet(std::initializer_list<PseudoId> initializerList)
117         : m_data(0)
118     {
119         for (PseudoId pseudoId : initializerList)
120             add(pseudoId);
121     }
122
123     static PseudoIdSet fromMask(unsigned rawPseudoIdSet)
124     {
125         return PseudoIdSet(rawPseudoIdSet);
126     }
127
128     bool has(PseudoId pseudoId) const
129     {
130         ASSERT((sizeof(m_data) * 8) > static_cast<unsigned>(pseudoId));
131         return m_data & (1U << static_cast<unsigned>(pseudoId));
132     }
133
134     void add(PseudoId pseudoId)
135     {
136         ASSERT((sizeof(m_data) * 8) > static_cast<unsigned>(pseudoId));
137         m_data |= (1U << static_cast<unsigned>(pseudoId));
138     }
139
140     void merge(PseudoIdSet source)
141     {
142         m_data |= source.m_data;
143     }
144
145     PseudoIdSet operator &(const PseudoIdSet& pseudoIdSet) const
146     {
147         return PseudoIdSet(m_data & pseudoIdSet.m_data);
148     }
149
150     PseudoIdSet operator |(const PseudoIdSet& pseudoIdSet) const
151     {
152         return PseudoIdSet(m_data | pseudoIdSet.m_data);
153     }
154
155     explicit operator bool() const
156     {
157         return m_data;
158     }
159
160     unsigned data() const { return m_data; }
161
162     static ptrdiff_t dataMemoryOffset() { return OBJECT_OFFSETOF(PseudoIdSet, m_data); }
163
164 private:
165     explicit PseudoIdSet(unsigned rawPseudoIdSet)
166         : m_data(rawPseudoIdSet)
167     {
168     }
169
170     unsigned m_data;
171 };
172
173 enum class ColumnFill : uint8_t {
174     Balance,
175     Auto
176 };
177
178 enum class ColumnSpan : uint8_t {
179     None = 0,
180     All
181 };
182
183 enum class BorderCollapse : uint8_t {
184     Separate = 0,
185     Collapse
186 };
187
188 // These have been defined in the order of their precedence for border-collapsing. Do
189 // not change this order! This order also must match the order in CSSValueKeywords.in.
190 enum class BorderStyle : uint8_t {
191     None,
192     Hidden,
193     Inset,
194     Groove,
195     Outset,
196     Ridge,
197     Dotted,
198     Dashed,
199     Solid,
200     Double
201 };
202
203 enum class BorderPrecedence : uint8_t {
204     Off,
205     Table,
206     ColumnGroup,
207     Column,
208     RowGroup,
209     Row,
210     Cell
211 };
212
213 enum class OutlineIsAuto : uint8_t {
214     Off = 0,
215     On
216 };
217
218 enum class PositionType : uint8_t {
219     Static = 0,
220     Relative = 1,
221     Absolute = 2,
222     Sticky = 3,
223     // This value is required to pack our bits efficiently in RenderObject.
224     Fixed = 6
225 };
226
227 enum class Float : uint8_t {
228     No,
229     Left,
230     Right
231 };
232
233 enum class MarginCollapse : uint8_t {
234     Collapse,
235     Separate,
236     Discard
237 };
238
239 // Box decoration attributes. Not inherited.
240
241 enum class BoxDecorationBreak : uint8_t {
242     Slice,
243     Clone
244 };
245
246 // Box attributes. Not inherited.
247
248 enum class BoxSizing : uint8_t {
249     ContentBox,
250     BorderBox
251 };
252
253 // Random visual rendering model attributes. Not inherited.
254
255 enum class Overflow : uint8_t {
256     Visible,
257     Hidden,
258     Scroll,
259     Auto,
260     PagedX,
261     PagedY
262 };
263
264 enum class VerticalAlign : uint8_t {
265     Baseline,
266     Middle,
267     Sub,
268     Super,
269     TextTop,
270     TextBottom,
271     Top,
272     Bottom,
273     BaselineMiddle,
274     Length
275 };
276
277 enum class Clear : uint8_t {
278     None = 0,
279     Left = 1,
280     Right = 2,
281     Both = 3
282 };
283
284 enum class TableLayoutType : uint8_t {
285     Auto,
286     Fixed
287 };
288
289 enum class TextCombine : uint8_t {
290     None,
291     Horizontal
292 };
293
294 enum class FillAttachment : uint8_t {
295     ScrollBackground,
296     LocalBackground,
297     FixedBackground
298 };
299
300 enum class FillBox : uint8_t {
301     Border,
302     Padding,
303     Content,
304     Text
305 };
306
307 enum class FillRepeat : uint8_t {
308     Repeat,
309     NoRepeat,
310     Round,
311     Space
312 };
313
314 enum class FillLayerType : uint8_t {
315     Background,
316     Mask
317 };
318
319 // CSS3 Background Values
320 enum class FillSizeType : uint8_t {
321     Contain,
322     Cover,
323     Size,
324     None
325 };
326
327 // CSS3 <position>
328 enum class Edge : uint8_t {
329     Top,
330     Right,
331     Bottom,
332     Left
333 };
334
335 // CSS3 Mask Source Types
336
337 enum class MaskSourceType : uint8_t {
338     Alpha,
339     Luminance
340 };
341
342 // CSS3 Marquee Properties
343
344 enum class MarqueeBehavior : uint8_t {
345     None,
346     Scroll,
347     Slide,
348     Alternate
349 };
350
351 enum class MarqueeDirection : uint8_t {
352     Auto,
353     Left,
354     Right,
355     Up,
356     Down,
357     Forward,
358     Backward
359 };
360
361 // Deprecated Flexible Box Properties
362
363 enum class BoxPack : uint8_t {
364     Start,
365     Center,
366     End,
367     Justify
368 };
369
370 enum class BoxAlignment : uint8_t {
371     Stretch,
372     Start,
373     Center,
374     End,
375     Baseline
376 };
377
378 enum class BoxOrient : uint8_t {
379     Horizontal,
380     Vertical
381 };
382
383 enum class BoxLines : uint8_t {
384     Single,
385     Multiple
386 };
387
388 enum class BoxDirection : uint8_t {
389     Normal,
390     Reverse
391 };
392
393 // CSS3 Flexbox Properties
394
395 enum class AlignContent : uint8_t {
396     FlexStart,
397     FlexEnd,
398     Center,
399     SpaceBetween,
400     SpaceAround,
401     Stretch
402 };
403
404 enum class FlexDirection : uint8_t {
405     Row,
406     RowReverse,
407     Column,
408     ColumnReverse
409 };
410
411 enum class FlexWrap : uint8_t {
412     NoWrap,
413     Wrap,
414     Reverse
415 };
416
417 enum class ItemPosition : uint8_t {
418     Legacy,
419     Auto,
420     Normal,
421     Stretch,
422     Baseline,
423     LastBaseline,
424     Center,
425     Start,
426     End,
427     SelfStart,
428     SelfEnd,
429     FlexStart,
430     FlexEnd,
431     Left,
432     Right
433 };
434
435 enum class OverflowAlignment : uint8_t {
436     Default,
437     Unsafe,
438     Safe
439 };
440
441 enum class ItemPositionType : uint8_t {
442     NonLegacy,
443     Legacy
444 };
445
446 enum class ContentPosition : uint8_t {
447     Normal,
448     Baseline,
449     LastBaseline,
450     Center,
451     Start,
452     End,
453     FlexStart,
454     FlexEnd,
455     Left,
456     Right
457 };
458
459 enum class ContentDistribution : uint8_t {
460     Default,
461     SpaceBetween,
462     SpaceAround,
463     SpaceEvenly,
464     Stretch
465 };
466
467
468 enum class TextSecurity : uint8_t {
469     None,
470     Disc,
471     Circle,
472     Square
473 };
474
475 // CSS3 User Modify Properties
476
477 enum class UserModify : uint8_t {
478     ReadOnly,
479     ReadWrite,
480     ReadWritePlaintextOnly
481 };
482
483 // CSS3 User Drag Values
484
485 enum class UserDrag : uint8_t {
486     Auto,
487     None,
488     Element
489 };
490
491 // CSS3 User Select Values
492
493 enum class UserSelect : uint8_t {
494     None,
495     Text,
496     All
497 };
498
499 // CSS3 Image Values
500 enum class ObjectFit : uint8_t {
501     Fill,
502     Contain,
503     Cover,
504     None,
505     ScaleDown
506 };
507
508 enum class AspectRatioType : uint8_t {
509     Auto,
510     FromIntrinsic,
511     FromDimensions,
512     Specified
513 };
514
515 enum class WordBreak : uint8_t {
516     Normal,
517     BreakAll,
518     KeepAll,
519     BreakWord
520 };
521
522 enum class OverflowWrap : uint8_t {
523     Normal,
524     Break
525 };
526
527 enum class NBSPMode : uint8_t {
528     Normal,
529     Space
530 };
531
532 enum class LineBreak : uint8_t {
533     Auto,
534     Loose,
535     Normal,
536     Strict,
537     AfterWhiteSpace,
538     Anywhere
539 };
540
541 enum class Resize : uint8_t {
542     None,
543     Both,
544     Horizontal,
545     Vertical
546 };
547
548 // The order of this enum must match the order of the list style types in CSSValueKeywords.in.
549 enum class ListStyleType : uint8_t {
550     Disc,
551     Circle,
552     Square,
553     Decimal,
554     DecimalLeadingZero,
555     ArabicIndic,
556     Binary,
557     Bengali,
558     Cambodian,
559     Khmer,
560     Devanagari,
561     Gujarati,
562     Gurmukhi,
563     Kannada,
564     LowerHexadecimal,
565     Lao,
566     Malayalam,
567     Mongolian,
568     Myanmar,
569     Octal,
570     Oriya,
571     Persian,
572     Urdu,
573     Telugu,
574     Tibetan,
575     Thai,
576     UpperHexadecimal,
577     LowerRoman,
578     UpperRoman,
579     LowerGreek,
580     LowerAlpha,
581     LowerLatin,
582     UpperAlpha,
583     UpperLatin,
584     Afar,
585     EthiopicHalehameAaEt,
586     EthiopicHalehameAaEr,
587     Amharic,
588     EthiopicHalehameAmEt,
589     AmharicAbegede,
590     EthiopicAbegedeAmEt,
591     CjkEarthlyBranch,
592     CjkHeavenlyStem,
593     Ethiopic,
594     EthiopicHalehameGez,
595     EthiopicAbegede,
596     EthiopicAbegedeGez,
597     HangulConsonant,
598     Hangul,
599     LowerNorwegian,
600     Oromo,
601     EthiopicHalehameOmEt,
602     Sidama,
603     EthiopicHalehameSidEt,
604     Somali,
605     EthiopicHalehameSoEt,
606     Tigre,
607     EthiopicHalehameTig,
608     TigrinyaEr,
609     EthiopicHalehameTiEr,
610     TigrinyaErAbegede,
611     EthiopicAbegedeTiEr,
612     TigrinyaEt,
613     EthiopicHalehameTiEt,
614     TigrinyaEtAbegede,
615     EthiopicAbegedeTiEt,
616     UpperGreek,
617     UpperNorwegian,
618     Asterisks,
619     Footnotes,
620     Hebrew,
621     Armenian,
622     LowerArmenian,
623     UpperArmenian,
624     Georgian,
625     CJKIdeographic,
626     Hiragana,
627     Katakana,
628     HiraganaIroha,
629     KatakanaIroha,
630     None
631 };
632
633 enum class QuoteType : uint8_t {
634     OpenQuote,
635     CloseQuote,
636     NoOpenQuote,
637     NoCloseQuote
638 };
639
640 enum class BorderFit : uint8_t {
641     Border,
642     Lines
643 };
644
645 enum class AnimationFillMode : uint8_t {
646     None,
647     Forwards,
648     Backwards,
649     Both
650 };
651
652 enum class AnimationPlayState : uint8_t {
653     Playing = 0x0,
654     Paused = 0x1
655 };
656
657 enum class WhiteSpace : uint8_t {
658     Normal,
659     Pre,
660     PreWrap,
661     PreLine,
662     NoWrap,
663     KHTMLNoWrap,
664     BreakSpaces
665 };
666
667 // The order of this enum must match the order of the text align values in CSSValueKeywords.in.
668 enum class TextAlignMode : uint8_t {
669     Left,
670     Right,
671     Center,
672     Justify,
673     WebKitLeft,
674     WebKitRight,
675     WebKitCenter,
676     Start,
677     End,
678 };
679
680 enum class TextTransform : uint8_t {
681     Capitalize,
682     Uppercase,
683     Lowercase,
684     None
685 };
686
687 #if ENABLE(LETTERPRESS)
688 static const size_t TextDecorationBits = 5;
689 #else
690 static const size_t TextDecorationBits = 4;
691 #endif
692 enum class TextDecoration : uint8_t {
693     None          = 0,
694     Underline     = 1 << 0,
695     Overline      = 1 << 1,
696     LineThrough   = 1 << 2,
697     Blink         = 1 << 3,
698 #if ENABLE(LETTERPRESS)
699     Letterpress   = 1 << 4,
700 #endif
701 };
702
703 enum class TextDecorationStyle : uint8_t {
704     Solid,
705     Double,
706     Dotted,
707     Dashed,
708     Wavy
709 };
710
711 #if ENABLE(CSS3_TEXT)
712 enum class TextAlignLast : uint8_t {
713     Auto,
714     Start,
715     End,
716     Left,
717     Right,
718     Center,
719     Justify
720 };
721
722 enum class TextJustify : uint8_t {
723     Auto,
724     None,
725     InterWord,
726     Distribute
727 };
728 #endif // CSS3_TEXT
729
730 enum class TextDecorationSkip : uint8_t {
731     None      = 0,
732     Ink       = 1 << 0,
733     Objects   = 1 << 1,
734     Auto      = 1 << 2
735 };
736
737 enum class TextUnderlinePosition : uint8_t {
738     // FIXME: Implement support for 'under left' and 'under right' values.
739     Auto,
740     Under,
741     FromFont
742 };
743
744 enum class TextZoom : uint8_t {
745     Normal,
746     Reset
747 };
748
749 enum class BreakBetween : uint8_t {
750     Auto,
751     Avoid,
752     AvoidColumn,
753     AvoidPage,
754     Column,
755     Page,
756     LeftPage,
757     RightPage,
758     RectoPage,
759     VersoPage
760 };
761 bool alwaysPageBreak(BreakBetween);
762     
763 enum class BreakInside : uint8_t {
764     Auto,
765     Avoid,
766     AvoidColumn,
767     AvoidPage
768 };
769
770 enum class HangingPunctuation : uint8_t {
771     None      = 0,
772     First     = 1 << 0,
773     Last      = 1 << 1,
774     AllowEnd  = 1 << 2,
775     ForceEnd  = 1 << 3
776 };
777
778 enum class EmptyCell : uint8_t {
779     Show,
780     Hide
781 };
782
783 enum class CaptionSide : uint8_t {
784     Top,
785     Bottom,
786     Left,
787     Right
788 };
789
790 enum class ListStylePosition : uint8_t {
791     Outside,
792     Inside
793 };
794
795 enum class Visibility : uint8_t {
796     Visible,
797     Hidden,
798     Collapse
799 };
800
801 enum class CursorType : uint8_t {
802     // The following must match the order in CSSValueKeywords.in.
803     Auto,
804     Default,
805     // None
806     ContextMenu,
807     Help,
808     Pointer,
809     Progress,
810     Wait,
811     Cell,
812     Crosshair,
813     Text,
814     VerticalText,
815     Alias,
816     // Copy
817     Move,
818     NoDrop,
819     NotAllowed,
820     Grab,
821     Grabbing,
822     EResize,
823     NResize,
824     NEResize,
825     NWResize,
826     SResize,
827     SEResize,
828     SWResize,
829     WResize,
830     EWResize,
831     NSResize,
832     NESWResize,
833     NWSEResize,
834     ColumnResize,
835     RowResize,
836     AllScroll,
837     ZoomIn,
838     ZoomOut,
839
840     // The following are handled as exceptions so don't need to match.
841     Copy,
842     None
843 };
844
845 #if ENABLE(CURSOR_VISIBILITY)
846 enum class CursorVisibility : uint8_t {
847     Auto,
848     AutoHide,
849 };
850 #endif
851
852 // The order of this enum must match the order of the display values in CSSValueKeywords.in.
853 enum class DisplayType : uint8_t {
854     Inline,
855     Block,
856     ListItem,
857     Compact,
858     InlineBlock,
859     Table,
860     InlineTable,
861     TableRowGroup,
862     TableHeaderGroup,
863     TableFooterGroup,
864     TableRow,
865     TableColumnGroup,
866     TableColumn,
867     TableCell,
868     TableCaption,
869     Box,
870     InlineBox,
871     Flex,
872     WebKitFlex,
873     InlineFlex,
874     WebKitInlineFlex,
875     Contents,
876     Grid,
877     InlineGrid,
878     FlowRoot,
879     None
880 };
881
882 enum class InsideLink : uint8_t {
883     NotInside,
884     InsideUnvisited,
885     InsideVisited
886 };
887     
888 enum class PointerEvents : uint8_t {
889     None,
890     Auto,
891     Stroke,
892     Fill,
893     Painted,
894     Visible,
895     VisibleStroke,
896     VisibleFill,
897     VisiblePainted,
898     All
899 };
900
901 enum class TransformStyle3D : uint8_t {
902     Flat,
903     Preserve3D
904 };
905
906 enum class BackfaceVisibility : uint8_t {
907     Visible,
908     Hidden
909 };
910
911 enum class TransformBox : uint8_t {
912     BorderBox,
913     FillBox,
914     ViewBox
915 };
916
917 enum class LineClamp : uint8_t {
918     LineCount,
919     Percentage
920 };
921
922 enum class Hyphens : uint8_t {
923     None,
924     Manual,
925     Auto
926 };
927
928 enum class SpeakAs : uint8_t {
929     Normal             = 0,
930     SpellOut           = 1 << 0,
931     Digits             = 1 << 1,
932     LiteralPunctuation = 1 << 2,
933     NoPunctuation      = 1 << 3
934 };
935
936 enum class TextEmphasisFill : uint8_t {
937     Filled,
938     Open
939 };
940
941 enum class TextEmphasisMark : uint8_t {
942     None,
943     Auto,
944     Dot,
945     Circle,
946     DoubleCircle,
947     Triangle,
948     Sesame,
949     Custom
950 };
951
952 enum class TextEmphasisPosition : uint8_t {
953     Over  = 1 << 0,
954     Under = 1 << 1,
955     Left  = 1 << 2,
956     Right = 1 << 3
957 };
958
959 enum class TextOrientation : uint8_t {
960     Mixed,
961     Upright,
962     Sideways
963 };
964
965 enum class TextOverflow : uint8_t {
966     Clip = 0,
967     Ellipsis
968 };
969
970 enum class ImageRendering : uint8_t {
971     Auto = 0,
972     OptimizeSpeed,
973     OptimizeQuality,
974     CrispEdges,
975     Pixelated
976 };
977
978 enum class ImageResolutionSource : uint8_t {
979     Specified = 0,
980     FromImage
981 };
982
983 enum class ImageResolutionSnap : uint8_t {
984     None = 0,
985     Pixels
986 };
987
988 enum class Order : uint8_t {
989     Logical = 0,
990     Visual
991 };
992
993 enum class ColumnAxis : uint8_t {
994     Horizontal,
995     Vertical,
996     Auto
997 };
998
999 enum class ColumnProgression : uint8_t {
1000     Normal,
1001     Reverse
1002 };
1003
1004 enum class LineSnap : uint8_t {
1005     None,
1006     Baseline,
1007     Contain
1008 };
1009
1010 enum class LineAlign : uint8_t {
1011     None,
1012     Edges
1013 };
1014
1015 enum class RubyPosition : uint8_t {
1016     Before,
1017     After,
1018     InterCharacter
1019 };
1020
1021 #if ENABLE(DARK_MODE_CSS)
1022 enum class ColorScheme : uint8_t {
1023     Light = 1 << 0,
1024     Dark = 1 << 1
1025 };
1026
1027 static const size_t ColorSchemeBits = 2;
1028 #endif
1029
1030 static const size_t GridAutoFlowBits = 4;
1031 enum InternalGridAutoFlowAlgorithm {
1032     InternalAutoFlowAlgorithmSparse = 1 << 0,
1033     InternalAutoFlowAlgorithmDense  = 1 << 1,
1034 };
1035
1036 enum InternalGridAutoFlowDirection {
1037     InternalAutoFlowDirectionRow    = 1 << 2,
1038     InternalAutoFlowDirectionColumn = 1 << 3
1039 };
1040
1041 enum GridAutoFlow {
1042     AutoFlowRow = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionRow,
1043     AutoFlowColumn = InternalAutoFlowAlgorithmSparse | InternalAutoFlowDirectionColumn,
1044     AutoFlowRowDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionRow,
1045     AutoFlowColumnDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionColumn
1046 };
1047
1048 enum class AutoRepeatType : uint8_t {
1049     None,
1050     Fill,
1051     Fit
1052 };
1053
1054 // Reasonable maximum to prevent insane font sizes from causing crashes on some platforms (such as Windows).
1055 static const float maximumAllowedFontSize = 1000000.0f;
1056
1057 #if ENABLE(CSS3_TEXT)
1058
1059 enum class TextIndentLine : uint8_t {
1060     FirstLine,
1061     EachLine
1062 };
1063
1064 enum class TextIndentType : uint8_t {
1065     Normal,
1066     Hanging
1067 };
1068
1069 #endif
1070
1071 enum class Isolation : uint8_t {
1072     Auto,
1073     Isolate
1074 };
1075
1076 // Fill, Stroke, ViewBox are just used for SVG.
1077 enum class CSSBoxType : uint8_t {
1078     BoxMissing = 0,
1079     MarginBox,
1080     BorderBox,
1081     PaddingBox,
1082     ContentBox,
1083     FillBox,
1084     StrokeBox,
1085     ViewBox
1086 };
1087
1088 #if ENABLE(CSS_SCROLL_SNAP)
1089 enum class ScrollSnapStrictness : uint8_t {
1090     None,
1091     Proximity,
1092     Mandatory
1093 };
1094
1095 enum class ScrollSnapAxis : uint8_t {
1096     XAxis,
1097     YAxis,
1098     Block,
1099     Inline,
1100     Both
1101 };
1102
1103 enum class ScrollSnapAxisAlignType : uint8_t {
1104     None,
1105     Start,
1106     Center,
1107     End
1108 };
1109 #endif
1110
1111 #if ENABLE(CSS_TRAILING_WORD)
1112 enum class TrailingWord : uint8_t {
1113     Auto,
1114     PartiallyBalanced
1115 };
1116 #endif
1117
1118 #if ENABLE(APPLE_PAY)
1119 enum class ApplePayButtonStyle : uint8_t {
1120     White,
1121     WhiteOutline,
1122     Black,
1123 };
1124
1125 enum class ApplePayButtonType : uint8_t {
1126     Plain,
1127     Buy,
1128     SetUp,
1129     Donate,
1130 #if ENABLE(APPLE_PAY_SESSION_V4)
1131     CheckOut,
1132     Book,
1133     Subscribe,
1134 #endif
1135 };
1136 #endif
1137
1138 // These are all minimized combinations of paint-order.
1139 enum class PaintOrder : uint8_t {
1140     Normal,
1141     Fill,
1142     FillMarkers,
1143     Stroke,
1144     StrokeMarkers,
1145     Markers,
1146     MarkersStroke
1147 };
1148
1149 enum class PaintType : uint8_t {
1150     Fill,
1151     Stroke,
1152     Markers
1153 };
1154
1155 enum class FontLoadingBehavior : uint8_t {
1156     Auto,
1157     Block,
1158     Swap,
1159     Fallback,
1160     Optional
1161 };
1162
1163 extern const float defaultMiterLimit;
1164
1165 WTF::TextStream& operator<<(WTF::TextStream&, AnimationFillMode);
1166 WTF::TextStream& operator<<(WTF::TextStream&, AnimationPlayState);
1167 #if ENABLE(APPLE_PAY)
1168 WTF::TextStream& operator<<(WTF::TextStream&, ApplePayButtonStyle);
1169 WTF::TextStream& operator<<(WTF::TextStream&, ApplePayButtonType);
1170 #endif
1171 WTF::TextStream& operator<<(WTF::TextStream&, AspectRatioType);
1172 WTF::TextStream& operator<<(WTF::TextStream&, AutoRepeatType);
1173 WTF::TextStream& operator<<(WTF::TextStream&, BackfaceVisibility);
1174 WTF::TextStream& operator<<(WTF::TextStream&, BorderCollapse);
1175 WTF::TextStream& operator<<(WTF::TextStream&, BorderFit);
1176 WTF::TextStream& operator<<(WTF::TextStream&, BorderStyle);
1177 WTF::TextStream& operator<<(WTF::TextStream&, BoxAlignment);
1178 WTF::TextStream& operator<<(WTF::TextStream&, BoxDecorationBreak);
1179 WTF::TextStream& operator<<(WTF::TextStream&, BoxDirection);
1180 WTF::TextStream& operator<<(WTF::TextStream&, BoxLines);
1181 WTF::TextStream& operator<<(WTF::TextStream&, BoxOrient);
1182 WTF::TextStream& operator<<(WTF::TextStream&, BoxPack);
1183 WTF::TextStream& operator<<(WTF::TextStream&, BoxSizing);
1184 WTF::TextStream& operator<<(WTF::TextStream&, BreakBetween);
1185 WTF::TextStream& operator<<(WTF::TextStream&, BreakInside);
1186 WTF::TextStream& operator<<(WTF::TextStream&, CSSBoxType);
1187 WTF::TextStream& operator<<(WTF::TextStream&, CSSReflectionDirection);
1188 WTF::TextStream& operator<<(WTF::TextStream&, CaptionSide);
1189 WTF::TextStream& operator<<(WTF::TextStream&, Clear);
1190 #if ENABLE(DARK_MODE_CSS)
1191 WTF::TextStream& operator<<(WTF::TextStream&, ColorScheme);
1192 #endif
1193 WTF::TextStream& operator<<(WTF::TextStream&, ColumnAxis);
1194 WTF::TextStream& operator<<(WTF::TextStream&, ColumnFill);
1195 WTF::TextStream& operator<<(WTF::TextStream&, ColumnProgression);
1196 WTF::TextStream& operator<<(WTF::TextStream&, ColumnSpan);
1197 WTF::TextStream& operator<<(WTF::TextStream&, ContentDistribution);
1198 WTF::TextStream& operator<<(WTF::TextStream&, ContentPosition);
1199 WTF::TextStream& operator<<(WTF::TextStream&, CursorType);
1200 #if ENABLE(CURSOR_VISIBILITY)
1201 WTF::TextStream& operator<<(WTF::TextStream&, CursorVisibility);
1202 #endif
1203 WTF::TextStream& operator<<(WTF::TextStream&, DisplayType);
1204 WTF::TextStream& operator<<(WTF::TextStream&, Edge);
1205 WTF::TextStream& operator<<(WTF::TextStream&, EmptyCell);
1206 WTF::TextStream& operator<<(WTF::TextStream&, FillAttachment);
1207 WTF::TextStream& operator<<(WTF::TextStream&, FillBox);
1208 WTF::TextStream& operator<<(WTF::TextStream&, FillRepeat);
1209 WTF::TextStream& operator<<(WTF::TextStream&, FillSizeType);
1210 WTF::TextStream& operator<<(WTF::TextStream&, FlexDirection);
1211 WTF::TextStream& operator<<(WTF::TextStream&, FlexWrap);
1212 WTF::TextStream& operator<<(WTF::TextStream&, Float);
1213 WTF::TextStream& operator<<(WTF::TextStream&, GridAutoFlow);
1214 WTF::TextStream& operator<<(WTF::TextStream&, HangingPunctuation);
1215 WTF::TextStream& operator<<(WTF::TextStream&, Hyphens);
1216 WTF::TextStream& operator<<(WTF::TextStream&, ImageRendering);
1217 WTF::TextStream& operator<<(WTF::TextStream&, InsideLink);
1218 WTF::TextStream& operator<<(WTF::TextStream&, Isolation);
1219 WTF::TextStream& operator<<(WTF::TextStream&, ItemPosition);
1220 WTF::TextStream& operator<<(WTF::TextStream&, ItemPositionType);
1221 WTF::TextStream& operator<<(WTF::TextStream&, LineAlign);
1222 WTF::TextStream& operator<<(WTF::TextStream&, LineBreak);
1223 WTF::TextStream& operator<<(WTF::TextStream&, LineSnap);
1224 WTF::TextStream& operator<<(WTF::TextStream&, ListStylePosition);
1225 WTF::TextStream& operator<<(WTF::TextStream&, ListStyleType);
1226 WTF::TextStream& operator<<(WTF::TextStream&, MarginCollapse);
1227 WTF::TextStream& operator<<(WTF::TextStream&, MarqueeBehavior);
1228 WTF::TextStream& operator<<(WTF::TextStream&, MarqueeDirection);
1229 WTF::TextStream& operator<<(WTF::TextStream&, MaskSourceType);
1230 WTF::TextStream& operator<<(WTF::TextStream&, NBSPMode);
1231 WTF::TextStream& operator<<(WTF::TextStream&, ObjectFit);
1232 WTF::TextStream& operator<<(WTF::TextStream&, Order);
1233 WTF::TextStream& operator<<(WTF::TextStream&, WebCore::Overflow);
1234 WTF::TextStream& operator<<(WTF::TextStream&, OverflowAlignment);
1235 WTF::TextStream& operator<<(WTF::TextStream&, OverflowWrap);
1236 WTF::TextStream& operator<<(WTF::TextStream&, PaintOrder);
1237 WTF::TextStream& operator<<(WTF::TextStream&, PointerEvents);
1238 WTF::TextStream& operator<<(WTF::TextStream&, PositionType);
1239 WTF::TextStream& operator<<(WTF::TextStream&, PrintColorAdjust);
1240 WTF::TextStream& operator<<(WTF::TextStream&, PseudoId);
1241 WTF::TextStream& operator<<(WTF::TextStream&, QuoteType);
1242 WTF::TextStream& operator<<(WTF::TextStream&, Resize);
1243 WTF::TextStream& operator<<(WTF::TextStream&, RubyPosition);
1244 #if ENABLE(CSS_SCROLL_SNAP)
1245 WTF::TextStream& operator<<(WTF::TextStream&, ScrollSnapAxis);
1246 WTF::TextStream& operator<<(WTF::TextStream&, ScrollSnapAxisAlignType);
1247 WTF::TextStream& operator<<(WTF::TextStream&, ScrollSnapStrictness);
1248 #endif
1249 WTF::TextStream& operator<<(WTF::TextStream&, SpeakAs);
1250 WTF::TextStream& operator<<(WTF::TextStream&, StyleDifference);
1251 WTF::TextStream& operator<<(WTF::TextStream&, TableLayoutType);
1252 WTF::TextStream& operator<<(WTF::TextStream&, TextAlignMode);
1253 WTF::TextStream& operator<<(WTF::TextStream&, TextCombine);
1254 WTF::TextStream& operator<<(WTF::TextStream&, TextDecoration);
1255 WTF::TextStream& operator<<(WTF::TextStream&, TextDecorationSkip);
1256 WTF::TextStream& operator<<(WTF::TextStream&, TextDecorationStyle);
1257 WTF::TextStream& operator<<(WTF::TextStream&, TextEmphasisFill);
1258 WTF::TextStream& operator<<(WTF::TextStream&, TextEmphasisMark);
1259 WTF::TextStream& operator<<(WTF::TextStream&, TextEmphasisPosition);
1260 WTF::TextStream& operator<<(WTF::TextStream&, TextOrientation);
1261 WTF::TextStream& operator<<(WTF::TextStream&, TextOverflow);
1262 WTF::TextStream& operator<<(WTF::TextStream&, TextSecurity);
1263 WTF::TextStream& operator<<(WTF::TextStream&, TextTransform);
1264 WTF::TextStream& operator<<(WTF::TextStream&, TextUnderlinePosition);
1265 WTF::TextStream& operator<<(WTF::TextStream&, TextZoom);
1266 WTF::TextStream& operator<<(WTF::TextStream&, TransformBox);
1267 WTF::TextStream& operator<<(WTF::TextStream&, TransformStyle3D);
1268 WTF::TextStream& operator<<(WTF::TextStream&, UserDrag);
1269 WTF::TextStream& operator<<(WTF::TextStream&, UserModify);
1270 WTF::TextStream& operator<<(WTF::TextStream&, UserSelect);
1271 WTF::TextStream& operator<<(WTF::TextStream&, VerticalAlign);
1272 WTF::TextStream& operator<<(WTF::TextStream&, Visibility);
1273 WTF::TextStream& operator<<(WTF::TextStream&, WhiteSpace);
1274 WTF::TextStream& operator<<(WTF::TextStream&, WordBreak);
1275
1276 } // namespace WebCore