summaryrefslogtreecommitdiff
path: root/macros/luatex/generic/luaxml/luaxml-mod-xml.lua
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-04 03:00:52 +0000
committerNorbert Preining <norbert@preining.info>2019-09-04 03:00:52 +0000
commit5ed1f9609b6386d24a794a3e2d1419794a774610 (patch)
tree4c68aed78bf076edbc40937a48983a4294ea6342 /macros/luatex/generic/luaxml/luaxml-mod-xml.lua
parent9717a581bbf061017c77bf6159da5efa868963b1 (diff)
CTAN sync 201909040300
Diffstat (limited to 'macros/luatex/generic/luaxml/luaxml-mod-xml.lua')
-rw-r--r--macros/luatex/generic/luaxml/luaxml-mod-xml.lua10
1 files changed, 7 insertions, 3 deletions
diff --git a/macros/luatex/generic/luaxml/luaxml-mod-xml.lua b/macros/luatex/generic/luaxml/luaxml-mod-xml.lua
index edffef2552..d40b761547 100644
--- a/macros/luatex/generic/luaxml/luaxml-mod-xml.lua
+++ b/macros/luatex/generic/luaxml/luaxml-mod-xml.lua
@@ -170,10 +170,12 @@ local xmlParser = function(handler)
obj.options = {
stripWS = 1,
expandEntities = 1,
+ voidElements = {},
errorHandler = function(err,pos)
error(format("%s [char=%d]\n",
err or "Parse Error",pos))
end,
+
}
-- Public methods
@@ -183,6 +185,8 @@ local xmlParser = function(handler)
parseAttributes = true
end
self._handler.parseAttributes = parseAttributes
+ local handler_options = self._handler.options or {}
+ local void_elements = handler_options.voidElements or {}
local match,endmatch,pos = 0,0,1
local text,endt1,endt2,tagstr,tagname,attrs,starttext,endtext
@@ -331,12 +335,12 @@ local xmlParser = function(handler)
end
else
-- Start Tag
- table.insert(self._stack,tagname)
+ table.insert(self._stack,tagname)
if self._handler.starttag then
self._handler:starttag(tagname,attrs,match,endmatch)
end
- -- Self-Closing Tag
- if (endt2=="/") then
+ -- Self-Closing Tag. Skip void elements
+ if (endt2=="/") and not void_elements[tagname] then
table.remove(self._stack)
if self._handler.endtag then
self._handler:endtag(tagname,nil,match,endmatch)