diff --git a/htmlparser-0.2-1.rockspec b/htmlparser-0.2-1.rockspec new file mode 100644 index 0000000..91cc9d9 --- /dev/null +++ b/htmlparser-0.2-1.rockspec @@ -0,0 +1,27 @@ +package = "htmlparser" +version = "0.1-1" +source = { + url = "git://github.com/wscherphof/lua-htmlparser.git", + branch = "v0.1" +} +description = { + summary = "Parse HTML text into a tree of elements with selectors", + detailed = [[ + Call parse() to build up a tree of element nodes. Each node in the tree, including the root node that is returned by parse(), supports a basic set of jQuery-like selectors. Or you could walk the tree by hand. + ]], + homepage = "http://wscherphof.github.com/lua-htmlparser/", + license = "MIT" +} +dependencies = { + "lua >= 5.2", + "set >= 0.1", + "lunitx >= 0.6" +} +build = { + type = "builtin", + modules = { + htmlparser = "src/htmlparser.lua", + ["htmlparser.ElementNode"] = "src/htmlparser/ElementNode.lua", + ["htmlparser.voidelements"] = "src/htmlparser/voidelements.lua" + } +} \ No newline at end of file diff --git a/src/htmlparser/ElementNode.lua b/src/htmlparser/ElementNode.lua index 4d8fc3c..d6c99e8 100644 --- a/src/htmlparser/ElementNode.lua +++ b/src/htmlparser/ElementNode.lua @@ -141,9 +141,10 @@ local function select(self, s) resultset = Set:new() for subject in pairs(subjects) do local star = subject.deepernodes - if childrenonly then star = Set:new(subject.nodes) childrenonly = false end + if childrenonly then star = Set:new(subject.nodes) end resultset = resultset + star end + childrenonly = false if part == "*" then goto nextpart end local excludes, filter = Set:new() for t, w in string.gmatch(part, diff --git a/tst/init.lua b/tst/init.lua new file mode 100644 index 0000000..fc80b37 --- /dev/null +++ b/tst/init.lua @@ -0,0 +1,47 @@ +require("luarocks.loader") +-- Omit next line in actual module clients; it's only to support development of the module itself +package.path = "../src/?.lua;" .. package.path + +local lunitx = require("lunitx") +module("html", lunitx.testcase, package.seeall) + +local htmlparser = require("htmlparser") +local tree, sel + +function test_descendants() + tree = htmlparser.parse([[ + 1 + 1.1 + 1.2 + 1.2.1 + + + 2 + 2.1 + 2.2 + 2.2.1 + + + ]]) + sel = tree("parent child") + assert_equal(6, sel:len(), 'parent child') +end + +function test_children() + tree = htmlparser.parse([[ + 1 + 1.1 + 1.2 + 1.2.1 + + + 2 + 2.1 + 2.2 + 2.2.1 + + + ]]) + sel = tree("parent > child") + assert_equal(4, sel:len(), 'parent > child') +end \ No newline at end of file