Browse Source

fcl-css: fixed parsing --var

mattias 11 months ago
parent
commit
f81d455094
2 changed files with 23 additions and 7 deletions
  1. 7 1
      packages/fcl-css/src/fpcssresolver.pas
  2. 16 6
      packages/fcl-css/src/fpcssresparser.pas

+ 7 - 1
packages/fcl-css/src/fpcssresolver.pas

@@ -2391,7 +2391,13 @@ var
           inc(p);
           SkipIdentifier;
         end;
-      'a'..'z','A'..'Z':
+      '-':
+        begin
+          inc(p);
+          if (p^ in ['a'..'z','A'..'Z','_','-']) then
+            SkipIdentifier;
+        end;
+      'a'..'z','A'..'Z','_':
         if (p^='v') and (p[1]='a') and (p[2]='r') and (p[3]='(') then
         begin
           // var() found

+ 16 - 6
packages/fcl-css/src/fpcssresparser.pas

@@ -435,7 +435,7 @@ type
   public
     // attribute functions
     AttrFunctions: TCSSStringArray;
-    afVar: TCSSNumericalID;
+    const afVar = CSSAttrFuncVar;
     function AddAttrFunction(const aName: TCSSString): TCSSNumericalID; overload;
     function IndexOfAttrFunction(const aName: TCSSString): TCSSNumericalID; overload;
     property AttrFunctionCount: TCSSNumericalID read FAttrFunctionCount;
@@ -556,7 +556,7 @@ type
     function IsLengthOrPercentage(const ResValue: TCSSResCompValue; AllowNegative: boolean): boolean; overload;
     function IsSymbol(Token: TCSSToken): boolean; overload;
     function GetCompString: TCSSString; overload;
-    function GetCompString(const aValue: string; const ResValue: TCSSResCompValue; EndP: PCSSChar): TCSSString; overload;
+    function GetCompString(const aValue: string; const ResValue: TCSSResCompValue): TCSSString; overload;
     // low level functions to parse attribute components
     function ReadComp(var aComp: TCSSResCompValue): boolean; // true if parsing attribute can continue
     function ReadNumber(var aComp: TCSSResCompValue): boolean;
@@ -1701,6 +1701,16 @@ begin
       SetSymbol(ctkDIV);
       exit;
     end;
+  ':':
+    begin
+      SetSymbol(ctkCOLON);
+      exit;
+    end;
+  ';':
+    begin
+      SetSymbol(ctkSEMICOLON);
+      exit;
+    end;
   'a'..'z','A'..'Z':
     if ReadIdentifier(aComp) then exit;
   '#':
@@ -1971,18 +1981,18 @@ begin
     SetString(Result,StartP,CurComp.EndP-StartP);
 end;
 
-function TCSSBaseResolver.GetCompString(const aValue: string; const ResValue: TCSSResCompValue;
-  EndP: PCSSChar): TCSSString;
+function TCSSBaseResolver.GetCompString(const aValue: string; const ResValue: TCSSResCompValue
+  ): TCSSString;
 var
   Start: PCSSChar;
 begin
   if ResValue.Kind=rvkKeyword then
     exit(CSSRegistry.Keywords[ResValue.KeywordID]);
   Start:=ResValue.StartP;
-  if (Start=PCSSChar(aValue)) and (EndP-Start = length(aValue)) then
+  if (Start=PCSSChar(aValue)) and (ResValue.EndP-Start = length(aValue)) then
     Result:=aValue
   else
-    SetString(Result,Start,EndP-Start);
+    SetString(Result,Start,ResValue.EndP-Start);
 end;
 
 procedure TCSSBaseResolver.SkipToEndOfAttribute(var p: PCSSChar);