diff options
Diffstat (limited to 'src/css')
-rw-r--r-- | src/css/match.nim | 13 | ||||
-rw-r--r-- | src/css/selectorparser.nim | 34 |
2 files changed, 25 insertions, 22 deletions
diff --git a/src/css/match.nim b/src/css/match.nim index 737dd1d6..bb1acd9c 100644 --- a/src/css/match.nim +++ b/src/css/match.nim @@ -219,13 +219,14 @@ func matches*(element: Element; cxsel: ComplexSelector; var mdepends = DependencyInfo.default for i in countdown(cxsel.high, 0): var match = mtFalse - case cxsel[i].ct + let csel = cxsel[i] + case csel.ct of ctNone: - match = e.matches(cxsel[i], mdepends) + match = e.matches(csel, mdepends) of ctDescendant: e = e.parentElement while e != nil: - case e.matches(cxsel[i], mdepends) + case e.matches(csel, mdepends) of mtFalse: discard of mtTrue: match = mtTrue @@ -235,19 +236,19 @@ func matches*(element: Element; cxsel: ComplexSelector; of ctChild: e = e.parentElement if e != nil: - match = e.matches(cxsel[i], mdepends) + match = e.matches(csel, mdepends) of ctNextSibling: let prev = e.previousElementSibling if prev != nil: e = prev - match = e.matches(cxsel[i], mdepends) + match = e.matches(csel, mdepends) of ctSubsequentSibling: let parent = e.parentNode for j in countdown(e.index - 1, 0): let child = parent.childList[j] if child of Element: let child = Element(child) - case child.matches(cxsel[i], mdepends) + case child.matches(csel, mdepends) of mtTrue: e = child match = mtTrue diff --git a/src/css/selectorparser.nim b/src/css/selectorparser.nim index 70da9119..e1dffcea 100644 --- a/src/css/selectorparser.nim +++ b/src/css/selectorparser.nim @@ -45,11 +45,11 @@ type failed: bool nested: bool - RelationType* {.size: sizeof(int) div 2.} = enum - rtExists, rtEquals, rtToken, rtBeginDash, - rtStartsWith, rtEndsWith, rtContains + RelationType* = enum + rtExists, rtEquals, rtToken, rtBeginDash, rtStartsWith, rtEndsWith, + rtContains - RelationFlag* {.size: sizeof(int) div 2.} = enum + RelationFlag* = enum rfNone, rfI, rfS SelectorRelation* = object @@ -111,28 +111,29 @@ proc parseSelectorList(cvals: seq[CSSComponentValue]; factory: CAtomFactory; proc parseComplexSelector(state: var SelectorParser): ComplexSelector func `$`*(cxsel: ComplexSelector): string -iterator items*(sels: CompoundSelector): Selector {.inline.} = - for it in sels.sels: +iterator items*(csel: CompoundSelector): lent Selector {.inline.} = + for it in csel.sels: yield it -func `[]`*(sels: CompoundSelector; i: int): Selector {.inline.} = - return sels.sels[i] +func `[]`*(csel: CompoundSelector; i: int): lent Selector {.inline.} = + return csel.sels[i] -func `[]`*(sels: CompoundSelector; i: BackwardsIndex): Selector {.inline.} = - return sels.sels[i] +func `[]`*(csel: CompoundSelector; i: BackwardsIndex): lent Selector + {.inline.} = + return csel[csel.sels.len - int(i)] -func len*(sels: CompoundSelector): int {.inline.} = - return sels.sels.len +func len*(csel: CompoundSelector): int {.inline.} = + return csel.sels.len -proc add*(sels: var CompoundSelector; sel: Selector) {.inline.} = - sels.sels.add(sel) +proc add*(csel: var CompoundSelector; sel: sink Selector) {.inline.} = + csel.sels.add(sel) func `[]`*(cxsel: ComplexSelector; i: int): lent CompoundSelector {.inline.} = return cxsel.csels[i] -func `[]`*(cxsel: ComplexSelector; i: BackwardsIndex): CompoundSelector +func `[]`*(cxsel: ComplexSelector; i: BackwardsIndex): lent CompoundSelector {.inline.} = - return cxsel.csels[i] + return cxsel[cxsel.csels.len - int(i)] func `[]`*(cxsel: var ComplexSelector; i: BackwardsIndex): var CompoundSelector {.inline.} = @@ -209,6 +210,7 @@ func `$`*(sel: Selector): string = return "::" & $sel.elem func `$`*(sels: CompoundSelector): string = + result = "" for sel in sels: result &= $sel |