ソースを参照

registry: attribute functions as const

mattias 1 年間 前
コミット
efad10eef9
2 ファイル変更32 行追加23 行削除
  1. 1 1
      src/base/fcl-css/fpcssresparser.pas
  2. 31 22
      src/base/fresnel.dom.pas

+ 1 - 1
src/base/fcl-css/fpcssresparser.pas

@@ -435,7 +435,7 @@ type
   public
     // attribute functions
     AttrFunctions: TCSSStringArray;
-    afVar: TCSSNumericalID;
+    const afVar = 1;
     function AddAttrFunction(const aName: TCSSString): TCSSNumericalID; overload;
     function IndexOfAttrFunction(const aName: TCSSString): TCSSNumericalID; overload;
     property AttrFunctionCount: TCSSNumericalID read FAttrFunctionCount;

+ 31 - 22
src/base/fresnel.dom.pas

@@ -544,6 +544,16 @@ type
       kwXXXLarge = kwXXSmall+1; // xxx-large
       kwZoomIn = kwXXXLarge+1; // zoom-in
       kwZoomOut = kwZoomIn+1; // zoom-out
+
+      // attribute functions
+      afUrl = afVar+1;
+      afLinearGradient = afUrl+1; // linear-gradient
+      afRadialGradient = afLinearGradient+1; // radial-gradient
+      afConicGradient = afRadialGradient+1; // conic-gradient
+      afRepeatingLinearGradient = afConicGradient+1; // repeating-linear-gradient
+      afRepeatingRadialGradient = afRepeatingLinearGradient+1; // repeating-radial-gradient
+      afRepeatingConicGradient = afRepeatingRadialGradient+1; // repeating-conic-gradient
+
   public
     FresnelAttrIDBase: TCSSNumericalID;
     FresnelAttrs: array[TFresnelCSSAttribute] of TFresnelCSSAttrDesc;
@@ -552,16 +562,6 @@ type
     FresnelPseudoClasses: array[TFresnelCSSPseudoClass] of TFresnelCSSPseudoClassDesc;
 
 
-    // attribute functions
-    afUrl,
-    afLinearGradient, // linear-gradient
-    afRadialGradient, // radial-gradient
-    afConicGradient, // conic-gradient
-    afRepeatingLinearGradient, // repeating-linear-gradient
-    afRepeatingRadialGradient, // repeating-radial-gradient
-    afRepeatingConicGradient: // repeating-conic-gradient
-      TCSSNumericalID;
-
     // check parameters
     // The keyword lists are used by shorthands too, so they must not include
     // base keywords like initial, inherit, unset, revert, revert-layer
@@ -2612,13 +2612,22 @@ end;
 
 procedure TFresnelCSSRegistry.Init;
 
-  procedure AddKW(ExpectedID: TCSSNumericalID; const KW: TCSSString);
+  procedure AddKW(ExpectedID: TCSSNumericalID; const aName: TCSSString);
+  var
+    Actual: TCSSNumericalID;
+  begin
+    Actual:=AddKeyword(aName);
+    if Actual=ExpectedID then exit;
+    raise EFresnel.Create('register keyword "'+aName+'" failed. Expected '+IntToStr(ExpectedID)+', but got '+IntToStr(Actual));
+  end;
+
+  procedure AddFunc(ExpectedID: TCSSNumericalID; const aName: TCSSString);
   var
-    ActualKW: TCSSNumericalID;
+    Actual: TCSSNumericalID;
   begin
-    ActualKW:=AddKeyword(KW);
-    if ActualKW=ExpectedID then exit;
-    raise EFresnel.Create('register keyword "'+KW+'" failed. Expected '+IntToStr(ExpectedID)+', but got '+IntToStr(ActualKW));
+    Actual:=AddAttrFunction(aName);
+    if Actual=ExpectedID then exit;
+    raise EFresnel.Create('register attribute function "'+aName+'" failed. Expected '+IntToStr(ExpectedID)+', but got '+IntToStr(Actual));
   end;
 
 var
@@ -2754,13 +2763,13 @@ begin
   AddColorKeywords;
 
   // css functions - - - - - - - - - - - - - - - - - - - - - -
-  afUrl:=AddAttrFunction('url'); // e.g. background-image
-  afLinearGradient:=AddAttrFunction('linear-gradient'); // e.g. background-image
-  afRadialGradient:=AddAttrFunction('radial-gradient'); // e.g. background-image
-  afConicGradient:=AddAttrFunction('conic-gradient'); // e.g. background-image
-  afRepeatingLinearGradient:=AddAttrFunction('repeating-linear-gradient'); // e.g. background-image
-  afRepeatingRadialGradient:=AddAttrFunction('repeating-radial-gradient'); // e.g. background-image
-  afRepeatingConicGradient:=AddAttrFunction('repeating-conic-gradient'); // e.g. background-image
+  AddFunc(afUrl,'url'); // e.g. background-image
+  AddFunc(afLinearGradient,'linear-gradient'); // e.g. background-image
+  AddFunc(afRadialGradient,'radial-gradient'); // e.g. background-image
+  AddFunc(afConicGradient,'conic-gradient'); // e.g. background-image
+  AddFunc(afRepeatingLinearGradient,'repeating-linear-gradient'); // e.g. background-image
+  AddFunc(afRepeatingRadialGradient,'repeating-radial-gradient'); // e.g. background-image
+  AddFunc(afRepeatingConicGradient,'repeating-conic-gradient'); // e.g. background-image
 
   // attributes - - - - - - - - - - - - - - - - - - - - - -
   Chk_Color_KeywordIDs:=[kwCurrentcolor];