36 lines
967 B
Text
36 lines
967 B
Text
# select_parts.ludic - a compound's [attribute] and :pseudo-class parts
|
|
function sel_attr(r: UiRd, s: UiSel) -> void {
|
|
r.i += 1
|
|
push(s.akeys, sel_name(r))
|
|
if not rd_op(r, "=") {
|
|
push(s.aops, 0)
|
|
push(s.avals, "")
|
|
} else {
|
|
push(s.aops, 1)
|
|
rd_ws(r)
|
|
let q = rd_c(r, 0)
|
|
if q == 34 or q == 39 { push(s.avals, Value.as_str(px_string(r, q).v)) } else { push(s.avals, sel_name(r)) }
|
|
}
|
|
if not rd_op(r, "]") { rd_fail(r, "']'") }
|
|
}
|
|
@alloc_ok("a stylesheet being read: once per component class (uc_load)")
|
|
function sel_pseudo(r: UiRd, s: UiSel) -> void {
|
|
r.i += 1
|
|
let name = sel_name(r)
|
|
var arg = ""
|
|
if rd_c(r, 0) == 40 {
|
|
r.i += 1
|
|
let at = r.i
|
|
while r.i < len(r.s) and r.s[r.i] != 41 { r.i += 1 }
|
|
arg = r.s[at..r.i]
|
|
r.i += 1
|
|
}
|
|
if name == "not" {
|
|
let inner = new UiRd
|
|
inner.s = tpl_words(arg)
|
|
push(s.nots, sel_compound(inner))
|
|
return
|
|
}
|
|
push(s.pseudos, name)
|
|
push(s.pargs, tpl_words(arg))
|
|
}
|