diff options
author | bptato <nincsnevem662@gmail.com> | 2025-01-30 00:35:59 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-01-30 00:47:15 +0100 |
commit | 52aba81c301cb4db3a9c34ca2aa285c407d1d848 (patch) | |
tree | 06fee381bb98d0c7c1dc9bcdbf9b526fcc35d18b /src | |
parent | dfb3453b3c1220f0efa50aff8d57c27da86a543f (diff) | |
download | chawan-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.nim | 17 |
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] = |