|
@@ -146,6 +146,9 @@ type
|
|
fcaBackground, // shorthand for background-[attachment,clip,color,image,origin,position,repeat,size]
|
|
fcaBackground, // shorthand for background-[attachment,clip,color,image,origin,position,repeat,size]
|
|
fcaColor, // text color
|
|
fcaColor, // text color
|
|
fcaCursor,
|
|
fcaCursor,
|
|
|
|
+ fcaScrollbarColor,
|
|
|
|
+ fcaScrollbarGutter,
|
|
|
|
+ fcaScrollbarWidth,
|
|
fcaFlexBasis,
|
|
fcaFlexBasis,
|
|
fcaFlexDirection,
|
|
fcaFlexDirection,
|
|
fcaFlexGrow,
|
|
fcaFlexGrow,
|
|
@@ -268,6 +271,9 @@ const
|
|
'background',
|
|
'background',
|
|
'color',
|
|
'color',
|
|
'cursor',
|
|
'cursor',
|
|
|
|
+ 'scrollbar-color',
|
|
|
|
+ 'scrollbar-gutter',
|
|
|
|
+ 'scrollbar-width',
|
|
'flex-basis',
|
|
'flex-basis',
|
|
'flex-direction',
|
|
'flex-direction',
|
|
'flex-grow',
|
|
'flex-grow',
|
|
@@ -568,6 +574,9 @@ type
|
|
function CheckBackgroundSize(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
function CheckBackgroundSize(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
function CheckBackground(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
function CheckBackground(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
function CheckCursor(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
function CheckCursor(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
|
|
+ function CheckScrollbarColor(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
|
|
+ function CheckScrollbarGutter(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
|
|
+ function CheckScrollbarWidth(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
function CheckFlexBasis(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
function CheckFlexBasis(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
function CheckFlexDirection(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
function CheckFlexDirection(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
function CheckFlexGrow(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
function CheckFlexGrow(Resolver: TCSSBaseResolver): boolean; virtual;
|
|
@@ -723,7 +732,8 @@ type
|
|
kwBorderBox = kwBolder+1; // border-box
|
|
kwBorderBox = kwBolder+1; // border-box
|
|
kwBoth = kwBorderBox+1;
|
|
kwBoth = kwBorderBox+1;
|
|
kwBothBlock = kwBoth+1; // both-block
|
|
kwBothBlock = kwBoth+1; // both-block
|
|
- kwBothInline = kwBothBlock+1; // both-inline
|
|
|
|
|
|
+ kwBothEdges = kwBothBlock+1; // both-edges
|
|
|
|
+ kwBothInline = kwBothEdges+1; // both-inline
|
|
kwBottom = kwBothInline+1;
|
|
kwBottom = kwBothInline+1;
|
|
kwCaption = kwBottom+1;
|
|
kwCaption = kwBottom+1;
|
|
kwCell = kwCaption+1;
|
|
kwCell = kwCaption+1;
|
|
@@ -862,7 +872,8 @@ type
|
|
kwSpaceBetween = kwSpaceAround+1; // space-between
|
|
kwSpaceBetween = kwSpaceAround+1; // space-between
|
|
kwSpaceEvenly = kwSpaceBetween+1; // space-evenly
|
|
kwSpaceEvenly = kwSpaceBetween+1; // space-evenly
|
|
kwSResize = kwSpaceEvenly+1; // s-resize
|
|
kwSResize = kwSpaceEvenly+1; // s-resize
|
|
- kwStackedFractions = kwSResize+1;
|
|
|
|
|
|
+ kwStable = kwSResize+1;
|
|
|
|
+ kwStackedFractions = kwStable+1;
|
|
kwStart = kwStackedFractions+1;
|
|
kwStart = kwStackedFractions+1;
|
|
kwStatic = kwStart+1;
|
|
kwStatic = kwStart+1;
|
|
kwStatusBar = kwStatic+1; // status-bar
|
|
kwStatusBar = kwStatic+1; // status-bar
|
|
@@ -1007,6 +1018,7 @@ type
|
|
Chk_BackgroundRepeat_KeywordIDs: TCSSNumericalIDArray;
|
|
Chk_BackgroundRepeat_KeywordIDs: TCSSNumericalIDArray;
|
|
Chk_BackgroundSize_Dim: TCSSCheckAttrParams_Dimension;
|
|
Chk_BackgroundSize_Dim: TCSSCheckAttrParams_Dimension;
|
|
Chk_Cursor_KeywordIDs: TCSSNumericalIDArray;
|
|
Chk_Cursor_KeywordIDs: TCSSNumericalIDArray;
|
|
|
|
+ Chk_ScrollbarWidth_KeywordIDs: TCSSNumericalIDArray;
|
|
Chk_FlexBasis_Dim: TCSSCheckAttrParams_Dimension;
|
|
Chk_FlexBasis_Dim: TCSSCheckAttrParams_Dimension;
|
|
Chk_FlexDirection_KeywordIDs: TCSSNumericalIDArray;
|
|
Chk_FlexDirection_KeywordIDs: TCSSNumericalIDArray;
|
|
Chk_FlexGrow_Dim: TCSSCheckAttrParams_Dimension;
|
|
Chk_FlexGrow_Dim: TCSSCheckAttrParams_Dimension;
|
|
@@ -2712,6 +2724,85 @@ begin
|
|
Result:=Resolver.CheckAttribute_Keyword(Chk_Cursor_KeywordIDs);
|
|
Result:=Resolver.CheckAttribute_Keyword(Chk_Cursor_KeywordIDs);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function TFresnelCSSRegistry.CheckScrollbarColor(Resolver: TCSSBaseResolver): boolean;
|
|
|
|
+var
|
|
|
|
+ i: Integer;
|
|
|
|
+begin
|
|
|
|
+ Result:=false;
|
|
|
|
+ // check for 'auto'
|
|
|
|
+ if (Resolver.CurComp.Kind=rvkKeyword)
|
|
|
|
+ and (Resolver.CurComp.KeywordID=kwAuto) then
|
|
|
|
+ begin
|
|
|
|
+ Resolver.ReadNext;
|
|
|
|
+ Result:=Resolver.CurComp.Kind=rvkNone;
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ // check for two colors
|
|
|
|
+ for i:=1 to 2 do
|
|
|
|
+ begin
|
|
|
|
+ if IsColor(Resolver.CurComp) then
|
|
|
|
+ // ok
|
|
|
|
+ else if (Resolver.CurComp.Kind=rvkFunction) and (Resolver.CurComp.FunctionID=afVar) then
|
|
|
|
+ // ignore here
|
|
|
|
+ exit(true)
|
|
|
|
+ else
|
|
|
|
+ exit; // todo warn
|
|
|
|
+ end;
|
|
|
|
+ Result:=Resolver.CurComp.Kind=rvkNone;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function TFresnelCSSRegistry.CheckScrollbarGutter(Resolver: TCSSBaseResolver): boolean;
|
|
|
|
+var
|
|
|
|
+ KW: TCSSNumericalID;
|
|
|
|
+ HasStable, HasBothEdges: Boolean;
|
|
|
|
+begin
|
|
|
|
+ Result:=false;
|
|
|
|
+ HasStable:=false;
|
|
|
|
+ HasBothEdges:=false;
|
|
|
|
+ repeat
|
|
|
|
+ case Resolver.CurComp.Kind of
|
|
|
|
+ rvkKeyword:
|
|
|
|
+ begin
|
|
|
|
+ KW:=Resolver.CurComp.KeywordID;
|
|
|
|
+ case KW of
|
|
|
|
+ kwAuto:
|
|
|
|
+ begin
|
|
|
|
+ if HasStable or HasBothEdges then exit(false);
|
|
|
|
+ Resolver.ReadNext;
|
|
|
|
+ Result:=Resolver.CurComp.Kind=rvkNone;
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ kwStable:
|
|
|
|
+ if HasStable then
|
|
|
|
+ exit // todo warn
|
|
|
|
+ else
|
|
|
|
+ HasStable:=true;
|
|
|
|
+ kwBothEdges:
|
|
|
|
+ if HasBothEdges then
|
|
|
|
+ exit // todo warn
|
|
|
|
+ else
|
|
|
|
+ HasBothEdges:=true;
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+ rvkFunction:
|
|
|
|
+ if Resolver.CurComp.FunctionID=afVar then
|
|
|
|
+ exit(true)
|
|
|
|
+ else
|
|
|
|
+ // todo warn
|
|
|
|
+ exit(false);
|
|
|
|
+ else
|
|
|
|
+ // todo warn
|
|
|
|
+ exit(false);
|
|
|
|
+ end;
|
|
|
|
+ until not Resolver.ReadNext;
|
|
|
|
+ Result:=Resolver.CurComp.Kind=rvkNone;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function TFresnelCSSRegistry.CheckScrollbarWidth(Resolver: TCSSBaseResolver): boolean;
|
|
|
|
+begin
|
|
|
|
+ Result:=Resolver.CheckAttribute_Keyword(Chk_ScrollbarWidth_KeywordIDs);
|
|
|
|
+end;
|
|
|
|
+
|
|
function TFresnelCSSRegistry.CheckFlexBasis(Resolver: TCSSBaseResolver): boolean;
|
|
function TFresnelCSSRegistry.CheckFlexBasis(Resolver: TCSSBaseResolver): boolean;
|
|
begin
|
|
begin
|
|
Result:=Resolver.CheckAttribute_Dimension(Chk_FlexBasis_Dim);
|
|
Result:=Resolver.CheckAttribute_Dimension(Chk_FlexBasis_Dim);
|
|
@@ -5445,6 +5536,7 @@ begin
|
|
AddKW(kwBorderBox,'border-box'); // e.g. box-sizing
|
|
AddKW(kwBorderBox,'border-box'); // e.g. box-sizing
|
|
AddKW(kwBoth,'both'); // e.g. clear
|
|
AddKW(kwBoth,'both'); // e.g. clear
|
|
AddKW(kwBothBlock,'both-block'); // e.g. clear
|
|
AddKW(kwBothBlock,'both-block'); // e.g. clear
|
|
|
|
+ AddKW(kwBothEdges,'both-edges'); // e.g. scrollbar-gutter
|
|
AddKW(kwBothInline,'both-inline'); // e.g. clear
|
|
AddKW(kwBothInline,'both-inline'); // e.g. clear
|
|
AddKW(kwBottom,'bottom'); // e.g. clear
|
|
AddKW(kwBottom,'bottom'); // e.g. clear
|
|
AddKW(kwCaption,'caption'); // e.g. font
|
|
AddKW(kwCaption,'caption'); // e.g. font
|
|
@@ -5584,6 +5676,7 @@ begin
|
|
AddKW(kwSpaceBetween,'space-between'); // e.g. justify-content
|
|
AddKW(kwSpaceBetween,'space-between'); // e.g. justify-content
|
|
AddKW(kwSpaceEvenly,'space-evenly'); // 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(kwStable,'stable'); // e.g. scrollbar-gutter
|
|
AddKW(kwStackedFractions,'stacked-fractions'); // e.g. font-variant-numeric
|
|
AddKW(kwStackedFractions,'stacked-fractions'); // e.g. font-variant-numeric
|
|
AddKW(kwStart,'start'); // e.g. justify-content
|
|
AddKW(kwStart,'start'); // e.g. justify-content
|
|
AddKW(kwStatic,'static'); // e.g. position
|
|
AddKW(kwStatic,'static'); // e.g. position
|
|
@@ -5978,6 +6071,14 @@ 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];
|
|
|
|
|
|
|
|
+ // scrollbar-color
|
|
|
|
+ AddFresnelLonghand(fcaScrollbarColor,false,@CheckScrollbarColor,'auto');
|
|
|
|
+ // scrollbar-gutter
|
|
|
|
+ AddFresnelLonghand(fcaScrollbarGutter,false,@CheckScrollbarGutter,'auto');
|
|
|
|
+ // scrollbar-width
|
|
|
|
+ AddFresnelLonghand(fcaScrollbarWidth,false,@CheckScrollbarWidth,'auto');
|
|
|
|
+ Chk_ScrollbarWidth_KeywordIDs:=[kwAuto,kwThin,kwNone];
|
|
|
|
+
|
|
// flex-basis
|
|
// flex-basis
|
|
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];
|
|
@@ -9258,9 +9359,17 @@ begin
|
|
exit;
|
|
exit;
|
|
FComputedBoxSizing:=GetComputedKeyword(fcaBoxSizing,CSSRegistry.Chk_BoxSizing_KeywordIDs);
|
|
FComputedBoxSizing:=GetComputedKeyword(fcaBoxSizing,CSSRegistry.Chk_BoxSizing_KeywordIDs);
|
|
FComputedPosition:=GetComputedKeyword(fcaPosition,CSSRegistry.Chk_Position_KeywordIDs);
|
|
FComputedPosition:=GetComputedKeyword(fcaPosition,CSSRegistry.Chk_Position_KeywordIDs);
|
|
|
|
+ FComputedFloat:=GetComputedKeyword(fcaFloat,CSSRegistry.Chk_Float_KeywordIDs);
|
|
|
|
+
|
|
|
|
+ // overflow
|
|
FComputedOverflowX:=GetComputedKeyword(fcaOverflowX,CSSRegistry.Chk_OverflowXY_KeywordIDs);
|
|
FComputedOverflowX:=GetComputedKeyword(fcaOverflowX,CSSRegistry.Chk_OverflowXY_KeywordIDs);
|
|
FComputedOverflowY:=GetComputedKeyword(fcaOverflowY,CSSRegistry.Chk_OverflowXY_KeywordIDs);
|
|
FComputedOverflowY:=GetComputedKeyword(fcaOverflowY,CSSRegistry.Chk_OverflowXY_KeywordIDs);
|
|
- FComputedFloat:=GetComputedKeyword(fcaFloat,CSSRegistry.Chk_Float_KeywordIDs);
|
|
|
|
|
|
+ if (FComputedOverflowY=CSSRegistry.kwVisible)
|
|
|
|
+ and (FComputedOverflowX in [CSSRegistry.kwHidden,CSSRegistry.kwScroll,CSSRegistry.kwAuto]) then
|
|
|
|
+ FComputedOverflowY:=CSSRegistry.kwAuto;
|
|
|
|
+ if (FComputedOverflowX=CSSRegistry.kwVisible)
|
|
|
|
+ and (FComputedOverflowY in [CSSRegistry.kwHidden,CSSRegistry.kwScroll,CSSRegistry.kwAuto]) then
|
|
|
|
+ FComputedOverflowX:=CSSRegistry.kwAuto;
|
|
end;
|
|
end;
|
|
|
|
|
|
function TFresnelElement.ComputeAttribute(aDesc: TCSSAttributeDesc; var aValue: String
|
|
function TFresnelElement.ComputeAttribute(aDesc: TCSSAttributeDesc; var aValue: String
|