about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2025-01-30 00:35:59 +0100
committerbptato <nincsnevem662@gmail.com>2025-01-30 00:47:15 +0100
commit52aba81c301cb4db3a9c34ca2aa285c407d1d848 (patch)
tree06fee381bb98d0c7c1dc9bcdbf9b526fcc35d18b /src
parentdfb3453b3c1220f0efa50aff8d57c27da86a543f (diff)
downloadchawan-52aba81c301cb4db3a9c34ca2aa285c407d1d848.tar.gz
mediaquery: fix some parser bugs
<media-condition-without-or> works correctly once again.

ref. https://todo.sr.ht/~bptato/chawan/46
Diffstat (limited to 'src')
-rw-r--r--src/css/mediaquery.nim17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/css/mediaquery.nim b/src/css/mediaquery.nim
index 7b466d84..8149bb64 100644
--- a/src/css/mediaquery.nim
+++ b/src/css/mediaquery.nim
@@ -343,9 +343,9 @@ proc parseMediaOr(parser: var MediaQueryParser; left: MediaQuery):
   let right = ?parser.parseMediaCondition()
   return ok(MediaQuery(t: mctOr, left: left, right: right))
 
-proc parseMediaAnd(parser: var MediaQueryParser; left: MediaQuery):
-    Opt[MediaQuery] =
-  let right = ?parser.parseMediaCondition()
+proc parseMediaAnd(parser: var MediaQueryParser; left: MediaQuery;
+    noor = false): Opt[MediaQuery] =
+  let right = ?parser.parseMediaCondition(noor = noor)
   return ok(MediaQuery(t: mctAnd, left: left, right: right))
 
 func negateIf(mq: MediaQuery; non: bool): MediaQuery =
@@ -370,7 +370,7 @@ proc parseMediaCondition(parser: var MediaQueryParser; non = false;
   let tok = ?parser.consumeIdent()
   parser.skipBlanks()
   if tok.value.equalsIgnoreCase("and"):
-    return parser.parseMediaAnd(res)
+    return parser.parseMediaAnd(res, noor)
   elif tok.value.equalsIgnoreCase("or"):
     if noor:
       return err()
@@ -401,11 +401,10 @@ proc parseMediaQuery(parser: var MediaQueryParser): Opt[MediaQuery] =
     let res = MediaQuery(t: mctMedia, media: x.get)
     if parser.skipBlanksCheckHas().isNone:
       return ok(res)
-    if (let tokx = parser.consumeIdent(); tokx.isSome):
-      return parser.parseMediaAnd(res)
-    return parser.parseMediaCondition()
-  else:
-    return err()
+    let tok = ?parser.consumeIdent()
+    if tok.value.equalsIgnoreCase("and"):
+      return parser.parseMediaAnd(res, noor = true)
+  return err()
 
 proc parseMediaQueryList*(cvals: seq[CSSComponentValue];
     attrs: ptr WindowAttributes): seq[MediaQuery] =