diff options
author | Karl Berry <karl@freefriends.org> | 2022-01-17 20:58:53 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-01-17 20:58:53 +0000 |
commit | ffc9dc77689dc5a81c175a10c167f1d8e3630092 (patch) | |
tree | 515e5e8389df2053449463aa70fb49153e434616 /Master/texmf-dist/doc | |
parent | ff3d8cdee7284dec8be1092a253ba6bca6f2a93b (diff) |
kanbun.lua in runtime
git-svn-id: svn://tug.org/texlive/trunk@61637 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc')
-rw-r--r-- | Master/texmf-dist/doc/latex/kanbun/kanbun.lua | 224 |
1 files changed, 0 insertions, 224 deletions
diff --git a/Master/texmf-dist/doc/latex/kanbun/kanbun.lua b/Master/texmf-dist/doc/latex/kanbun/kanbun.lua deleted file mode 100644 index 9f8f01aab39..00000000000 --- a/Master/texmf-dist/doc/latex/kanbun/kanbun.lua +++ /dev/null @@ -1,224 +0,0 @@ -function directtex(str) - coroutine.yield(str) -end - -function to_TeX_box(str) - directtex("\\ExplSyntaxOn\\newbox\\kanbun_lua_box\\sbox\\kanbun_lua_box{"..str.."}\\ExplSyntaxOff") - return tex.getbox('kanbun_lua_box') -end - -function has_value (tab, val) - for index, value in ipairs(tab) do - if value == val then - return true - end - end - return false -end - -function main_loop() - brackets = {} - -- - brackets["furigana"] = {"(", ")"} - brackets["okurigana"] = {"{","}"} -- allow user to omit - brackets["kaeriten"] = {"[","]"} - brackets["furigana4saidokumoji"] = {"‹","›"} - brackets["okurigana4saidokumoji"] = {"«","»"} - -- - -- other_brackets["punctuation"] = {"⦉","⦊"} - -- other_brackets["kanji"] = {"⌊","⌋"} - -- other_brackets["multikanji"] = {"‘","’"} - -- other_brackets["unit"] = {"“","”"} - -- - left_brackets = {} - right_brackets = {} - for k,v in pairs(brackets) do - table.insert(left_brackets, v[1]) - table.insert(right_brackets, v[2]) - end - - -- punctuation_str = "〻―・、,。…「」『』" - punctuation_str = "㆐〻―—・、,。…「」『』!?:" - left_punctuation_str = "「『" - - lines_chars_table = {} - tex_kana_bool = token.create("g_kana_bool") - tex_true_bool = token.create("c_true_bool") - for i,l in ipairs(verb_table) do - split_line = {} - for c in l:gmatch(utf8.charpattern) do - table.insert(split_line, c) - end - - -- some unknown bug (in \matchkana ?) solved by changing the last entry to an empty string if not ascii - for i,c in ipairs(split_line) do - last_index = i - end - if utf8.codepoint(split_line[last_index] or " ") < 128 then - split_line[last_index+1]="" - else - split_line[last_index]="" - end - - last_bracket_index = 0 - for j,c in ipairs(split_line) do - if has_value(left_brackets, c) then - last_bracket_index = j - end - if last_bracket_index == 0 then - directtex("\\matchkana{"..c.."}") - if tex_kana_bool.mode == tex_true_bool.mode then - split_line[j] = brackets["okurigana"][1]..c..brackets["okurigana"][2] - else - split_line[j] = "“⌊"..c.."⌋”" - end - end - if has_value(right_brackets, c) then - last_bracket_index = 0 - end - end - table.insert(lines_chars_table, split_line) - end - - annotated_lines_table = {} - for i,l in ipairs(lines_chars_table) do - line = table.concat(l, "") - - line = string.gsub(line, brackets["okurigana"][2]..brackets["okurigana"][1], "") - for k,v in pairs(brackets) do - line = string.gsub(line, "”(%"..v[1]..")", "%1") - line = string.gsub(line, "(%"..v[2]..")(“)", "%1”%2") - end - for c in line:gmatch(utf8.charpattern) do - last = c - end - if has_value(right_brackets, last) then - str = str .. '”' - end - line = string.gsub(line, "⌊‘⌋”", "‘") - line = string.gsub(line, "“⌊’⌋", "’") - for p in punctuation_str:gmatch(utf8.charpattern) do - line = string.gsub(line, "”“⌊("..p..")⌋", "⦉%1⦊") - end - line = string.gsub(line, "⦊⦉", "") - - -- reverse the makeshift bug fix to \matchkana - line = string.gsub(line, "“⌊⌋”", "") - - -- process annotated text - tmp_number_of_multikanji_braces = {utf8.char(61442), utf8.char(61443)} - -- process line into units - split_line = {} - for c in line:gmatch(utf8.charpattern) do - table.insert(split_line, c) - end - units = {} - unit_content = {} - last_bracket_index = 0 - for j,c in ipairs(split_line) do - if c == "”" then - last_bracket_index = last_bracket_index - 1 - end - if last_bracket_index < 1 then - table.insert(units, table.concat(unit_content, "")) - unit_content = {} - else - table.insert(unit_content, c) - end - if c == "“" then - last_bracket_index = last_bracket_index + 1 - end - end - -- account for multikanji - for j,u in ipairs(units) do - split_unit = {} - for c in u:gmatch(utf8.charpattern) do - table.insert(split_unit, c) - end - number_of_multikanji = 0 - local last_k - for k,c in ipairs(split_unit) do - if c == "“" then - number_of_multikanji = number_of_multikanji + 1 - last_k = k - end - end - for m,c in ipairs(split_unit) do - if m == last_k then - split_unit[m] = "“"..tmp_number_of_multikanji_braces[1]..number_of_multikanji..tmp_number_of_multikanji_braces[2] - end - end - units[j] = table.concat(split_unit, "") - if number_of_multikanji > 0 then - units[j] = string.gsub(units[j], "“(.-)”’(.*)", "“%1%2”") - units[j] = string.gsub(units[j], "‘", "") - tmp_unit = units[j] - table.remove(units, j) - for new_unit in tmp_unit:gmatch"“(.-)”" do - table.insert(units, j, new_unit) - j = j + 1 - end - end - end - for j,u in ipairs(units) do - if u == "" then - table.remove(units, j) - end - end - next_left_punct_ = "" - for j,u in ipairs(units) do - right_okuri_ = u:match("%{(.-)%}") or "" - kanji_ = u:match("⌊(.-)⌋") or "" - right_furi_ = u:match("%((.-)%)") or "" - left_furi_ = u:match("‹(.-)›") or "" - left_okuri_ = u:match("«(.-)»") or "" - punct_ = u:match("⦉(.-)⦊") or "" - -- - -- punct_ = punct_:gsub("―", "\\tateten") - -- punct_ = punct_:gsub("—", "\\tateten") - -- punct_ = punct_:gsub("〻", "\\ninojiten") - -- - kaeriten_ = u:match("%[(.-)%]") or "" - multikanji_ = u:match(tmp_number_of_multikanji_braces[1].."(.-)"..tmp_number_of_multikanji_braces[2]) or 0 - if punctuation_str:match(kanji_) then - punct_ = kanji_ - kanji_ = "" - end - left_punct_ = next_left_punct_ - next_left_punct_ = "" - for p_ in punct_:gmatch(utf8.charpattern) do - if left_punctuation_str:match(p_) then - next_left_punct_ = next_left_punct_ .. p_ - end - end - for p_ in left_punctuation_str:gmatch(utf8.charpattern) do - punct_ = string.gsub(punct_, p_, "") - end - if u:match(tmp_number_of_multikanji_braces[1]) then - multiruby_raise_by_ = 0 - for trace_back_index = 1, multikanji_-1 do - multiruby_raise_by_ = multiruby_raise_by_ + to_TeX_box(units[j - trace_back_index]).width/(kanbunzwtosp) - end - units[j - multikanji_ + 1] = units[j - multikanji_ + 1]:gsub("\\kanjiunit", "\\hbox{\\kanjiunit") - units[j] = "\\kanjiunit{\\multifuriokuri["..multiruby_raise_by_.."]{"..right_furi_.."}{"..right_okuri_.."}}{"..left_punct_.."}{"..kanji_.."}{"..punct_.."}{"..kaeriten_.."}{\\multifuriokuri["..multiruby_raise_by_.."]{"..left_furi_.."}{"..left_okuri_.."}}}" - else - if kanji_ == "" then - units[j] = "" - else - units[j] = "\\kanjiunit{\\furiokuri{"..right_furi_.."}{"..right_okuri_.."}}{"..left_punct_.."}{"..kanji_.."}{"..punct_.."}{"..kaeriten_.."}{\\furiokuri{"..left_furi_.."}{"..left_okuri_.."}}" - end - end - end - line = table.concat(units, "") - - table.insert(annotated_lines_table, line) - end - - -- ouput - output = "{\\kanbunfont"..table.concat(annotated_lines_table, "\\par").."\\par}" - directtex("\\def\\printkanbun{"..output.."}") - directtex("\\def\\printkanbuncode{\\directlua{print('')print(output)}}") - - -- end loop in TeX - directtex("\\continuefalse") -end |