about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2025-01-15 22:40:10 +0100
committerbptato <nincsnevem662@gmail.com>2025-01-15 22:40:10 +0100
commit5bbced41ec3531c57ecba6095357be691fabcaf9 (patch)
tree97f5bd9e3be2ea081bbbfed554b5ab40b0c41a02 /src
parentf9b6a0f06bc4f84543a24c8264e02ac89cfc2b4a (diff)
downloadchawan-5bbced41ec3531c57ecba6095357be691fabcaf9.tar.gz
cssparser: enumize CSSFunction name
Diffstat (limited to 'src')
-rw-r--r--src/css/cssparser.nim22
-rw-r--r--src/css/cssvalues.nim9
-rw-r--r--src/css/selectorparser.nim14
3 files changed, 30 insertions, 15 deletions
diff --git a/src/css/cssparser.nim b/src/css/cssparser.nim
index 7e2f6004..94067d24 100644
--- a/src/css/cssparser.nim
+++ b/src/css/cssparser.nim
@@ -51,8 +51,23 @@ type
     value*: seq[CSSComponentValue]
     important*: bool
 
+  CSSFunctionType* = enum
+    cftUnknown = "-cha-unknown"
+    cftNot = "not"
+    cftIs = "is"
+    cftWhere = "where"
+    cftNthChild = "nth-child"
+    cftNthLastChild = "nth-last-child"
+    cftLang = "lang"
+    cftRgb = "rgb"
+    cftRgba = "rgba"
+    cftChaAnsi = "-cha-ansi"
+    cftUrl = "url"
+    cftSrc = "src"
+    cftVar = "var"
+
   CSSFunction* = ref object of CSSComponentValue
-    name*: string
+    name*: CSSFunctionType
     value*: seq[CSSComponentValue]
 
   CSSSimpleBlock* = ref object of CSSComponentValue
@@ -109,7 +124,7 @@ proc `$`*(c: CSSComponentValue): string =
       result &= " !important"
     result &= ";\n"
   elif c of CSSFunction:
-    result &= CSSFunction(c).name & "("
+    result &= $CSSFunction(c).name & "("
     for s in CSSFunction(c).value:
       result &= $s
     result &= ")"
@@ -509,7 +524,8 @@ proc consumeSimpleBlock(state: var CSSParseState; tok: CSSToken):
 
 proc consumeFunction(state: var CSSParseState): CSSFunction =
   let t = CSSToken(state.consume())
-  let res = CSSFunction(name: t.value)
+  let name = parseEnumNoCase[CSSFunctionType](t.value).get(cftUnknown)
+  let res = CSSFunction(name: name)
   while state.has():
     let t = state.consume()
     if t == cttRparen:
diff --git a/src/css/cssvalues.nim b/src/css/cssvalues.nim
index a2c661d6..8fba787b 100644
--- a/src/css/cssvalues.nim
+++ b/src/css/cssvalues.nim
@@ -1013,9 +1013,9 @@ func cssColor*(val: CSSComponentValue): Opt[CSSColor] =
     else: discard
   elif val of CSSFunction:
     let f = CSSFunction(val)
-    if f.name.equalsIgnoreCase("rgb") or f.name.equalsIgnoreCase("rgba"):
+    if f.name in {cftRgb, cftRgba}:
       return parseARGB(f.value)
-    elif f.name.equalsIgnoreCase("-cha-ansi"):
+    elif f.name == cftChaAnsi:
       return parseANSI(f.value)
   return err()
 
@@ -1214,8 +1214,7 @@ func cssURL*(cval: CSSComponentValue; src = false): Option[string] =
       return some(tok.value)
   elif cval of CSSFunction:
     let fun = CSSFunction(cval)
-    if fun.name.equalsIgnoreCase("url") or
-        src and fun.name.equalsIgnoreCase("src"):
+    if fun.name == cftUrl or src and fun.name == cftSrc:
       for x in fun.value:
         if not (x of CSSToken):
           break
@@ -1299,7 +1298,7 @@ proc parseValue(cvals: openArray[CSSComponentValue];
   inc i
   if cval of CSSFunction:
     let fun = CSSFunction(cval)
-    if fun.name.equalsIgnoreCase("var"):
+    if fun.name == cftVar:
       if cvals.skipBlanks(i) < cvals.len:
         return err()
       return fun.parseVar(entry, attrs, factory)
diff --git a/src/css/selectorparser.nim b/src/css/selectorparser.nim
index a927b9be..a3cbdc11 100644
--- a/src/css/selectorparser.nim
+++ b/src/css/selectorparser.nim
@@ -346,21 +346,21 @@ proc parseLang(cvals: seq[CSSComponentValue]): Selector =
 
 proc parseSelectorFunction(state: var SelectorParser; cssfunction: CSSFunction):
     Selector =
-  return case cssfunction.name.toLowerAscii()
-  of "not":
+  return case cssfunction.name
+  of cftNot:
     state.parseRecursiveSelectorFunction(pcNot, cssfunction.value,
       forgiving = false)
-  of "is":
+  of cftIs:
     state.parseRecursiveSelectorFunction(pcIs, cssfunction.value,
       forgiving = true)
-  of "where":
+  of cftWhere:
     state.parseRecursiveSelectorFunction(pcWhere, cssfunction.value,
       forgiving = true)
-  of "nth-child":
+  of cftNthChild:
     state.parseNthChild(cssfunction, PseudoData(t: pcNthChild))
-  of "nth-last-child":
+  of cftNthLastChild:
     state.parseNthChild(cssfunction, PseudoData(t: pcNthLastChild))
-  of "lang":
+  of cftLang:
     parseLang(cssfunction.value)
   else: fail