diff options
Diffstat (limited to 'src/css')
-rw-r--r-- | src/css/cascade.nim | 10 | ||||
-rw-r--r-- | src/css/cssvalues.nim | 34 | ||||
-rw-r--r-- | src/css/match.nim | 5 | ||||
-rw-r--r-- | src/css/selectorparser.nim | 35 | ||||
-rw-r--r-- | src/css/sheet.nim | 21 |
5 files changed, 45 insertions, 60 deletions
diff --git a/src/css/cascade.nim b/src/css/cascade.nim index 49fc6647..996b335d 100644 --- a/src/css/cascade.nim +++ b/src/css/cascade.nim @@ -76,10 +76,10 @@ proc calcRules(map: var RuleListMap; element: Element; sheet.tagTable.withValue(element.localName, v): rules.add(v[]) if element.id != CAtomNull: - sheet.idTable.withValue(sheet.factory.toLowerAscii(element.id), v): + sheet.idTable.withValue(element.id.toLowerAscii(), v): rules.add(v[]) for class in element.classList: - sheet.classTable.withValue(sheet.factory.toLowerAscii(class), v): + sheet.classTable.withValue(class.toLowerAscii(), v): rules.add(v[]) for attr in element.attrs: sheet.attrTable.withValue(attr.qualifiedName, v): @@ -121,8 +121,7 @@ proc applyVariable(ctx: var ApplyValueContext; t: CSSPropertyType; ctx.applyValue0(entry, initType, nextInitType) return var entries: seq[CSSComputedEntry] = @[] - if entries.parseComputedValues($t, cvar.cvals, ctx.window.attrsp[], - ctx.window.factory).isSome: + if entries.parseComputedValues($t, cvar.cvals, ctx.window.attrsp[]).isSome: if entries[0].et == ceVar: if ctx.varsSeen.containsOrIncl(varName) or ctx.varsSeen.len > 20: ctx.varsSeen.clear() @@ -373,8 +372,7 @@ proc applyStyle*(element: Element) = if window.styling and style != nil: for decl in style.decls: #TODO variables - let vals = parseComputedValues(decl.name, decl.value, window.attrsp[], - window.factory) + let vals = parseComputedValues(decl.name, decl.value, window.attrsp[]) if decl.important: map[peNone][coAuthor].important.add(vals) else: diff --git a/src/css/cssvalues.nim b/src/css/cssvalues.nim index 00011cc5..a183d6fb 100644 --- a/src/css/cssvalues.nim +++ b/src/css/cssvalues.nim @@ -556,8 +556,7 @@ const WhiteSpacePreserve* = { # Forward declarations proc parseValue(cvals: openArray[CSSComponentValue]; t: CSSPropertyType; - entry: var CSSComputedEntry; attrs: WindowAttributes; factory: CAtomFactory): - Opt[void] + entry: var CSSComputedEntry; attrs: WindowAttributes): Opt[void] proc newCSSVariableMap*(parent: CSSVariableMap): CSSVariableMap = return CSSVariableMap(parent: parent) @@ -610,7 +609,7 @@ func `$`(quotes: CSSQuotes): string = func `$`(counterreset: seq[CSSCounterReset]): string = result = "" for it in counterreset: - result &= $it.name + result &= it.name result &= ' ' result &= $it.num @@ -1445,8 +1444,7 @@ proc makeEntry*(t: CSSPropertyType; global: CSSGlobalType): CSSComputedEntry = return CSSComputedEntry(et: ceGlobal, t: t, global: global) proc parseVariable(fun: CSSFunction; t: CSSPropertyType; - entry: var CSSComputedEntry; attrs: WindowAttributes; - factory: CAtomFactory): Opt[void] = + entry: var CSSComputedEntry; attrs: WindowAttributes): Opt[void] = var i = fun.value.skipBlanks(0) if i >= fun.value.len: return err() @@ -1459,7 +1457,7 @@ proc parseVariable(fun: CSSFunction; t: CSSPropertyType; entry = CSSComputedEntry( et: ceVar, t: t, - cvar: factory.toAtom(tok.value.substr(2)) + cvar: tok.value.substr(2).toAtom() ) i = fun.value.skipBlanks(i + 1) if i < fun.value.len: @@ -1469,13 +1467,12 @@ proc parseVariable(fun: CSSFunction; t: CSSPropertyType; if i < fun.value.len: entry.fallback = (ref CSSComputedEntry)() if fun.value.toOpenArray(i, fun.value.high).parseValue(t, - entry.fallback[], attrs, factory).isNone: + entry.fallback[], attrs).isNone: entry.fallback = nil return ok() proc parseValue(cvals: openArray[CSSComponentValue]; t: CSSPropertyType; - entry: var CSSComputedEntry; attrs: WindowAttributes; - factory: CAtomFactory): Opt[void] = + entry: var CSSComputedEntry; attrs: WindowAttributes): Opt[void] = var i = cvals.skipBlanks(0) if i >= cvals.len: return err() @@ -1486,7 +1483,7 @@ proc parseValue(cvals: openArray[CSSComponentValue]; t: CSSPropertyType; if fun.name == cftVar: if cvals.skipBlanks(i) < cvals.len: return err() - return fun.parseVariable(t, entry, attrs, factory) + return fun.parseVariable(t, entry, attrs) let v = valueType(t) template set_new(prop, val: untyped) = entry = CSSComputedEntry( @@ -1666,8 +1663,7 @@ proc addGlobals(res: var seq[CSSComputedEntry]; ps: openArray[CSSPropertyType]; res.add(makeEntry(p, global)) proc parseComputedValues*(res: var seq[CSSComputedEntry]; name: string; - cvals: openArray[CSSComponentValue]; attrs: WindowAttributes; - factory: CAtomFactory): Err[void] = + cvals: openArray[CSSComponentValue]; attrs: WindowAttributes): Err[void] = var i = cvals.skipBlanks(0) if i >= cvals.len: return err() @@ -1681,7 +1677,7 @@ proc parseComputedValues*(res: var seq[CSSComputedEntry]; name: string; res.add(makeEntry(t, global.get)) else: var entry = CSSComputedEntry() - ?cvals.parseValue(t, entry, attrs, factory) + ?cvals.parseValue(t, entry, attrs) res.add(entry) of cstAll: let global = ?global @@ -1704,11 +1700,11 @@ proc parseComputedValues*(res: var seq[CSSComputedEntry]; name: string; var i = cvals.skipBlanks(0) while i < cvals.len: let j = cvals.findBlank(i) - if cvals.toOpenArray(i, j - 1).parseValue(bgcolor.t, bgcolor, attrs, - factory).isSome: + if cvals.toOpenArray(i, j - 1).parseValue(bgcolor.t, bgcolor, + attrs).isSome: discard - elif cvals.toOpenArray(i, j - 1).parseValue(bgimage.t, bgimage, attrs, - factory).isSome: + elif cvals.toOpenArray(i, j - 1).parseValue(bgimage.t, bgimage, + attrs).isSome: discard else: #TODO when we implement the other shorthands too @@ -1806,9 +1802,9 @@ proc parseComputedValues*(res: var seq[CSSComputedEntry]; name: string; return ok() proc parseComputedValues*(name: string; value: seq[CSSComponentValue]; - attrs: WindowAttributes; factory: CAtomFactory): seq[CSSComputedEntry] = + attrs: WindowAttributes): seq[CSSComputedEntry] = var res: seq[CSSComputedEntry] = @[] - if res.parseComputedValues(name, value, attrs, factory).isSome: + if res.parseComputedValues(name, value, attrs).isSome: return res return @[] diff --git a/src/css/match.nim b/src/css/match.nim index bb1acd9c..065d34cf 100644 --- a/src/css/match.nim +++ b/src/css/match.nim @@ -185,13 +185,12 @@ func matches(element: Element; sel: Selector; depends: var DependencyInfo): of stType: return element.localName == sel.tag of stClass: - let factory = element.document.factory for it in element.classList: - if sel.class == factory.toLowerAscii(it): + if sel.class == it.toLowerAscii(): return mtTrue return mtFalse of stId: - return sel.id == element.document.factory.toLowerAscii(element.id) + return sel.id == element.id.toLowerAscii() of stAttr: return element.matchesAttr(sel) of stPseudoClass: diff --git a/src/css/selectorparser.nim b/src/css/selectorparser.nim index 1aaa9793..015ac0bb 100644 --- a/src/css/selectorparser.nim +++ b/src/css/selectorparser.nim @@ -41,7 +41,6 @@ type selectors: seq[ComplexSelector] cvals: seq[CSSComponentValue] at: int - factory: CAtomFactory failed: bool nested: bool @@ -106,8 +105,8 @@ type SelectorList* = seq[ComplexSelector] # Forward declarations -proc parseSelectorList(cvals: seq[CSSComponentValue]; factory: CAtomFactory; - nested, forgiving: bool): SelectorList +proc parseSelectorList(cvals: seq[CSSComponentValue]; nested, forgiving: bool): + SelectorList proc parseComplexSelector(state: var SelectorParser): ComplexSelector func `$`*(cxsel: ComplexSelector): string @@ -295,8 +294,7 @@ proc parseRecursiveSelectorFunction(state: var SelectorParser; t: stPseudoClass, pseudo: PseudoData(t: class), ) - fun.pseudo.fsels = parseSelectorList(body, state.factory, nested = true, - forgiving) + fun.pseudo.fsels = parseSelectorList(body, nested = true, forgiving) if fun.pseudo.fsels.len == 0: fail return fun @@ -319,7 +317,7 @@ proc parseNthChild(state: var SelectorParser; cssfunction: CSSFunction; inc i if i == cssfunction.value.len: fail nthchild.pseudo.ofsels = cssfunction.value[i..^1] - .parseSelectorList(state.factory, nested = true, forgiving = false) + .parseSelectorList(nested = true, forgiving = false) if nthchild.pseudo.ofsels.len == 0: fail return nthchild @@ -410,7 +408,7 @@ proc parseAttributeSelector(state: var SelectorParser; if not state2.has(): return Selector( t: stAttr, - attr: state.factory.toAtomLower(attr.value), + attr: attr.value.toAtomLower(), rel: SelectorRelation(t: rtExists) ) let delim = get_tok state2.consume() @@ -441,7 +439,7 @@ proc parseAttributeSelector(state: var SelectorParser; flag = rfS return Selector( t: stAttr, - attr: state.factory.toAtomLower(attr.value), + attr: attr.value.toAtomLower(), value: value.value, rel: SelectorRelation(t: rel, flag: flag) ) @@ -450,7 +448,7 @@ proc parseClassSelector(state: var SelectorParser): Selector = if not state.has(): fail let tok = get_tok state.consume() if tok.t != cttIdent: fail - let class = state.factory.toAtomLower(tok.value) + let class = tok.value.toAtomLower() result = Selector(t: stClass, class: class) when defined(debug): result.classs = tok.value @@ -464,7 +462,7 @@ proc parseCompoundSelector(state: var SelectorParser): CompoundSelector = case tok.t of cttIdent: inc state.at - let tag = state.factory.toAtomLower(tok.value) + let tag = tok.value.toAtomLower() let sel = Selector(t: stType, tag: tag) when defined(debug): sel.tags = tok.value @@ -474,7 +472,7 @@ proc parseCompoundSelector(state: var SelectorParser): CompoundSelector = result.add(state.parsePseudoSelector()) of cttHash: inc state.at - let id = state.factory.toAtomLower(tok.value) + let id = tok.value.toAtomLower() result.add(Selector(t: stId, id: id)) when defined(debug): result[^1].ids = tok.value @@ -537,11 +535,10 @@ proc parseComplexSelector(state: var SelectorParser): ComplexSelector = #TODO move pseudo check here? result.pseudo = result[^1][^1].elem -proc parseSelectorList(cvals: seq[CSSComponentValue]; factory: CAtomFactory; - nested, forgiving: bool): SelectorList = +proc parseSelectorList(cvals: seq[CSSComponentValue]; nested, forgiving: bool): + SelectorList = var state = SelectorParser( cvals: cvals, - factory: factory, nested: nested ) var res: SelectorList = @[] @@ -557,10 +554,8 @@ proc parseSelectorList(cvals: seq[CSSComponentValue]; factory: CAtomFactory; res.add(csel) return res -proc parseSelectors*(cvals: seq[CSSComponentValue]; factory: CAtomFactory): - seq[ComplexSelector] = - return parseSelectorList(cvals, factory, nested = false, forgiving = false) +proc parseSelectors*(cvals: seq[CSSComponentValue]): seq[ComplexSelector] = + return parseSelectorList(cvals, nested = false, forgiving = false) -proc parseSelectors*(ibuf: string; factory: CAtomFactory): - seq[ComplexSelector] = - return parseSelectors(parseComponentValues(ibuf), factory) +proc parseSelectors*(ibuf: string): seq[ComplexSelector] = + return parseSelectors(parseComponentValues(ibuf)) diff --git a/src/css/sheet.nim b/src/css/sheet.nim index ed15fe76..b1abfa5e 100644 --- a/src/css/sheet.nim +++ b/src/css/sheet.nim @@ -39,7 +39,6 @@ type generalList*: seq[CSSRuleDef] importList*: seq[URL] len: int - factory*: CAtomFactory attrs: ptr WindowAttributes type SelectorHashes = object @@ -48,8 +47,7 @@ type SelectorHashes = object class: CAtom attr: CAtom -func newStylesheet*(cap: int; factory: CAtomFactory; - attrs: ptr WindowAttributes): CSSStylesheet = +func newStylesheet*(cap: int; attrs: ptr WindowAttributes): CSSStylesheet = let bucketsize = cap div 2 return CSSStylesheet( tagTable: initTable[CAtom, seq[CSSRuleDef]](bucketsize), @@ -57,7 +55,6 @@ func newStylesheet*(cap: int; factory: CAtomFactory; classTable: initTable[CAtom, seq[CSSRuleDef]](bucketsize), attrTable: initTable[CAtom, seq[CSSRuleDef]](bucketsize), generalList: newSeqOfCap[CSSRuleDef](bucketsize), - factory: factory, attrs: attrs ) @@ -183,14 +180,14 @@ proc add*(sheet, sheet2: CSSStylesheet) = sheet.attrTable[key] = value proc addRule(sheet: CSSStylesheet; rule: CSSQualifiedRule) = - var sels = parseSelectors(rule.prelude, sheet.factory) + var sels = parseSelectors(rule.prelude) if sels.len > 0: let decls = rule.oblock.value.parseDeclarations() let rule = CSSRuleDef(sels: move(sels), idx: sheet.len) for decl in decls: if decl.name.startsWith("--"): let cvar = CSSVariable( - name: sheet.factory.toAtom(decl.name.substr(2)), + name: decl.name.substr(2).toAtom(), cvals: decl.value ) if decl.important: @@ -201,12 +198,12 @@ proc addRule(sheet: CSSStylesheet; rule: CSSQualifiedRule) = if decl.important: let olen = rule.importantVals.len if rule.importantVals.parseComputedValues(decl.name, decl.value, - sheet.attrs[], sheet.factory).isNone: + sheet.attrs[]).isNone: rule.importantVals.setLen(olen) else: let olen = rule.normalVals.len if rule.normalVals.parseComputedValues(decl.name, decl.value, - sheet.attrs[], sheet.factory).isNone: + sheet.attrs[]).isNone: rule.normalVals.setLen(olen) sheet.add(rule) inc sheet.len @@ -232,7 +229,7 @@ proc addAtRule(sheet: CSSStylesheet; atrule: CSSAtRule; base: URL) = let rules = atrule.oblock.value.parseListOfRules() if rules.len > 0: var media = CSSMediaQueryDef() - media.children = newStylesheet(rules.len, sheet.factory, sheet.attrs) + media.children = newStylesheet(rules.len, sheet.attrs) media.children.len = sheet.len media.query = query for rule in rules: @@ -243,10 +240,10 @@ proc addAtRule(sheet: CSSStylesheet; atrule: CSSAtRule; base: URL) = sheet.mqList.add(media) sheet.len = media.children.len -proc parseStylesheet*(ibuf: string; factory: CAtomFactory; base: URL; - attrs: ptr WindowAttributes): CSSStylesheet = +proc parseStylesheet*(ibuf: string; base: URL; attrs: ptr WindowAttributes): + CSSStylesheet = let raw = parseStylesheet(ibuf) - let sheet = newStylesheet(raw.value.len, factory, attrs) + let sheet = newStylesheet(raw.value.len, attrs) for v in raw.value: if v of CSSAtRule: sheet.addAtRule(CSSAtRule(v), base) |