@@ -136,28 +136,30 @@ proc searchSimple(parents: var seq[XmlNode], selector: Selector) =
136136
137137proc searchCombined (parent: XmlNode , selectors: seq [Selector ], found: var seq [XmlNode ]) =
138138 var starts: seq [int ] = @ [0 ]
139- var matches: seq [int ] = @ []
139+ var matches: seq [int ]
140140
141- for i in 0 .. selectors.len- 1 : # matching selector by selector
141+ # matching selector by selector
142+ for i in 0 .. selectors.len- 1 :
142143 var selector = selectors[i]
144+ matches = @ []
145+
143146 for j in starts:
144147 for k in j.. parent.len- 1 :
145148 var child = parent[k]
146149 if child.kind != xnElement:
147150 continue
148- echo i, " , " , j, " , " , k
149151
150152 if match (child, selector):
151153 if i < selectors.len- 1 :
152154 # save current index for next search
153- matches.add (k)
155+ # next selector will only search for nodes followed by this node
156+ matches.add (k+ 1 )
154157 else :
155158 # no more selector, return matches
156159 if not found.contains (child):
157160 found.add (child)
158161 if selector.combinator == '+' :
159162 break
160-
161163 starts = matches
162164
163165proc searchCombined (parents: var seq [XmlNode ], selectors: seq [Selector ]) =
@@ -178,8 +180,6 @@ proc parseSelector(token: string): Selector =
178180 if matches[i].isNil:
179181 continue
180182
181- # echo matches[i]
182-
183183 let ch = matches[i][0 ]
184184 case ch:
185185 of '#' :
@@ -197,7 +197,6 @@ proc parseSelector(token: string): Selector =
197197 discard
198198
199199proc select * (q: QueryContext , s: string = " " ): seq [XmlNode ] =
200- echo " Selectors: " , s
201200 result = q.root
202201
203202 if s.isNil or s == " " :
@@ -237,10 +236,8 @@ proc select*(q: QueryContext, s: string = ""): seq[XmlNode] =
237236
238237 nextToken = tokens[pos+ i+ 1 ]
239238 i += 2
240- echo " nextCombinator " , nextCombinator, " nextSelector " , nextToken
241239
242240 var tmp = parseSelector (nextToken)
243-
244241 tmp.combinator = nextCombinator[0 ]
245242 selectors.add (tmp)
246243
0 commit comments