diff --git a/src/htmlparser.lua b/src/htmlparser.lua
index e58c6b4..1328887 100644
--- a/src/htmlparser.lua
+++ b/src/htmlparser.lua
@@ -12,7 +12,7 @@ local function parse(text)
local openstart, name
openstart, tpos, name = string.find(root._text,
"<" .. -- an uncaptured starting "<"
- "(%w+)" .. -- name = the first word, directly following the "<"
+ "([%w-]+)" .. -- name = the first word, directly following the "<"
"[^>]*>", -- include, but not capture everything up to the next ">"
tpos)
if not name then break end
@@ -51,7 +51,7 @@ local function parse(text)
local closeend = tpos
while true do
local closestart, closing, closename
- closestart, closeend, closing, closename = string.find(root._text, "[^<]*<(/?)(%w+)", closeend)
+ closestart, closeend, closing, closename = string.find(root._text, "[^<]*<(/?)([%w-]+)", closeend)
if not closing or closing == "" then break end
tag = table.remove(opentags[closename] or {}) or tag -- kludges for the cases of closing void or non-opened tags
closestart = string.find(root._text, "<", closestart)
diff --git a/tst/init.lua b/tst/init.lua
index afdf52a..47a4576 100644
--- a/tst/init.lua
+++ b/tst/init.lua
@@ -277,3 +277,14 @@ function test_order()
assert_equal(i, tonumber(v.name), "notn order")
end
end
+
+function test_tagnames_with_hyphens()
+ local tree = htmlparser.parse([[
+
+
+
+ ]])
+ assert_equal(1, #tree.nodes, "top level")
+ assert_equal("tag-name", tree("#9999")[1].name, "#9999")
+ assert_equal("m", tree("#10000")[1].name, "#10000")
+end