:not() seems to be functioning now

needs some tidying up and some more test runs
This commit is contained in:
Wouter Scherphof 2013-03-22 22:34:50 +01:00
parent d932191a52
commit 48183bbf04
2 changed files with 25 additions and 5 deletions

View File

@ -103,12 +103,22 @@ local function select(self, s)
resultset = resultset + init
end
if part == "*" then goto nextpart end
for t, w in string.gmatch(part, "([%[#%.]?)([^%[%]#%.]+)") do
if t == "" then resultset = resultset * self.deeperelements[w]
elseif t == "[" then resultset = resultset * self.deeperattributes[w]
elseif t == "#" then resultset = resultset * self.deeperids[w]
elseif t == "." then resultset = resultset * self.deeperclasses[w]
local match, filter
for t, w in string.gmatch(part, "([:%[#.]?)([^:%(%[#.%]%)]+)%]?%)?") do
-- TODO tidy up
if t == ":" then filter = w goto nextw end
if t == "" then match = self.deeperelements[w]
elseif t == "[" then match = self.deeperattributes[w]
elseif t == "#" then match = self.deeperids[w]
elseif t == "." then match = self.deeperclasses[w]
end
if filter == "not" then
resultset = resultset - match
else
resultset = resultset * match
end
filter = nil
::nextw::
end
subjects = Set:new(resultset)
::nextpart::

View File

@ -113,4 +113,14 @@ local function printscope(node, table, level)
end
for node,table in pairs(scopes) do
printscope(node, table)
end
local sel = root("[itemscope]:not([itemprop])")
for i,v in ipairs(sel.nodes) do
print(v.name)
end
local sel = root("[href]:not(a)")
for i,v in ipairs(sel.nodes) do
print(v.name)
end