diff options
author | Marius <mariausol@gmail.com> | 2013-05-19 20:40:34 +0300 |
---|---|---|
committer | Marius <mariausol@gmail.com> | 2013-05-19 20:40:34 +0300 |
commit | 13ec4b540e0d46c97fd7b089e0b7413da81e0a9f (patch) | |
tree | bebfa563a17c06b3bd3bf8f6f4ba6d025e00d107 /tex/context/base/char-tex.lua | |
parent | 69ad13650cda027526271179e95b5294694143a1 (diff) | |
download | context-13ec4b540e0d46c97fd7b089e0b7413da81e0a9f.tar.gz |
beta 2013.05.19 19:27
Diffstat (limited to 'tex/context/base/char-tex.lua')
-rw-r--r-- | tex/context/base/char-tex.lua | 422 |
1 files changed, 211 insertions, 211 deletions
diff --git a/tex/context/base/char-tex.lua b/tex/context/base/char-tex.lua index 91aa387b9..c470eb6c4 100644 --- a/tex/context/base/char-tex.lua +++ b/tex/context/base/char-tex.lua @@ -1,211 +1,211 @@ -if not modules then modules = { } end modules ['char-tex'] = { - version = 1.001, - comment = "companion to char-ini.mkiv", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" -} - -local lpeg = lpeg - -local find = string.find -local P, C, R, S, Cs, Cc = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cs, lpeg.Cc -local U, lpegmatch = lpeg.patterns.utf8, lpeg.match - -local allocate, mark = utilities.storage.allocate, utilities.storage.mark - -characters = characters or { } -local characters = characters -characters.tex = characters.tex or { } - -local accentmapping = allocate { - ['"'] = { [""] = "¨", - A = "Ä", a = "ä", - E = "Ë", e = "ë", - I = "Ï", i = "ï", ["ı"] = "ï", - O = "Ö", o = "ö", - U = "Ü", u = "ü", - Y = "Ÿ", y = "ÿ", - }, - ["'"] = { [""] = "´", - A = "Á", a = "á", - C = "Ć", c = "ć", - E = "É", e = "é", - I = "Í", i = "í", ["ı"] = "í", - L = "Ĺ", l = "ĺ", - N = "Ń", n = "ń", - O = "Ó", o = "ó", - R = "Ŕ", r = "ŕ", - S = "Ś", s = "ś", - U = "Ú", u = "ú", - Y = "Ý", y = "ý", - Z = "Ź", z = "ź", - }, - ["."] = { [""] = "˙", - C = "Ċ", c = "ċ", - E = "Ė", e = "ė", - G = "Ġ", g = "ġ", - I = "İ", i = "i", ["ı"] = "i", - Z = "Ż", z = "ż", - }, - ["="] = { [""] = "¯", - A = "Ā", a = "ā", - E = "Ē", e = "ē", - I = "Ī", i = "ī", ["ı"] = "ī", - O = "Ō", o = "ō", - U = "Ū", u = "ū", - }, - ["H"] = { [""] = "˝", - O = "Ő", o = "ő", - U = "Ű", u = "ű", - }, - ["^"] = { [""] = "ˆ", - A = "Â", a = "â", - C = "Ĉ", c = "ĉ", - E = "Ê", e = "ê", - G = "Ĝ", g = "ĝ", - H = "Ĥ", h = "ĥ", - I = "Î", i = "î", ["ı"] = "î", - J = "Ĵ", j = "ĵ", - O = "Ô", o = "ô", - S = "Ŝ", s = "ŝ", - U = "Û", u = "û", - W = "Ŵ", w = "ŵ", - Y = "Ŷ", y = "ŷ", - }, - ["`"] = { [""] = "`", - A = "À", a = "à", - E = "È", e = "è", - I = "Ì", i = "ì", ["ı"] = "ì", - O = "Ò", o = "ò", - U = "Ù", u = "ù", - Y = "Ỳ", y = "ỳ", - }, - ["c"] = { [""] = "¸", - C = "Ç", c = "ç", - K = "Ķ", k = "ķ", - L = "Ļ", l = "ļ", - N = "Ņ", n = "ņ", - R = "Ŗ", r = "ŗ", - S = "Ş", s = "ş", - T = "Ţ", t = "ţ", - }, - ["k"] = { [""] = "˛", - A = "Ą", a = "ą", - E = "Ę", e = "ę", - I = "Į", i = "į", - U = "Ų", u = "ų", - }, - ["r"] = { [""] = "˚", - A = "Å", a = "å", - U = "Ů", u = "ů", - }, - ["u"] = { [""] = "˘", - A = "Ă", a = "ă", - E = "Ĕ", e = "ĕ", - G = "Ğ", g = "ğ", - I = "Ĭ", i = "ĭ", ["ı"] = "ĭ", - O = "Ŏ", o = "ŏ", - U = "Ŭ", u = "ŭ", - }, - ["v"] = { [""] = "ˇ", - C = "Č", c = "č", - D = "Ď", d = "ď", - E = "Ě", e = "ě", - L = "Ľ", l = "ľ", - N = "Ň", n = "ň", - R = "Ř", r = "ř", - S = "Š", s = "š", - T = "Ť", t = "ť", - Z = "Ž", z = "ž", - }, - ["~"] = { [""] = "˜", - A = "Ã", a = "ã", - I = "Ĩ", i = "ĩ", ["ı"] = "ĩ", - N = "Ñ", n = "ñ", - O = "Õ", o = "õ", - U = "Ũ", u = "ũ", - }, -} - -characters.tex.accentmapping = accentmapping - -local accent_map = allocate { -- incomplete - ['~'] = "̃" , -- ̃ Ẽ - ['"'] = "̈" , -- ̈ Ë - ["`"] = "̀" , -- ̀ È - ["'"] = "́" , -- ́ É - ["^"] = "̂" , -- ̂ Ê - -- ̄ Ē - -- ̆ Ĕ - -- ̇ Ė - -- ̉ Ẻ - -- ̌ Ě - -- ̏ Ȅ - -- ̑ Ȇ - -- ̣ Ẹ - -- ̧ Ȩ - -- ̨ Ę - -- ̭ Ḙ - -- ̰ Ḛ -} - -local accents = table.concat(table.keys(accent_map)) - -local function remap_accents(a,c,braced) - local m = accent_map[a] - if m then - return c .. m - elseif braced then - return "\\" .. a .. "{" .. c .. "}" - else - return "\\" .. a .. c - end -end - -local command_map = allocate { - ["i"] = "ı" -} - -local function remap_commands(c) - local m = command_map[c] - if m then - return m - else - return "\\" .. c - end -end - -local accents = (P('\\') * C(S(accents)) * (P("{") * C(U) * P("}" * Cc(true)) + C(U) * Cc(false))) / remap_accents -local commands = (P('\\') * C(R("az","AZ")^1)) / remap_commands - -local convert_accents = Cs((accents + P(1))^0) -local convert_commands = Cs((commands + P(1))^0) - -local no_l = P("{") / "" -local no_r = P("}") / "" - -local convert_accents_strip = Cs((no_l * accents * no_r + accents + P(1))^0) -local convert_commands_strip = Cs((no_l * commands * no_r + commands + P(1))^0) - -function characters.tex.toutf(str,strip) - if not find(str,"\\") then -- we can start at the found position - return str - elseif strip then - return lpegmatch(convert_accents_strip,lpegmatch(convert_commands_strip,str)) - else - return lpegmatch(convert_accents, lpegmatch(convert_commands, str)) - end -end - ---~ print(characters.tex.toutf([[\"{e}]]),true) ---~ print(characters.tex.toutf([[{\"{e}}]],true)) - -function characters.tex.defineaccents() - for accent, group in next, accentmapping do - context.dodefineaccentcommand(accent) - for character, mapping in next, group do - context.dodefineaccent(accent,character,mapping) - end - end -end +if not modules then modules = { } end modules ['char-tex'] = {
+ version = 1.001,
+ comment = "companion to char-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local lpeg = lpeg
+
+local find = string.find
+local P, C, R, S, Cs, Cc = lpeg.P, lpeg.C, lpeg.R, lpeg.S, lpeg.Cs, lpeg.Cc
+local U, lpegmatch = lpeg.patterns.utf8, lpeg.match
+
+local allocate, mark = utilities.storage.allocate, utilities.storage.mark
+
+characters = characters or { }
+local characters = characters
+characters.tex = characters.tex or { }
+
+local accentmapping = allocate {
+ ['"'] = { [""] = "¨",
+ A = "Ä", a = "ä",
+ E = "Ë", e = "ë",
+ I = "Ï", i = "ï", ["ı"] = "ï",
+ O = "Ö", o = "ö",
+ U = "Ü", u = "ü",
+ Y = "Ÿ", y = "ÿ",
+ },
+ ["'"] = { [""] = "´",
+ A = "Á", a = "á",
+ C = "Ć", c = "ć",
+ E = "É", e = "é",
+ I = "Í", i = "í", ["ı"] = "í",
+ L = "Ĺ", l = "ĺ",
+ N = "Ń", n = "ń",
+ O = "Ó", o = "ó",
+ R = "Ŕ", r = "ŕ",
+ S = "Ś", s = "ś",
+ U = "Ú", u = "ú",
+ Y = "Ý", y = "ý",
+ Z = "Ź", z = "ź",
+ },
+ ["."] = { [""] = "˙",
+ C = "Ċ", c = "ċ",
+ E = "Ė", e = "ė",
+ G = "Ġ", g = "ġ",
+ I = "İ", i = "i", ["ı"] = "i",
+ Z = "Ż", z = "ż",
+ },
+ ["="] = { [""] = "¯",
+ A = "Ā", a = "ā",
+ E = "Ē", e = "ē",
+ I = "Ī", i = "ī", ["ı"] = "ī",
+ O = "Ō", o = "ō",
+ U = "Ū", u = "ū",
+ },
+ ["H"] = { [""] = "˝",
+ O = "Ő", o = "ő",
+ U = "Ű", u = "ű",
+ },
+ ["^"] = { [""] = "ˆ",
+ A = "Â", a = "â",
+ C = "Ĉ", c = "ĉ",
+ E = "Ê", e = "ê",
+ G = "Ĝ", g = "ĝ",
+ H = "Ĥ", h = "ĥ",
+ I = "Î", i = "î", ["ı"] = "î",
+ J = "Ĵ", j = "ĵ",
+ O = "Ô", o = "ô",
+ S = "Ŝ", s = "ŝ",
+ U = "Û", u = "û",
+ W = "Ŵ", w = "ŵ",
+ Y = "Ŷ", y = "ŷ",
+ },
+ ["`"] = { [""] = "`",
+ A = "À", a = "à",
+ E = "È", e = "è",
+ I = "Ì", i = "ì", ["ı"] = "ì",
+ O = "Ò", o = "ò",
+ U = "Ù", u = "ù",
+ Y = "Ỳ", y = "ỳ",
+ },
+ ["c"] = { [""] = "¸",
+ C = "Ç", c = "ç",
+ K = "Ķ", k = "ķ",
+ L = "Ļ", l = "ļ",
+ N = "Ņ", n = "ņ",
+ R = "Ŗ", r = "ŗ",
+ S = "Ş", s = "ş",
+ T = "Ţ", t = "ţ",
+ },
+ ["k"] = { [""] = "˛",
+ A = "Ą", a = "ą",
+ E = "Ę", e = "ę",
+ I = "Į", i = "į",
+ U = "Ų", u = "ų",
+ },
+ ["r"] = { [""] = "˚",
+ A = "Å", a = "å",
+ U = "Ů", u = "ů",
+ },
+ ["u"] = { [""] = "˘",
+ A = "Ă", a = "ă",
+ E = "Ĕ", e = "ĕ",
+ G = "Ğ", g = "ğ",
+ I = "Ĭ", i = "ĭ", ["ı"] = "ĭ",
+ O = "Ŏ", o = "ŏ",
+ U = "Ŭ", u = "ŭ",
+ },
+ ["v"] = { [""] = "ˇ",
+ C = "Č", c = "č",
+ D = "Ď", d = "ď",
+ E = "Ě", e = "ě",
+ L = "Ľ", l = "ľ",
+ N = "Ň", n = "ň",
+ R = "Ř", r = "ř",
+ S = "Š", s = "š",
+ T = "Ť", t = "ť",
+ Z = "Ž", z = "ž",
+ },
+ ["~"] = { [""] = "˜",
+ A = "Ã", a = "ã",
+ I = "Ĩ", i = "ĩ", ["ı"] = "ĩ",
+ N = "Ñ", n = "ñ",
+ O = "Õ", o = "õ",
+ U = "Ũ", u = "ũ",
+ },
+}
+
+characters.tex.accentmapping = accentmapping
+
+local accent_map = allocate { -- incomplete
+ ['~'] = "̃" , -- ̃ Ẽ
+ ['"'] = "̈" , -- ̈ Ë
+ ["`"] = "̀" , -- ̀ È
+ ["'"] = "́" , -- ́ É
+ ["^"] = "̂" , -- ̂ Ê
+ -- ̄ Ē
+ -- ̆ Ĕ
+ -- ̇ Ė
+ -- ̉ Ẻ
+ -- ̌ Ě
+ -- ̏ Ȅ
+ -- ̑ Ȇ
+ -- ̣ Ẹ
+ -- ̧ Ȩ
+ -- ̨ Ę
+ -- ̭ Ḙ
+ -- ̰ Ḛ
+}
+
+local accents = table.concat(table.keys(accent_map))
+
+local function remap_accents(a,c,braced)
+ local m = accent_map[a]
+ if m then
+ return c .. m
+ elseif braced then
+ return "\\" .. a .. "{" .. c .. "}"
+ else
+ return "\\" .. a .. c
+ end
+end
+
+local command_map = allocate {
+ ["i"] = "ı"
+}
+
+local function remap_commands(c)
+ local m = command_map[c]
+ if m then
+ return m
+ else
+ return "\\" .. c
+ end
+end
+
+local accents = (P('\\') * C(S(accents)) * (P("{") * C(U) * P("}" * Cc(true)) + C(U) * Cc(false))) / remap_accents
+local commands = (P('\\') * C(R("az","AZ")^1)) / remap_commands
+
+local convert_accents = Cs((accents + P(1))^0)
+local convert_commands = Cs((commands + P(1))^0)
+
+local no_l = P("{") / ""
+local no_r = P("}") / ""
+
+local convert_accents_strip = Cs((no_l * accents * no_r + accents + P(1))^0)
+local convert_commands_strip = Cs((no_l * commands * no_r + commands + P(1))^0)
+
+function characters.tex.toutf(str,strip)
+ if not find(str,"\\") then -- we can start at the found position
+ return str
+ elseif strip then
+ return lpegmatch(convert_accents_strip,lpegmatch(convert_commands_strip,str))
+ else
+ return lpegmatch(convert_accents, lpegmatch(convert_commands, str))
+ end
+end
+
+--~ print(characters.tex.toutf([[\"{e}]]),true)
+--~ print(characters.tex.toutf([[{\"{e}}]],true))
+
+function characters.tex.defineaccents()
+ for accent, group in next, accentmapping do
+ context.dodefineaccentcommand(accent)
+ for character, mapping in next, group do
+ context.dodefineaccent(accent,character,mapping)
+ end
+ end
+end
|