summaryrefslogtreecommitdiff
path: root/tex/context/base/char-utf.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/char-utf.lua')
-rw-r--r--tex/context/base/char-utf.lua40
1 files changed, 24 insertions, 16 deletions
diff --git a/tex/context/base/char-utf.lua b/tex/context/base/char-utf.lua
index fcb8804dd..5e5d575c5 100644
--- a/tex/context/base/char-utf.lua
+++ b/tex/context/base/char-utf.lua
@@ -138,34 +138,42 @@ to their right glyph there.</p>
0x100000.</p>
--ldx]]--
-characters.filters.utf.private = { }
-characters.filters.utf.private.high = { }
-characters.filters.utf.private.low = { }
+characters.filters.utf.private = {
+ high = { },
+ low = { },
+ escapes = { },
+}
do
+ local low = characters.filters.utf.private.low
+ local high = characters.filters.utf.private.high
+ local escapes = characters.filters.utf.private.escapes
+ local special = "~#$%^&_{}\\"
+
local ub, uc, ug = utf.byte, utf.char, utf.gsub
- local cfup = characters.filters.utf.private
function characters.filters.utf.private.set(ch)
- local cb = ub(ch)
+ local cb
+ if type(ch) == "number" then
+ cb, ch = ch, uc(ch)
+ else
+ cb = ub(ch)
+ end
if cb < 256 then
- cfup.low[ch] = uc(0x0F0000 + cb)
- cfup.high[uc(0x0F0000 + cb)] = ch
+ low [ch] = uc(0x0F0000 + cb)
+ high [uc(0x0F0000 + cb)] = ch
+ escapes[ch] = "\\" .. ch
end
end
- function characters.filters.utf.private.replace(str)
- ug("(.)", cfup.low)
- end
+ function characters.filters.utf.private.replace(str) return ug(str,"(.)", low ) end
+ function characters.filters.utf.private.revert(str) return ug(str,"(.)", high ) end
+ function characters.filters.utf.private.escape(str) return ug(str,"(.)", escapes) end
- function characters.filters.utf.private.revert(str)
- ug("(.)", cfup.high)
- end
+ local set = characters.filters.utf.private.set
- for _, ch in ipairs({ '~', '#', '$', '%', '^', '&', '_', '{', '}' }) do
- cfup.set(ch)
- end
+ for ch in special:gmatch(".") do set(ch) end
end