summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex/luaxml/luaxml-entities.lua
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-02-09 22:37:12 +0000
committerKarl Berry <karl@freefriends.org>2018-02-09 22:37:12 +0000
commit0c27d66da3ffc60c573dd310ece80c762b2bbd0f (patch)
tree613b51549bd18c73ce7d5fdb68a397fd8764b458 /Master/texmf-dist/tex/luatex/luaxml/luaxml-entities.lua
parentec193f4df1f9e5166fef311864f2924eebd20a40 (diff)
luaxml (9feb18)
git-svn-id: svn://tug.org/texlive/trunk@46582 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/luatex/luaxml/luaxml-entities.lua')
-rw-r--r--Master/texmf-dist/tex/luatex/luaxml/luaxml-entities.lua37
1 files changed, 37 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/luatex/luaxml/luaxml-entities.lua b/Master/texmf-dist/tex/luatex/luaxml/luaxml-entities.lua
new file mode 100644
index 00000000000..1d298764118
--- /dev/null
+++ b/Master/texmf-dist/tex/luatex/luaxml/luaxml-entities.lua
@@ -0,0 +1,37 @@
+local M = {}
+local char = unicode.utf8.char
+local named_entities = require "luaxml-namedentities"
+local hexchartable = {}
+local decchartable = {}
+
+
+local function get_named_entity(name)
+ return named_entities[name]
+end
+
+function M.decode(s)
+ return s:gsub("&([#a-zA-Z0-9]+);?", function(m)
+ -- check if this is named entity first
+ local named = get_named_entity(m)
+ if named then return named end
+ -- check if it is numeric entity
+ local hex, charcode = m:match("#([xX]?)([a-fA-F0-9]+)")
+ -- if the entity is not numeric
+ if not charcode then return
+ "&" .. m .. ";"
+ end
+ local character
+ if hex~="" then
+ character = hexchartable[charcode] or char(tonumber(charcode,16))
+ hexchartable[charcode] = character
+ else
+ character = decchartable[charcode] or char(tonumber(charcode))
+ decchartable[charcode] = character
+ end
+ return character
+ end)
+end
+
+return M
+
+