From c3fcd6a29999502c8c0e080c780c24284a754207 Mon Sep 17 00:00:00 2001 From: Philipp Gesang Date: Tue, 10 May 2011 22:22:38 +0200 Subject: =?UTF-8?q?hinting=20(character:=20=E2=80=9C*=E2=80=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../third/transliterator/trans_tables_sr.lua | 30 +++++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'tex/context/third/transliterator/trans_tables_sr.lua') diff --git a/tex/context/third/transliterator/trans_tables_sr.lua b/tex/context/third/transliterator/trans_tables_sr.lua index 953d934..0fab540 100644 --- a/tex/context/third/transliterator/trans_tables_sr.lua +++ b/tex/context/third/transliterator/trans_tables_sr.lua @@ -128,18 +128,30 @@ if not translit.done_serbian then end end - translit.serbian_exceptions = { } + --local _p_hintchar = P"*" / "" + local _p_hintchar = P"*" / "" + local hintme = "dln" + local _p_tocy_hint, _p_tolt_hint - local _p_hintchar = P"|" / "" - local hintme = P"dln" for left in hintme:utfcharacters() do local right = translit.sr_tocy_lower[left] local LEFT, RIGHT = upper(left), upper(right) + if not _p_tocy_hint then + _p_tocy_hint = P(left) / right + P(LEFT) / RIGHT + _p_tolt_hint = P(right) / left + P(RIGHT) / LEFT + else + _p_tocy_hint = _p_tocy_hint + P(left) / right + P(LEFT) / RIGHT + _p_tolt_hint = _p_tolt_hint + P(right) / left + P(RIGHT) / LEFT + end end + + translit.serbian_exceptions = { } translit.serbian_exceptions.p_tocy = p_tocy translit.serbian_exceptions.p_tolt = p_tolt translit.serbian_exceptions.p_tocy_init = p_i_tocy translit.serbian_exceptions.p_tolt_init = p_i_tolt + translit.serbian_exceptions.p_tocy_hint = _p_tocy_hint * _p_hintchar + translit.serbian_exceptions.p_tolt_hint = _p_tolt_hint * _p_hintchar translit.done_serbian = true end @@ -153,17 +165,21 @@ local t = translit local function sr (mode, text) local P, R, Cs = lpeg.P, lpeg.R, lpeg.Cs local utfchar = translit.utfchar - local _p_sre = t.serbian_exceptions["p_" .. mode:match("to..$")] - local _p_sre_i = t.serbian_exceptions["p_" .. mode:match("to..$") .. "_init"] + local modestr = "p_" .. mode:match("to..$") + local _p_sre = t.serbian_exceptions[modestr] + local _p_sre_i = t.serbian_exceptions[modestr .. "_init"] local trl_sr = translit.make_add_dict{} trl_sr = t[mode.."_upper"] + t[mode.."_lower"] -- transliteration from latin script requires macro handling … local _p_macro = P[[\]] * R("az", "AZ")^1 - local _p_sr = translit.addrules (trl_sr) + local _p_sr = translit.addrules (trl_sr, _p_sr) / trl_sr + if translit.hinting then + _p_sr = t.serbian_exceptions[modestr .. "_hint"] + _p_sr + end - local p_sr = Cs(_p_sre_i^-1 * (_p_macro + _p_sre + (_p_sr / trl_sr) + utfchar)^0) + local p_sr = Cs(_p_sre_i^-1 * (_p_macro + _p_sre + _p_sr + utfchar)^0) return p_sr:match(text) end -- cgit v1.2.3