diff options
Diffstat (limited to 'Master/texmf-dist/tex/lualatex/uninormalize/unicode-normalize-names.lua')
-rw-r--r-- | Master/texmf-dist/tex/lualatex/uninormalize/unicode-normalize-names.lua | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/lualatex/uninormalize/unicode-normalize-names.lua b/Master/texmf-dist/tex/lualatex/uninormalize/unicode-normalize-names.lua new file mode 100644 index 00000000000..a15d6b09785 --- /dev/null +++ b/Master/texmf-dist/tex/lualatex/uninormalize/unicode-normalize-names.lua @@ -0,0 +1,57 @@ +-- Unicode names + +if not characters then + require "char-def" +end + +unicode = unicode or { } +unicode.conformance = unicode.conformance or { } + +unidata = characters.data + +if not math.div then -- from l-math.lua + function math.div(n, m) + return math.floor(n/m) + end +end + +local function is_hangul(char) + return char >= 0xAC00 and char <= 0xD7A3 +end + +local function is_han_character(char) -- from font-otf.lua (check) + return + (char>=0x04E00 and char<=0x09FFF) or + (char>=0x03400 and char<=0x04DFF) or + (char>=0x20000 and char<=0x2A6DF) or + (char>=0x0F900 and char<=0x0FAFF) or + (char>=0x2F800 and char<=0x2FA1F) +end + +local SBase, LBase, VBase, TBase = 0xAC00, 0x1100, 0x1161, 0x11A7 +local LCount, VCount, TCount = 19, 21, 28 +local NCount = VCount * TCount +local SCount = LCount * NCount + +local JAMO_L_TABLE = { [0] = "G", "GG", "N", "D", "DD", "R", "M", "B", "BB", + "S", "SS", "", "J", "JJ", "C", "K", "T", "P", "H" } +local JAMO_V_TABLE = { [0] = "A", "AE", "YA", "YAE", "EO", "E", "YEO", "YE", + "O", "WA", "WAE", "OE", "YO", "U", "WEO", "WE", "WI", "YU", "EU", "YI", "I" } +local JAMO_T_TABLE = { [0] = "", "G", "GG", "GS", "N", "NJ", "NH", "D", "L", + "LG", "LM", "LB", "LS", "LT", "LP", "LH", "M", "B", "BS", "S", "SS", "NG", + "J", "C", "K", "T", "P", "H" } + +function unicode.conformance.name(char) + if is_hangul(char) then + local SIndex = char - SBase + local LIndex = math.div(SIndex, NCount) + local VIndex = math.div(SIndex % NCount, TCount) + local TIndex = SIndex % TCount + return string.format("HANGUL SYLLABLE %s%s%s", JAMO_L_TABLE[LIndex], + JAMO_V_TABLE[VIndex], JAMO_T_TABLE[TIndex]) + elseif is_han_character(char) + then return string.format("CJK UNIFIED IDEOGRAPH-%04X", char) + elseif unidata[char] -- if unidata[char] exists, the name exists + then return unidata[char].description + end +end |