Browse Source

dom: started parsing justify-self and -content

mattias 11 months ago
parent
commit
7c1bbbe1e2
1 changed files with 129 additions and 13 deletions
  1. 129 13
      src/base/fresnel.dom.pas

+ 129 - 13
src/base/fresnel.dom.pas

@@ -149,7 +149,9 @@ type
     fcaFlexShrink,
     fcaFlexShrink,
     fcaFlexWrap,
     fcaFlexWrap,
     fcaFlexFlow,
     fcaFlexFlow,
-    fcaFlex
+    fcaFlex,
+    fcaJustifyContent,
+    fcaJustifySelf
     );
     );
   TFresnelCSSAttributes = set of TFresnelCSSAttribute;
   TFresnelCSSAttributes = set of TFresnelCSSAttribute;
   TFresnelCSSAttributeArray = array of TFresnelCSSAttribute;
   TFresnelCSSAttributeArray = array of TFresnelCSSAttribute;
@@ -251,7 +253,9 @@ const
     'flex-shrink',
     'flex-shrink',
     'flex-wrap',
     'flex-wrap',
     'flex-flow',
     'flex-flow',
-    'flex'
+    'flex',
+    'justify-content',
+    'justify-self'
     );
     );
 
 
 type
 type
@@ -407,6 +411,8 @@ type
     function CheckFlexWrap(Resolver: TCSSBaseResolver): boolean; virtual;
     function CheckFlexWrap(Resolver: TCSSBaseResolver): boolean; virtual;
     function CheckFlexFlow(Resolver: TCSSBaseResolver): boolean; virtual;
     function CheckFlexFlow(Resolver: TCSSBaseResolver): boolean; virtual;
     function CheckFlex(Resolver: TCSSBaseResolver): boolean; virtual;
     function CheckFlex(Resolver: TCSSBaseResolver): boolean; virtual;
+    function CheckJustifyContent(Resolver: TCSSBaseResolver): boolean; virtual;
+    function CheckJustifySelf(Resolver: TCSSBaseResolver): boolean; virtual;
 
 
     // utility check/parse functions
     // utility check/parse functions
     function CheckLinearGradient(Resolver: TCSSBaseResolver; Check: boolean): boolean; virtual;
     function CheckLinearGradient(Resolver: TCSSBaseResolver; Check: boolean): boolean; virtual;
@@ -421,6 +427,7 @@ type
       out aSystemFont: TCSSNumericalID; out aFamily, aStyle, aVariant, aWeight, aWidth, aSize, aLineHeight: TCSSString): boolean; virtual;
       out aSystemFont: TCSSNumericalID; out aFamily, aStyle, aVariant, aWeight, aWidth, aSize, aLineHeight: TCSSString): boolean; virtual;
     function ReadFlex(Resolver: TCSSBaseResolver; Check: boolean; out Grow, Shrink, Basis: TCSSString): boolean; virtual;
     function ReadFlex(Resolver: TCSSBaseResolver; Check: boolean; out Grow, Shrink, Basis: TCSSString): boolean; virtual;
     function ReadFlexFlow(Resolver: TCSSBaseResolver; Check: boolean; out Direction, Wrap: TCSSString): boolean; virtual;
     function ReadFlexFlow(Resolver: TCSSBaseResolver; Check: boolean; out Direction, Wrap: TCSSString): boolean; virtual;
+    function ReadJustifySelf(Resolver: TCSSBaseResolver; Check: boolean; out MainKW, SubKW: TCSSNumericalID): boolean; virtual;
     function IsColor(const ResValue: TCSSResCompValue): boolean; virtual;
     function IsColor(const ResValue: TCSSResCompValue): boolean; virtual;
     procedure SplitLonghandSides(var AttrIDs: TCSSNumericalIDArray; var Values: TCSSStringArray;
     procedure SplitLonghandSides(var AttrIDs: TCSSNumericalIDArray; var Values: TCSSStringArray;
       Top, Right, Bottom, Left: TFresnelCSSAttribute; const Found: TCSSStringArray);
       Top, Right, Bottom, Left: TFresnelCSSAttribute; const Found: TCSSStringArray);
@@ -491,7 +498,9 @@ type
       kwAbsolute = kwAuto+1;
       kwAbsolute = kwAuto+1;
       kwAlias = kwAbsolute+1;
       kwAlias = kwAbsolute+1;
       kwAllScroll = kwAlias+1; // all-scroll
       kwAllScroll = kwAlias+1; // all-scroll
-      kwBlock = kwAllScroll+1;
+      kwAnchorCenter = kwAllScroll+1; // anchor-center
+      kwBaseline = kwAnchorCenter+1;
+      kwBlock = kwBaseline+1;
       kwBlockEnd = kwBlock+1; // block-end
       kwBlockEnd = kwBlock+1; // block-end
       kwBlockStart = kwBlockEnd+1; // block-start
       kwBlockStart = kwBlockEnd+1; // block-start
       kwBold = kwBlockStart+1;
       kwBold = kwBlockStart+1;
@@ -524,15 +533,19 @@ type
       kwDefault = kwDashed+1;
       kwDefault = kwDashed+1;
       kwDotted = kwDefault+1;
       kwDotted = kwDefault+1;
       kwDouble = kwDotted+1;
       kwDouble = kwDotted+1;
-      kwEResize = kwDouble+1; // e-resize
+      kwEnd = kwDouble+1;
+      kwEResize = kwEnd+1; // e-resize
       kwEWResize = kwEResize+1; // ew-resize
       kwEWResize = kwEResize+1; // ew-resize
       kwExpanded = kwEWResize+1;
       kwExpanded = kwEWResize+1;
       kwExtraCondensed = kwExpanded+1; // extra-condensed
       kwExtraCondensed = kwExpanded+1; // extra-condensed
       kwExtraExpanded = kwExtraCondensed+1; // extra-expanded
       kwExtraExpanded = kwExtraCondensed+1; // extra-expanded
-      kwFitContent = kwExtraExpanded+1; // fit-content
+      kwFirst = kwExtraExpanded+1;
+      kwFitContent = kwFirst+1; // fit-content
       kwFixed = kwFitContent+1;
       kwFixed = kwFitContent+1;
       kwFlex = kwFixed+1;
       kwFlex = kwFixed+1;
-      kwFlow = kwFlex+1;
+      kwFlexEnd = kwFlex+1;
+      kwFlexStart = kwFlexEnd+1;
+      kwFlow = kwFlexStart+1;
       kwFlowRoot = kwFlow+1; // flow-root
       kwFlowRoot = kwFlow+1; // flow-root
       kwGrab = kwFlowRoot+1;
       kwGrab = kwFlowRoot+1;
       kwGrabbing = kwGrab+1;
       kwGrabbing = kwGrab+1;
@@ -551,7 +564,8 @@ type
       kwItalic = kwInset+1;
       kwItalic = kwInset+1;
       kwLarge = kwItalic+1;
       kwLarge = kwItalic+1;
       kwLarger = kwLarge+1;
       kwLarger = kwLarge+1;
-      kwLeft = kwLarger+1;
+      kwLast = kwLarger+1;
+      kwLeft = kwLast+1;
       kwLighter = kwLeft+1;
       kwLighter = kwLeft+1;
       kwLocal = kwLighter+1;
       kwLocal = kwLighter+1;
       kwLTR = kwLocal+1;
       kwLTR = kwLocal+1;
@@ -588,8 +602,11 @@ type
       kwRowResize = kwRow+1; // row-resize
       kwRowResize = kwRow+1; // row-resize
       kwRowReverse = kwRowResize+1; // row-reversed
       kwRowReverse = kwRowResize+1; // row-reversed
       kwRTL = kwRowReverse+1;
       kwRTL = kwRowReverse+1;
-      kwScroll = kwRTL+1;
-      kwSemiCondensed = kwScroll+1; // semi-condensed
+      kwSafe = kwRTL+1;
+      kwScroll = kwSafe+1;
+      kwSelfEnd = kwScroll+1; // self-end
+      kwSelfStart = kwSelfEnd+1; // self-start
+      kwSemiCondensed = kwSelfStart+1; // semi-condensed
       kwSemiExpanded = kwSemiCondensed+1; // semi-expanded
       kwSemiExpanded = kwSemiCondensed+1; // semi-expanded
       kwSEResize = kwSemiExpanded+1; // se-resize
       kwSEResize = kwSemiExpanded+1; // se-resize
       kwSmall = kwSEResize+1;
       kwSmall = kwSEResize+1;
@@ -598,11 +615,16 @@ type
       kwSmaller = kwSmallCaption+1;
       kwSmaller = kwSmallCaption+1;
       kwSolid = kwSmaller+1;
       kwSolid = kwSmaller+1;
       kwSpace = kwSolid+1;
       kwSpace = kwSolid+1;
-      kwSResize = kwSpace+1; // s-resize
-      kwStatic = kwSResize+1;
+      kwSpaceAround = kwSpace+1; // space-around
+      kwSpaceBetween = kwSpaceAround+1; // space-between
+      kwSpaceEvenly = kwSpaceBetween+1; // space-evenly
+      kwSResize = kwSpaceEvenly+1; // s-resize
+      kwStart = kwSResize+1;
+      kwStatic = kwStart+1;
       kwStatusBar = kwStatic+1; // status-bar
       kwStatusBar = kwStatic+1; // status-bar
       kwSticky = kwStatusBar+1;
       kwSticky = kwStatusBar+1;
-      kwSWResize = kwSticky+1; // sw-resize
+      kwStretch = kwSticky+1;
+      kwSWResize = kwStretch+1; // sw-resize
       kwText = kwSWResize+1;
       kwText = kwSWResize+1;
       kwThick = kwText+1;
       kwThick = kwText+1;
       kwThin = kwThick+1;
       kwThin = kwThick+1;
@@ -610,7 +632,8 @@ type
       kwTop = kwTo+1;
       kwTop = kwTo+1;
       kwUltraCondensed = kwTop+1; // ultra-condensed
       kwUltraCondensed = kwTop+1; // ultra-condensed
       kwUltraExpanded = kwUltraCondensed+1; // ultra-expanded
       kwUltraExpanded = kwUltraCondensed+1; // ultra-expanded
-      kwVerticalText = kwUltraExpanded+1; // vertical-text
+      kwUnsafe = kwUltraExpanded+1;
+      kwVerticalText = kwUnsafe+1; // vertical-text
       kwVisible = kwVerticalText+1;
       kwVisible = kwVerticalText+1;
       kwWait = kwVisible+1;
       kwWait = kwVisible+1;
       kwWrap = kwWait+1; // w-resize
       kwWrap = kwWait+1; // w-resize
@@ -729,6 +752,8 @@ type
     Chk_FlexGrow_Dim: TCSSCheckAttrParams_Dimension;
     Chk_FlexGrow_Dim: TCSSCheckAttrParams_Dimension;
     Chk_FlexShrink_Dim: TCSSCheckAttrParams_Dimension;
     Chk_FlexShrink_Dim: TCSSCheckAttrParams_Dimension;
     Chk_FlexWrap_KeywordIDs: TCSSNumericalIDArray;
     Chk_FlexWrap_KeywordIDs: TCSSNumericalIDArray;
+    Chk_JustifyContent_KeywordIDs: TCSSNumericalIDArray;
+    Chk_JustifySelf_KeywordIDs: TCSSNumericalIDArray;
 
 
     constructor Create;
     constructor Create;
     procedure Init; override;
     procedure Init; override;
@@ -1983,6 +2008,18 @@ begin
   Result:=ReadFlex(Resolver,true,Grow,Shrink,Basis);
   Result:=ReadFlex(Resolver,true,Grow,Shrink,Basis);
 end;
 end;
 
 
+function TFresnelCSSRegistry.CheckJustifyContent(Resolver: TCSSBaseResolver): boolean;
+begin
+  Result:=Resolver.CheckAttribute_Keyword(Chk_JustifyContent_KeywordIDs);
+end;
+
+function TFresnelCSSRegistry.CheckJustifySelf(Resolver: TCSSBaseResolver): boolean;
+var
+  MainKW, SubKW: TCSSNumericalID;
+begin
+  Result:=ReadJustifySelf(Resolver,true,MainKW,SubKW);
+end;
+
 function TFresnelCSSRegistry.ReadBackgroundRepeat(Resolver: TCSSBaseResolver; Check: boolean; out
 function TFresnelCSSRegistry.ReadBackgroundRepeat(Resolver: TCSSBaseResolver; Check: boolean; out
   X, Y: TCSSNumericalID): boolean;
   X, Y: TCSSNumericalID): boolean;
 // For example:
 // For example:
@@ -2411,6 +2448,59 @@ begin
   Result:=true;
   Result:=true;
 end;
 end;
 
 
+function TFresnelCSSRegistry.ReadJustifySelf(Resolver: TCSSBaseResolver; Check: boolean; out
+  MainKW, SubKW: TCSSNumericalID): boolean;
+var
+  KW: TCSSNumericalID;
+begin
+  Result:=false;
+  MainKW:=0;
+  SubKW:=0;
+  repeat
+    case Resolver.CurComp.Kind of
+    rvkKeyword:
+      begin
+        KW:=Resolver.CurComp.KeywordID;
+        case KW of
+        kwAuto, kwNormal,kwStart,kwEnd,kwFlexStart,kwFlexEnd,kwSelfStart,kwSelfEnd,kwCenter,kwLeft,kwRight,
+        kwAnchorCenter,kwSafe,kwUnsafe:
+          begin
+            if MainKW>0 then
+              exit;
+            if SubKW>0 then
+              exit;
+            MainKW:=KW;
+          end;
+        kwFirst,kwLast:
+          begin
+            if (MainKW>0) and (MainKW<>kwBaseline) then
+              exit;
+            if SubKW>0 then
+              exit;
+            SubKW:=KW;
+          end;
+        kwBaseline:
+          begin
+            if MainKW>0 then
+              exit;
+            if (SubKW>0) and (not (SubKW in [kwFirst,kwLast])) then
+              exit;
+            MainKW:=KW;
+          end;
+        else
+          exit;
+        end;
+      end;
+    rvkFunction:
+      if Resolver.CurComp.FunctionID=afVar then
+        exit(Check)
+      else
+        exit;
+    end;
+  until not Resolver.ReadNext;
+  Result:=true;
+end;
+
 procedure TFresnelCSSRegistry.SplitOverflow(Resolver: TCSSBaseResolver;
 procedure TFresnelCSSRegistry.SplitOverflow(Resolver: TCSSBaseResolver;
   var AttrIDs: TCSSNumericalIDArray; var Values: TCSSStringArray);
   var AttrIDs: TCSSNumericalIDArray; var Values: TCSSStringArray);
 var
 var
@@ -3232,6 +3322,8 @@ begin
   AddKW(kwAbsolute,'absolute'); // e.g. position
   AddKW(kwAbsolute,'absolute'); // e.g. position
   AddKW(kwAlias,'alias'); // e.g. cursor
   AddKW(kwAlias,'alias'); // e.g. cursor
   AddKW(kwAllScroll,'all-scroll'); // e.g. cursor
   AddKW(kwAllScroll,'all-scroll'); // e.g. cursor
+  AddKW(kwAnchorCenter,'anchor-center'); // e.g. justify-self
+  AddKW(kwBaseline,'baseline'); // e.g. justify-self
   AddKW(kwBlock,'block'); // e.g. display
   AddKW(kwBlock,'block'); // e.g. display
   AddKW(kwBlockEnd,'block-end'); // e.g. clear
   AddKW(kwBlockEnd,'block-end'); // e.g. clear
   AddKW(kwBlockStart,'block-start'); // e.g. clear
   AddKW(kwBlockStart,'block-start'); // e.g. clear
@@ -3265,14 +3357,18 @@ begin
   AddKW(kwDefault,'default'); // e.g. cursor
   AddKW(kwDefault,'default'); // e.g. cursor
   AddKW(kwDotted,'dotted'); // e.g. border-style
   AddKW(kwDotted,'dotted'); // e.g. border-style
   AddKW(kwDouble,'double'); // e.g. border-style
   AddKW(kwDouble,'double'); // e.g. border-style
+  AddKW(kwEnd,'end'); // e.g. justify-content
   AddKW(kwEResize,'e-resize'); // e.g. cursor
   AddKW(kwEResize,'e-resize'); // e.g. cursor
   AddKW(kwEWResize,'ew-resize'); // e.g. cursor
   AddKW(kwEWResize,'ew-resize'); // e.g. cursor
   AddKW(kwExpanded,'expanded'); // e.g. font-width
   AddKW(kwExpanded,'expanded'); // e.g. font-width
   AddKW(kwExtraCondensed,'extra-condensed'); // e.g. font-width
   AddKW(kwExtraCondensed,'extra-condensed'); // e.g. font-width
   AddKW(kwExtraExpanded,'extra-expanded'); // e.g. font-width
   AddKW(kwExtraExpanded,'extra-expanded'); // e.g. font-width
+  AddKW(kwFirst,'first'); // e.g. justify-self
   AddKW(kwFitContent,'fit-content'); // e.g. width, min-width
   AddKW(kwFitContent,'fit-content'); // e.g. width, min-width
   AddKW(kwFixed,'fixed'); // e.g. position, background-attachment
   AddKW(kwFixed,'fixed'); // e.g. position, background-attachment
   AddKW(kwFlex,'flex'); // e.g. display
   AddKW(kwFlex,'flex'); // e.g. display
+  AddKW(kwFlexEnd,'flex-end'); // e.g. justify-content
+  AddKW(kwFlexStart,'flex-start'); // e.g. justify-self
   AddKW(kwFlow,'flow'); // e.g. display
   AddKW(kwFlow,'flow'); // e.g. display
   AddKW(kwFlowRoot,'flow-root'); // e.g. display
   AddKW(kwFlowRoot,'flow-root'); // e.g. display
   AddKW(kwGrab,'grab'); // e.g. cursor
   AddKW(kwGrab,'grab'); // e.g. cursor
@@ -3292,6 +3388,7 @@ begin
   AddKW(kwItalic,'italic'); // e.g. font-style
   AddKW(kwItalic,'italic'); // e.g. font-style
   AddKW(kwLarge,'large'); // e.g. font-size
   AddKW(kwLarge,'large'); // e.g. font-size
   AddKW(kwLarger,'larger'); // e.g. font-size
   AddKW(kwLarger,'larger'); // e.g. font-size
+  AddKW(kwLast,'last'); // e.g. justify-self
   AddKW(kwLeft,'left'); // e.g. clear, float
   AddKW(kwLeft,'left'); // e.g. clear, float
   AddKW(kwLighter,'lighter'); // e.g. font-weight
   AddKW(kwLighter,'lighter'); // e.g. font-weight
   AddKW(kwLocal,'local'); // e.g. background-attachment
   AddKW(kwLocal,'local'); // e.g. background-attachment
@@ -3329,7 +3426,10 @@ begin
   AddKW(kwRowResize,'row-resize'); // e.g. cursor
   AddKW(kwRowResize,'row-resize'); // e.g. cursor
   AddKW(kwRowReverse,'row-reverse'); // e.g. flex-direction
   AddKW(kwRowReverse,'row-reverse'); // e.g. flex-direction
   AddKW(kwRTL,'rtl'); // e.g. direction
   AddKW(kwRTL,'rtl'); // e.g. direction
+  AddKW(kwSafe,'safe'); // e.g. justify-content
   AddKW(kwScroll,'scroll'); // e.g. overflow-x, background-attachment
   AddKW(kwScroll,'scroll'); // e.g. overflow-x, background-attachment
+  AddKW(kwSelfEnd,'self-end'); // e.g. justify-self
+  AddKW(kwSelfStart,'self-start'); // e.g. justify-self
   AddKW(kwSemiCondensed,'semi-condensed'); // e.g. font-width
   AddKW(kwSemiCondensed,'semi-condensed'); // e.g. font-width
   AddKW(kwSemiExpanded,'semi-expanded'); // e.g. font-width
   AddKW(kwSemiExpanded,'semi-expanded'); // e.g. font-width
   AddKW(kwSEResize,'se-resize'); // e.g. cursor
   AddKW(kwSEResize,'se-resize'); // e.g. cursor
@@ -3339,10 +3439,15 @@ begin
   AddKW(kwSmaller,'smaller'); // e.g. font-size
   AddKW(kwSmaller,'smaller'); // e.g. font-size
   AddKW(kwSolid,'solid'); // e.g. border-style
   AddKW(kwSolid,'solid'); // e.g. border-style
   AddKW(kwSpace,'space'); // e.g. background-repeat
   AddKW(kwSpace,'space'); // e.g. background-repeat
+  AddKW(kwSpaceAround,'space-around'); // e.g. justify-content
+  AddKW(kwSpaceBetween,'space-between'); // e.g. justify-content
+  AddKW(kwSpaceEvenly,'space-evenly'); // e.g. justify-content
   AddKW(kwSResize,'s-resize'); // e.g. cursor
   AddKW(kwSResize,'s-resize'); // e.g. cursor
+  AddKW(kwStart,'start'); // e.g. justify-content
   AddKW(kwStatic,'static'); // e.g. position
   AddKW(kwStatic,'static'); // e.g. position
   AddKW(kwStatusBar,'status-bar'); // e.g. font
   AddKW(kwStatusBar,'status-bar'); // e.g. font
   AddKW(kwSticky,'sticky'); // e.g. position
   AddKW(kwSticky,'sticky'); // e.g. position
+  AddKW(kwStretch,'stretch'); // e.g. justify-content
   AddKW(kwSWResize,'sw-resize'); // e.g. cursor
   AddKW(kwSWResize,'sw-resize'); // e.g. cursor
   AddKW(kwText,'text'); // e.g. cursor
   AddKW(kwText,'text'); // e.g. cursor
   AddKW(kwThick,'thick'); // e.g. border-left-width
   AddKW(kwThick,'thick'); // e.g. border-left-width
@@ -3351,6 +3456,7 @@ begin
   AddKW(kwTop,'top'); // e.g. clear
   AddKW(kwTop,'top'); // e.g. clear
   AddKW(kwUltraCondensed,'ultra-condensed'); // e.g. font-width
   AddKW(kwUltraCondensed,'ultra-condensed'); // e.g. font-width
   AddKW(kwUltraExpanded,'ultra-expanded'); // e.g. font-width
   AddKW(kwUltraExpanded,'ultra-expanded'); // e.g. font-width
+  AddKW(kwUnsafe,'unsafe'); // e.g. justify-content
   AddKW(kwVerticalText,'vertical-text'); // e.g. cursor
   AddKW(kwVerticalText,'vertical-text'); // e.g. cursor
   AddKW(kwVisible,'visible'); // e.g. overflow-x, visible
   AddKW(kwVisible,'visible'); // e.g. overflow-x, visible
   AddKW(kwWait,'wait'); // e.g. cursor
   AddKW(kwWait,'wait'); // e.g. cursor
@@ -3666,6 +3772,7 @@ begin
     kwSEResize,kwSWResize,kwWResize,kwEWResize,kwNSResize,kwNESWResize,kwNWSEResize,
     kwSEResize,kwSWResize,kwWResize,kwEWResize,kwNSResize,kwNESWResize,kwNWSEResize,
     kwColResize,kwRowResize,kwAllScroll,kwZoomIn,kwZoomOut];
     kwColResize,kwRowResize,kwAllScroll,kwZoomIn,kwZoomOut];
 
 
+  // flex
   AddFresnelLonghand(fcaFlexBasis,false,@CheckFlexBasis,'auto');
   AddFresnelLonghand(fcaFlexBasis,false,@CheckFlexBasis,'auto');
   Chk_FlexBasis_Dim.AllowedKeywordIDs:=[kwAuto,kwMaxContent,kwMinContent,kwFitContent,kwContent];
   Chk_FlexBasis_Dim.AllowedKeywordIDs:=[kwAuto,kwMaxContent,kwMinContent,kwFitContent,kwContent];
   Chk_FlexBasis_Dim.AllowedUnits:=cuAllLengthsAndPercent;
   Chk_FlexBasis_Dim.AllowedUnits:=cuAllLengthsAndPercent;
@@ -3685,6 +3792,15 @@ begin
   AddFresnelShorthand(fcaFlex,@CheckFlex,@SplitFlex,@GetFlex,
   AddFresnelShorthand(fcaFlex,@CheckFlex,@SplitFlex,@GetFlex,
     [fcaFlexGrow,fcaFlexShrink,fcaFlexBasis]);
     [fcaFlexGrow,fcaFlexShrink,fcaFlexBasis]);
 
 
+  // shared attributes of flex+grid
+  AddFresnelLonghand(fcaJustifyContent,false,@CheckJustifyContent,'normal');
+  Chk_JustifyContent_KeywordIDs:=[kwStart,kwEnd,kwFlexEnd,kwCenter,kwLeft,kwRight,kwNormal,
+    kwSpaceBetween,kwSpaceAround,kwSpaceEvenly,kwStretch,kwSafe,kwUnsafe];
+  AddFresnelLonghand(fcaJustifySelf,false,@CheckJustifySelf,'auto');
+  Chk_JustifySelf_KeywordIDs:=[kwAuto,kwNormal,kwStart,kwEnd,kwFlexStart,kwFlexEnd,
+    kwSelfStart,kwSelfEnd,kwCenter,kwLeft,kwRight,kwBaseline,kwFirst,kwLast,kwStretch,
+    kwAnchorCenter,kwSafe,kwUnsafe];
+
   // pseudo classes - - - - - - - - - - - - - - - - - - - - - -
   // pseudo classes - - - - - - - - - - - - - - - - - - - - - -
   for PseudoCl in TFresnelCSSPseudoClass do
   for PseudoCl in TFresnelCSSPseudoClass do
     AddFresnelPseudoClass(PseudoCl);
     AddFresnelPseudoClass(PseudoCl);