|
@@ -151,6 +151,9 @@ type
|
|
|
fcaFlexWrap,
|
|
|
fcaFlexFlow, // shorthand for flex-[direction,flex-wrap]
|
|
|
fcaFlex, // shorthand for flex-[grow,shrink,basis]
|
|
|
+ fcaAlignContent,
|
|
|
+ fcaAlignItems,
|
|
|
+ fcaAlignSelf,
|
|
|
fcaJustifyContent,
|
|
|
fcaJustifyItems,
|
|
|
fcaJustifySelf,
|
|
@@ -260,6 +263,9 @@ const
|
|
|
'flex-wrap',
|
|
|
'flex-flow',
|
|
|
'flex',
|
|
|
+ 'align-content',
|
|
|
+ 'align-items',
|
|
|
+ 'align-self',
|
|
|
'justify-content',
|
|
|
'justify-items',
|
|
|
'justify-self',
|
|
@@ -422,6 +428,9 @@ type
|
|
|
function CheckFlexWrap(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
|
function CheckFlexFlow(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
|
function CheckFlex(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
|
+ function CheckAlignContent(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
|
+ function CheckAlignItems(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
|
+ function CheckAlignSelf(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
|
function CheckJustifyContent(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
|
function CheckJustifyItems(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
|
function CheckJustifySelf(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
@@ -441,6 +450,9 @@ type
|
|
|
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 ReadFlexFlow(Resolver: TCSSBaseResolver; Check: boolean; out Direction, Wrap: TCSSString): boolean; virtual;
|
|
|
+ function ReadAlignContent(Resolver: TCSSBaseResolver; Check: boolean; out MainKW, SubKW: TCSSNumericalID): boolean; virtual;
|
|
|
+ function ReadAlignItems(Resolver: TCSSBaseResolver; Check: boolean; out MainKW, SubKW: TCSSNumericalID): boolean; virtual;
|
|
|
+ function ReadAlignSelf(Resolver: TCSSBaseResolver; Check: boolean; out MainKW, SubKW: TCSSNumericalID): boolean; virtual;
|
|
|
function ReadJustifySelf(Resolver: TCSSBaseResolver; Check: boolean; out MainKW, SubKW: TCSSNumericalID): boolean; virtual;
|
|
|
function ReadJustifyItems(Resolver: TCSSBaseResolver; Check: boolean; out MainKW, SubKW: TCSSNumericalID): boolean; virtual;
|
|
|
function ReadGap(Resolver: TCSSBaseResolver; Check: boolean; out Column, Row: TCSSString): boolean; virtual;
|
|
@@ -571,7 +583,8 @@ type
|
|
|
kwGroove = kwGrid+1;
|
|
|
kwHelp = kwGroove+1;
|
|
|
kwHidden = kwHelp+1;
|
|
|
- kwIcon = kwHidden+1;
|
|
|
+ kwHorizontalTB = kwHidden+1;
|
|
|
+ kwIcon = kwHorizontalTB+1;
|
|
|
kwIn = kwIcon+1;
|
|
|
kwInline = kwIn+1;
|
|
|
kwInlineBlock = kwInline+1; // inline-block
|
|
@@ -628,7 +641,9 @@ type
|
|
|
kwSemiCondensed = kwSelfStart+1; // semi-condensed
|
|
|
kwSemiExpanded = kwSemiCondensed+1; // semi-expanded
|
|
|
kwSEResize = kwSemiExpanded+1; // se-resize
|
|
|
- kwSmall = kwSEResize+1;
|
|
|
+ kwSidewaysLR = kwSEResize+1; // sideways-lr
|
|
|
+ kwSidewaysRL = kwSidewaysLR+1; // sideways-rl
|
|
|
+ kwSmall = kwSidewaysRL+1;
|
|
|
kwSmallCaps = kwSmall+1; // small-caps
|
|
|
kwSmallCaption = kwSmallCaps+1; // small-caption
|
|
|
kwSmaller = kwSmallCaption+1;
|
|
@@ -652,7 +667,9 @@ type
|
|
|
kwUltraCondensed = kwTop+1; // ultra-condensed
|
|
|
kwUltraExpanded = kwUltraCondensed+1; // ultra-expanded
|
|
|
kwUnsafe = kwUltraExpanded+1;
|
|
|
- kwVerticalText = kwUnsafe+1; // vertical-text
|
|
|
+ kwVerticalLR = kwUnsafe+1; // vertical-lr
|
|
|
+ kwVerticalRL = kwVerticalLR+1; // vertical-rl
|
|
|
+ kwVerticalText = kwVerticalRL+1; // vertical-text
|
|
|
kwVisible = kwVerticalText+1;
|
|
|
kwWait = kwVisible+1;
|
|
|
kwWrap = kwWait+1; // w-resize
|
|
@@ -772,6 +789,9 @@ type
|
|
|
Chk_FlexGrow_Dim: TCSSCheckAttrParams_Dimension;
|
|
|
Chk_FlexShrink_Dim: TCSSCheckAttrParams_Dimension;
|
|
|
Chk_FlexWrap_KeywordIDs: TCSSNumericalIDArray;
|
|
|
+ Chk_AlignContent_KeywordIDs: TCSSNumericalIDArray;
|
|
|
+ Chk_AlignItems_KeywordIDs: TCSSNumericalIDArray;
|
|
|
+ Chk_AlignSelf_KeywordIDs: TCSSNumericalIDArray;
|
|
|
Chk_JustifyContent_KeywordIDs: TCSSNumericalIDArray;
|
|
|
Chk_JustifyItems_KeywordIDs: TCSSNumericalIDArray;
|
|
|
Chk_JustifySelf_KeywordIDs: TCSSNumericalIDArray;
|
|
@@ -1833,6 +1853,8 @@ begin
|
|
|
break;
|
|
|
end;
|
|
|
until not Resolver.ReadNext;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
+
|
|
|
FirstIsX:=true;
|
|
|
if (Keyword1=kwLeft) or (Keyword1=kwRight) then
|
|
|
begin
|
|
@@ -1885,16 +1907,16 @@ begin
|
|
|
; // todo warn
|
|
|
exit(false);
|
|
|
end;
|
|
|
- Result:=true;
|
|
|
W:=Resolver.GetCompString;
|
|
|
H:='auto';
|
|
|
if not Resolver.ReadNext then
|
|
|
- exit;
|
|
|
+ exit(Resolver.CurComp.Kind<>rvkInvalid);
|
|
|
if Chk_BackgroundSize_Dim.Fits(Resolver.CurComp) then
|
|
|
begin
|
|
|
H:=Resolver.GetCompString;
|
|
|
Resolver.ReadNext;
|
|
|
end;
|
|
|
+ Result:=Resolver.CurComp.Kind=rvkNone;
|
|
|
end;
|
|
|
|
|
|
function TFresnelCSSRegistry.CheckBackgroundAttachment(Resolver: TCSSBaseResolver): boolean;
|
|
@@ -2035,6 +2057,27 @@ begin
|
|
|
Result:=ReadFlex(Resolver,true,Grow,Shrink,Basis);
|
|
|
end;
|
|
|
|
|
|
+function TFresnelCSSRegistry.CheckAlignContent(Resolver: TCSSBaseResolver): boolean;
|
|
|
+var
|
|
|
+ MainKW, SubKW: TCSSNumericalID;
|
|
|
+begin
|
|
|
+ Result:=ReadAlignContent(Resolver,true,MainKW,SubKW);
|
|
|
+end;
|
|
|
+
|
|
|
+function TFresnelCSSRegistry.CheckAlignItems(Resolver: TCSSBaseResolver): boolean;
|
|
|
+var
|
|
|
+ MainKW, SubKW: TCSSNumericalID;
|
|
|
+begin
|
|
|
+ Result:=ReadAlignItems(Resolver,true,MainKW,SubKW);
|
|
|
+end;
|
|
|
+
|
|
|
+function TFresnelCSSRegistry.CheckAlignSelf(Resolver: TCSSBaseResolver): boolean;
|
|
|
+var
|
|
|
+ MainKW, SubKW: TCSSNumericalID;
|
|
|
+begin
|
|
|
+ Result:=ReadAlignSelf(Resolver,true,MainKW,SubKW);
|
|
|
+end;
|
|
|
+
|
|
|
function TFresnelCSSRegistry.CheckJustifyContent(Resolver: TCSSBaseResolver): boolean;
|
|
|
begin
|
|
|
Result:=Resolver.CheckAttribute_Keyword(Chk_JustifyContent_KeywordIDs);
|
|
@@ -2117,6 +2160,8 @@ begin
|
|
|
exit;
|
|
|
end;
|
|
|
until not Resolver.ReadNext;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
+
|
|
|
if X=0 then
|
|
|
begin
|
|
|
if Y=0 then
|
|
@@ -2272,6 +2317,8 @@ begin
|
|
|
AddLayer;
|
|
|
end;
|
|
|
until not Resolver.ReadNext;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
+
|
|
|
if HasLayer then
|
|
|
begin
|
|
|
AddLayer;
|
|
@@ -2391,6 +2438,8 @@ begin
|
|
|
else
|
|
|
aFamily:=Resolver.GetCompString;
|
|
|
until not Resolver.ReadNext;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
+
|
|
|
Result:=(aSize>'') and (aFamily>'');
|
|
|
end;
|
|
|
|
|
@@ -2446,6 +2495,7 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
until not Resolver.ReadNext;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
|
|
|
if (Grow='') and (Basis='') then exit;
|
|
|
|
|
@@ -2490,6 +2540,7 @@ begin
|
|
|
exit; // invalid
|
|
|
end;
|
|
|
until not Resolver.ReadNext;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
|
|
|
if (Direction='') and (Wrap='') then exit;
|
|
|
|
|
@@ -2498,6 +2549,255 @@ begin
|
|
|
Result:=true;
|
|
|
end;
|
|
|
|
|
|
+function TFresnelCSSRegistry.ReadAlignContent(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
|
|
|
+ kwNormal, kwStretch:
|
|
|
+ begin
|
|
|
+ if MainKW>0 then
|
|
|
+ exit;
|
|
|
+ if SubKW>0 then
|
|
|
+ exit;
|
|
|
+ MainKW:=KW;
|
|
|
+ end;
|
|
|
+ kwStart,kwEnd,
|
|
|
+ kwFlexStart,kwFlexEnd,
|
|
|
+ kwCenter,
|
|
|
+ kwSpaceAround,kwSpaceBetween,kwSpaceEvenly:
|
|
|
+ begin
|
|
|
+ if MainKW>0 then
|
|
|
+ exit;
|
|
|
+ if (SubKW>0) and not (SubKW in [kwSafe,kwUnsafe]) then
|
|
|
+ exit;
|
|
|
+ MainKW:=KW;
|
|
|
+ end;
|
|
|
+ kwSafe,kwUnsafe:
|
|
|
+ begin
|
|
|
+ if (MainKW>0) and not (MainKW in [kwStart, kwEnd, kwFlexStart, kwFlexEnd,
|
|
|
+ kwCenter,
|
|
|
+ kwSpaceAround,kwSpaceBetween,kwSpaceEvenly]) then
|
|
|
+ exit;
|
|
|
+ if SubKW>0 then
|
|
|
+ exit;
|
|
|
+ SubKW:=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;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
+
|
|
|
+ Result:=MainKW>0;
|
|
|
+end;
|
|
|
+
|
|
|
+function TFresnelCSSRegistry.ReadAlignItems(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
|
|
|
+ kwNormal,kwStretch,kwAnchorCenter:
|
|
|
+ begin
|
|
|
+ if MainKW>0 then
|
|
|
+ exit;
|
|
|
+ if SubKW>0 then
|
|
|
+ exit;
|
|
|
+ MainKW:=KW;
|
|
|
+ end;
|
|
|
+ kwStart,kwEnd,
|
|
|
+ kwFlexStart,kwFlexEnd,
|
|
|
+ kwSelfStart,kwSelfEnd,
|
|
|
+ kwCenter:
|
|
|
+ begin
|
|
|
+ if MainKW>0 then
|
|
|
+ exit;
|
|
|
+ if (SubKW>0) and not (SubKW in [kwSafe,kwUnsafe]) then
|
|
|
+ exit;
|
|
|
+ MainKW:=KW;
|
|
|
+ end;
|
|
|
+ kwSafe,kwUnsafe:
|
|
|
+ begin
|
|
|
+ if (MainKW>0) and not (MainKW in [kwStart, kwEnd, kwFlexStart, kwFlexEnd,
|
|
|
+ kwSelfStart, kwSelfEnd, kwCenter]) then
|
|
|
+ exit;
|
|
|
+ if SubKW>0 then
|
|
|
+ exit;
|
|
|
+ SubKW:=KW;
|
|
|
+ end;
|
|
|
+ kwFirst,kwLast:
|
|
|
+ begin
|
|
|
+ // baseline with optional first or last
|
|
|
+ if (MainKW>0) and (MainKW<>kwBaseline) then
|
|
|
+ exit;
|
|
|
+ if SubKW>0 then
|
|
|
+ exit;
|
|
|
+ SubKW:=KW;
|
|
|
+ end;
|
|
|
+ kwBaseline:
|
|
|
+ begin
|
|
|
+ if MainKW>0 then
|
|
|
+ exit;
|
|
|
+ // baseline with optional first or last
|
|
|
+ if (SubKW>0) and not (SubKW in [kwFirst,kwLast]) then
|
|
|
+ exit;
|
|
|
+ MainKW:=KW;
|
|
|
+ end;
|
|
|
+ kwLegacy:
|
|
|
+ begin
|
|
|
+ // legacy followed by left or right
|
|
|
+ MainKW:=KW;
|
|
|
+ if not Resolver.ReadNext then exit;
|
|
|
+ case Resolver.CurComp.Kind of
|
|
|
+ rvkKeyword:
|
|
|
+ begin
|
|
|
+ KW:=Resolver.CurComp.KeywordID;
|
|
|
+ if not (KW in [kwCenter,kwLeft,kwRight]) then
|
|
|
+ exit;
|
|
|
+ SubKW:=KW;
|
|
|
+ end;
|
|
|
+ rvkFunction:
|
|
|
+ if Resolver.CurComp.FunctionID=afVar then
|
|
|
+ exit(Check)
|
|
|
+ else
|
|
|
+ exit;
|
|
|
+ else
|
|
|
+ exit;
|
|
|
+ end;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ exit;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ rvkFunction:
|
|
|
+ if Resolver.CurComp.FunctionID=afVar then
|
|
|
+ exit(Check)
|
|
|
+ else
|
|
|
+ exit;
|
|
|
+ else
|
|
|
+ exit;
|
|
|
+ end;
|
|
|
+ until not Resolver.ReadNext;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
+
|
|
|
+ Result:=MainKW>0;
|
|
|
+end;
|
|
|
+
|
|
|
+function TFresnelCSSRegistry.ReadAlignSelf(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, kwStretch, kwAnchorCenter:
|
|
|
+ begin
|
|
|
+ if MainKW>0 then
|
|
|
+ exit;
|
|
|
+ if SubKW>0 then
|
|
|
+ exit;
|
|
|
+ MainKW:=KW;
|
|
|
+ end;
|
|
|
+ kwStart,kwEnd,
|
|
|
+ kwFlexStart,kwFlexEnd,
|
|
|
+ kwSelfStart,kwSelfEnd,
|
|
|
+ kwCenter:
|
|
|
+ begin
|
|
|
+ if MainKW>0 then
|
|
|
+ exit;
|
|
|
+ if (SubKW>0) and not (SubKW in [kwSafe,kwUnsafe]) then
|
|
|
+ exit;
|
|
|
+ MainKW:=KW;
|
|
|
+ end;
|
|
|
+ kwSafe,kwUnsafe:
|
|
|
+ begin
|
|
|
+ if (MainKW>0) and not (MainKW in [kwStart, kwEnd, kwFlexStart, kwFlexEnd,
|
|
|
+ kwSelfStart, kwSelfEnd, kwCenter]) then
|
|
|
+ exit;
|
|
|
+ if SubKW>0 then
|
|
|
+ exit;
|
|
|
+ SubKW:=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;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
+
|
|
|
+ Result:=MainKW>0;
|
|
|
+end;
|
|
|
+
|
|
|
function TFresnelCSSRegistry.ReadJustifySelf(Resolver: TCSSBaseResolver; Check: boolean; out
|
|
|
MainKW, SubKW: TCSSNumericalID): boolean;
|
|
|
var
|
|
@@ -2569,6 +2869,7 @@ begin
|
|
|
exit;
|
|
|
end;
|
|
|
until not Resolver.ReadNext;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
|
|
|
Result:=MainKW>0;
|
|
|
end;
|
|
@@ -2587,7 +2888,7 @@ begin
|
|
|
begin
|
|
|
KW:=Resolver.CurComp.KeywordID;
|
|
|
case KW of
|
|
|
- kwNormal,kwStretch:
|
|
|
+ kwNormal,kwStretch,kwAnchorCenter:
|
|
|
begin
|
|
|
if MainKW>0 then
|
|
|
exit;
|
|
@@ -2598,8 +2899,7 @@ begin
|
|
|
kwStart,kwEnd,
|
|
|
kwFlexStart,kwFlexEnd,
|
|
|
kwSelfStart,kwSelfEnd,
|
|
|
- kwCenter,kwLeft,kwRight,
|
|
|
- kwAnchorCenter:
|
|
|
+ kwCenter,kwLeft,kwRight:
|
|
|
begin
|
|
|
if MainKW>0 then
|
|
|
exit;
|
|
@@ -2636,14 +2936,15 @@ begin
|
|
|
end;
|
|
|
kwLegacy:
|
|
|
begin
|
|
|
- // legacy followed by left or right
|
|
|
+ // legacy can be followed by center, left or right
|
|
|
MainKW:=KW;
|
|
|
- if not Resolver.ReadNext then exit;
|
|
|
+ if not Resolver.ReadNext then
|
|
|
+ exit(Resolver.CurComp.Kind<>rvkInvalid);
|
|
|
case Resolver.CurComp.Kind of
|
|
|
rvkKeyword:
|
|
|
begin
|
|
|
KW:=Resolver.CurComp.KeywordID;
|
|
|
- if not (KW in [kwLeft,kwRight]) then
|
|
|
+ if not (KW in [kwCenter,kwLeft,kwRight]) then
|
|
|
exit;
|
|
|
SubKW:=KW;
|
|
|
end;
|
|
@@ -2669,6 +2970,7 @@ begin
|
|
|
exit;
|
|
|
end;
|
|
|
until not Resolver.ReadNext;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
|
|
|
Result:=MainKW>0;
|
|
|
end;
|
|
@@ -2712,6 +3014,7 @@ begin
|
|
|
exit;
|
|
|
end;
|
|
|
until not Resolver.ReadNext;
|
|
|
+ if Resolver.CurComp.Kind=rvkInvalid then exit;
|
|
|
|
|
|
if Column='' then exit;
|
|
|
if Row='' then Row:=Column;
|
|
@@ -3618,6 +3921,7 @@ begin
|
|
|
AddKW(kwGroove,'groove'); // e.g. border-style
|
|
|
AddKW(kwHelp,'help'); // e.g. cursor
|
|
|
AddKW(kwHidden,'hidden'); // e.g. overflow-x, border-style, visible
|
|
|
+ AddKW(kwHorizontalTB,'horizontal-tb'); // e.g. writing-mode
|
|
|
AddKW(kwIcon,'icon'); // e.g. font
|
|
|
AddKW(kwIn,'in'); // e.g. background-image
|
|
|
AddKW(kwInline,'inline'); // e.g. display-outside
|
|
@@ -3675,6 +3979,8 @@ begin
|
|
|
AddKW(kwSemiCondensed,'semi-condensed'); // e.g. font-width
|
|
|
AddKW(kwSemiExpanded,'semi-expanded'); // e.g. font-width
|
|
|
AddKW(kwSEResize,'se-resize'); // e.g. cursor
|
|
|
+ AddKW(kwSidewaysLR,'sideways-lr'); // e.g. writing-mode
|
|
|
+ AddKW(kwSidewaysRL,'sideways-rl'); // e.g. writing-mode
|
|
|
AddKW(kwSmall,'small'); // e.g. font-size
|
|
|
AddKW(kwSmallCaps,'small-caps'); // e.g. font-variant
|
|
|
AddKW(kwSmallCaption,'small-caption'); // e.g. font
|
|
@@ -3699,6 +4005,8 @@ begin
|
|
|
AddKW(kwUltraCondensed,'ultra-condensed'); // e.g. font-width
|
|
|
AddKW(kwUltraExpanded,'ultra-expanded'); // e.g. font-width
|
|
|
AddKW(kwUnsafe,'unsafe'); // e.g. justify-content
|
|
|
+ AddKW(kwVerticalLR,'vertical-lr'); // e.g. writing-mode
|
|
|
+ AddKW(kwVerticalRL,'vertical-rl'); // e.g. writing-mode
|
|
|
AddKW(kwVerticalText,'vertical-text'); // e.g. cursor
|
|
|
AddKW(kwVisible,'visible'); // e.g. overflow-x, visible
|
|
|
AddKW(kwWait,'wait'); // e.g. cursor
|
|
@@ -4045,13 +4353,33 @@ begin
|
|
|
[fcaFlexGrow,fcaFlexShrink,fcaFlexBasis]);
|
|
|
|
|
|
// shared attributes of flex+grid
|
|
|
+
|
|
|
+ // align-content
|
|
|
+ AddFresnelLonghand(fcaAlignContent,false,@CheckAlignContent,'normal');
|
|
|
+ Chk_AlignContent_KeywordIDs:=[kwNormal, kwCenter,kwStart,kwEnd,kwFlexEnd,kwCenter,
|
|
|
+ kwBaseline,kwFirst,kwLast,
|
|
|
+ kwSpaceBetween,kwSpaceAround,kwSpaceEvenly,kwStretch,
|
|
|
+ kwSafe,kwUnsafe];
|
|
|
+ // justify-items
|
|
|
+ AddFresnelLonghand(fcaAlignItems,false,@CheckAlignItems,'normal');
|
|
|
+ Chk_AlignItems_KeywordIDs:=[kwNormal,kwStretch,kwAnchorCenter,
|
|
|
+ kwCenter,kwStart,kwEnd,kwFlexStart,kwFlexEnd,kwSelfStart,kwSelfEnd,
|
|
|
+ kwSafe,kwUnsafe,
|
|
|
+ kwBaseline,kwFirst,kwLast];
|
|
|
+ // align-self
|
|
|
+ AddFresnelLonghand(fcaAlignSelf,false,@CheckAlignSelf,'auto');
|
|
|
+ Chk_AlignSelf_KeywordIDs:=[kwAuto,kwNormal,kwStretch,kwAnchorCenter,
|
|
|
+ kwCenter,kwStart,kwEnd,kwFlexStart,kwFlexEnd,kwSelfStart,kwSelfEnd,
|
|
|
+ kwSafe,kwUnsafe,
|
|
|
+ kwBaseline,kwFirst,kwLast];
|
|
|
+
|
|
|
// justify-content
|
|
|
AddFresnelLonghand(fcaJustifyContent,false,@CheckJustifyContent,'normal');
|
|
|
- Chk_JustifyContent_KeywordIDs:=[kwStart,kwEnd,kwFlexEnd,kwCenter,kwLeft,kwRight,kwNormal,
|
|
|
+ Chk_JustifyContent_KeywordIDs:=[kwNormal,kwStart,kwEnd,kwFlexStart,kwFlexEnd,kwCenter,kwLeft,kwRight,
|
|
|
kwSpaceBetween,kwSpaceAround,kwSpaceEvenly,kwStretch,kwSafe,kwUnsafe];
|
|
|
// justify-items
|
|
|
AddFresnelLonghand(fcaJustifyItems,false,@CheckJustifyItems,'legacy');
|
|
|
- Chk_JustifyItems_KeywordIDs:=[kwNormal,kwStart,kwEnd,kwFlexStart,kwFlexEnd,
|
|
|
+ Chk_JustifyItems_KeywordIDs:=[kwLegacy,kwNormal,kwStart,kwEnd,kwFlexStart,kwFlexEnd,
|
|
|
kwSelfStart,kwSelfEnd,kwCenter,kwLeft,kwRight,kwBaseline,kwFirst,kwLast,kwStretch,
|
|
|
kwAnchorCenter,kwSafe,kwUnsafe];
|
|
|
// justify-self
|
|
@@ -4059,6 +4387,7 @@ begin
|
|
|
Chk_JustifySelf_KeywordIDs:=[kwAuto,kwNormal,kwStart,kwEnd,kwFlexStart,kwFlexEnd,
|
|
|
kwSelfStart,kwSelfEnd,kwCenter,kwLeft,kwRight,kwBaseline,kwFirst,kwLast,kwStretch,
|
|
|
kwAnchorCenter,kwSafe,kwUnsafe];
|
|
|
+
|
|
|
// column-gap
|
|
|
AddFresnelLonghand(fcaColumnGap,false,@CheckColumnRowGap,'normal');
|
|
|
Chk_ColumnRowGap_Dim.AllowedKeywordIDs:=[kwNormal];
|