diff options
author | Karl Berry <karl@freefriends.org> | 2018-02-09 22:37:12 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-02-09 22:37:12 +0000 |
commit | 0c27d66da3ffc60c573dd310ece80c762b2bbd0f (patch) | |
tree | 613b51549bd18c73ce7d5fdb68a397fd8764b458 /Master/texmf-dist/tex/luatex/luaxml/luaxml-entities.lua | |
parent | ec193f4df1f9e5166fef311864f2924eebd20a40 (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.lua | 37 |
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 + + |