Skip to content

Commit c8fc3a8

Browse files
committed
fix: css: don't parse after getting EOF error
1 parent 9d1c77b commit c8fc3a8

File tree

4 files changed

+21
-3
lines changed

4 files changed

+21
-3
lines changed

samples/001.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
<title>Hello there</title>
44
</head>
55
<body>
6+
<style>
7+
h1 {
8+
font-size: 64px;
9+
}
10+
</style>
11+
612
<h1>Heya.</h1>
713
<p>This is just a test.</p>
814

src/components/parsers/css/parser.nim

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,14 @@ proc consumeRules*(parser: CSSParser): Stylesheet =
116116
var stylesheet: Stylesheet
117117

118118
while not parser.eof:
119-
let init = &parser.state.next()
119+
let initToken = parser.state.next()
120+
121+
if !initToken:
122+
let err = initToken.error()
123+
if err.kind == bpEndOfInput:
124+
break
125+
126+
let init = &initToken
120127
case init.kind
121128
of tkIdent:
122129
stylesheet &= parser.onEncounterIdentifier(init)

src/components/renderer/core.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ proc renderDocument*(renderer: FerusRenderer, document: HTMLDocument) =
297297
if !child.text:
298298
warn "renderer: <style> tag has no content; ignoring."
299299
continue
300-
300+
301301
var parser = newCSSParser(&child.text())
302302
layout.stylesheet &= parser.consumeRules()
303303

tests/basic_css.nim

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ import std/[tables]
22
import components/parsers/css/parser
33
import pretty
44

5-
var src = readFile "assets/user-agent.css"
5+
var src = """
6+
h1 {
7+
font-size: 64px;
8+
}
9+
10+
"""
611

712
let css = newCSSParser(src)
813
let rules = css.consumeRules()

0 commit comments

Comments
 (0)