diff --git a/characters_to_sitelen_pona.lua b/characters_to_sitelen_pona.lua index a14bdee..99e8aa5 100644 --- a/characters_to_sitelen_pona.lua +++ b/characters_to_sitelen_pona.lua @@ -1,4 +1,6 @@ -- Created for "sitelen seli kiwen" font (https://www.kreativekorp.com/software/fonts/sitelenselikiwen/) + +-- TODO: use preprocessor return { ["["] = "󱦐", ["]"] = "󱦑", @@ -18,4 +20,13 @@ return { ["』"] = "』", ["„"] = "„", ["‚"] = "‚", + ["."] = ".", + [","] = ",", + ["、"] = "、", + ["。"] = "。", + ["+"] = "󱤊", + ["?"] = "󱥙", + ["1"] = "󱥳", + ["2"] = "󱥮", + ["5"] = "󱤭", } diff --git a/latin_to_sitelen_pona.lua b/latin_to_sitelen_pona.lua index 5bdd835..58176f2 100644 --- a/latin_to_sitelen_pona.lua +++ b/latin_to_sitelen_pona.lua @@ -1,4 +1,5 @@ -- Created for "sitelen seli kiwen" font (https://www.kreativekorp.com/software/fonts/sitelenselikiwen/) + return { a = "󱤀", akesi = "󱤁", diff --git a/sitelen_pona.lua b/sitelen_pona.lua index c180481..7eff619 100644 --- a/sitelen_pona.lua +++ b/sitelen_pona.lua @@ -21,6 +21,12 @@ M.__syntax = __syntax local __characters_syntax = require("characters_to_sitelen_pona") M.__characters_syntax = __characters_syntax +---@type table[] +local __compound_syntax = require("sitelen_pona_kulupu") +M.__compound_syntax = __compound_syntax + + +-- TODO: use preprocessor local __special_chars_length = {} -- messy workaround due to Lua bug local __dots = { ["。"] = true, @@ -77,7 +83,7 @@ end ---@param _text string ---@param new_line_pattern string?new_line_pattern ----@return SitelenPonaPart[], boolean # string, is sitelen pona? +---@return SitelenPonaPart[], boolean # string[], is sitelen pona? function M.toki_pona_mute_to_sitelen_pona(_text, new_line_pattern) new_line_pattern = new_line_pattern or "[^\r\n]+" local is_sitelen_pona = false @@ -130,6 +136,9 @@ function M.toki_pona_mute_to_sitelen_pona(_text, new_line_pattern) local function parse(text) local _, end_i, punc, word, punc2 = text:find("^([%p]*)([^%p]*)([%p]*)") + if punc == "" then + punc = nil + end if word == "" then word = nil else @@ -198,4 +207,74 @@ function M.toki_pona_mute_to_sitelen_pona(_text, new_line_pattern) end +---@param parts SitelenPonaPart[] +---@return SitelenPonaPart[], boolean # is compounded? +function M.compound_sitelen_pona(parts) + local parts_copy = {} + for i = 1, #parts do + parts_copy[i] = parts[i] + end + + if #parts_copy <= 1 then return parts_copy, false end + + local original_text = "" + local compound_length = 0 + local compound_syntax = __compound_syntax + local i = 0 + while true do + if i == #parts_copy then + return parts_copy, #parts_copy ~= #parts + end + + i = i + 1 + local part = parts_copy[i] + if not part.sitelep_pona then + compound_length = 0 + compound_syntax = __compound_syntax + original_text = "" + goto skip + end + + if part.original == "-" then + if compound_length > 0 then + compound_length = compound_length + 1 + end + goto skip + end + + compound_syntax = compound_syntax[part.sitelep_pona] or __compound_syntax + if compound_syntax == __compound_syntax then + original_text = "" + compound_length = 0 + + compound_syntax = compound_syntax[part.sitelep_pona] + if compound_syntax == nil then + compound_syntax = __compound_syntax + goto skip + end + end + + compound_length = compound_length + 1 + + original_text = original_text .. part.original .. " " + if type(compound_syntax) == "table" then + goto skip + end + + local prev_i = i - compound_length + 1 + for _ = 1, compound_length - 1 do + table.remove(parts_copy, prev_i) + end + i = prev_i + parts_copy[i] = { + sitelep_pona = compound_syntax, + original = original_text, + is_add_space = part.is_add_space + } + + ::skip:: + end +end + + return M diff --git a/sitelen_pona_kulupu.lua b/sitelen_pona_kulupu.lua new file mode 100644 index 0000000..daf953a --- /dev/null +++ b/sitelen_pona_kulupu.lua @@ -0,0 +1,513 @@ +-- Created for "sitelen seli kiwen" font (https://www.kreativekorp.com/software/fonts/sitelenselikiwen/) + +local l = require("latin_to_sitelen_pona") + +return { + [l.anpa] = { + [l.lawa] = "󿤀", + }, + [l.ijo] = { + [l.akesi] = "󿤁", + [l.ala] = "󿤂", + [l.alasa] = "󿤃", + [l.ale] = "󿤄", + [l.ali] = "󿤄", + [l.anpa] = "󿤅", + [l.ante] = "󿤆", + [l.anu] = "󿤇", + [l.apeja] = "󿤈", + [l.awen] = "󿤉", + [l.en] = "󿤊", + [l.esun] = "󿤋", + [l.ilo] = "󿤍", + [l.insa] = "󿤎", + [l.jaki] = "󿤏", + [l.jan] = "󿤐", + [l.jelo] = "󿤑", + [l.jo] = "󿤒", + [l.kala] = "󿤓", + [l.kalama] = "󿤔", + [l.kama] = "󿤕", + [l.kasi] = "󿤖", + [l.ken] = "󿤗", + [l.kepeken] = "󿤘", + [l.kepen] = "󿤘", + [l.kijetesantakalu] = "󿤙", + [l.kili] = "󿤚", + [l.kin] = "󿤛", + [l.kipisi] = "󿤜", + [l.kiwen] = "󿤝", + [l.ko] = "󿤞", + [l.kon] = "󿤟", + [l.kule] = "󿤠", + [l.kulupu] = "󿤡", + [l.kute] = "󿤢", + [l.lape] = "󿤣", + [l.laso] = "󿤤", + [l.lawa] = "󿤥", + [l.leko] = "󿤦", + [l.len] = "󿤧", + [l.lete] = "󿤨", + [l.lili] = "󿤩", + [l.linja] = "󿤪", + [l.lipu] = "󿤫", + [l.loje] = "󿤬", + [l.lon] = "󿤭", + [l.luka] = "󿤮", + [l.lukin] = "󿤯", + [l.lupa] = "󿤰", + [l.ma] = "󿤱", + [l.mama] = "󿤲", + [l.meli] = "󿤴", + [l.mi] = "󿤵", + [l.mije] = "󿤶", + [l.moku] = "󿤷", + [l.moli] = "󿤸", + [l.monsi] = "󿤹", + [l.monsuta] = "󿤺", + [l.mu] = "󿤻", + [l.mun] = "󿤼", + [l.musi] = "󿤽", + [l.mute] = "󿤾", + [l.namako] = "󿤿", + [l.nanpa] = "󿥀", + [l.nasa] = "󿥁", + [l.nasin] = "󿥂", + [l.nena] = "󿥃", + [l.ni] = "󿥄", -- TODO: add ijo-ni-li-seme + [l.nimi] = "󿥅", + [l.noka] = "󿥆", + [l.oko] = "󿥇", + [l.olin] = "󿥈", + [l.ona] = "󿥉", + [l.open] = "󿥊", + [l.pakala] = "󿥋", + [l.pake] = "󿥌", + [l.pali] = "󿥍", + [l.palisa] = "󿥎", + [l.pan] = "󿥏", + [l.pana] = "󿥐", + [l.pilin] = "󿥑", + [l.pimeja] = "󿥒", + [l.pini] = "󿥓", + [l.pipi] = "󿥔", + [l.poka] = "󿥕", + [l.poki] = "󿥖", + [l.pona] = "󿥗", + [l.pu] = "󿥘", + [l.seli] = "󿥚", + [l.selo] = "󿥛", + [l.seme] = "󿥜", + [l.sewi] = "󿥝", + [l.sijelo] = "󿥞", + [l.sike] = "󿥟", + [l.sin] = "󿥠", + [l.sina] = "󿥡", + [l.sinpin] = "󿥢", + [l.sitelen] = "󿥣", + [l.sona] = "󿥤", + [l.soweli] = "󿥥", + [l.suli] = "󿥦", + [l.suno] = "󿥧", + [l.supa] = "󿥨", + [l.suwi] = "󿥩", + [l.tan] = "󿥪", + [l.taso] = "󿥫", + [l.tawa] = "󿥬", + [l.telo] = "󿥭", + [l.tenpo] = "󿥮", + [l.toki] = "󿥯", + [l.tomo] = "󿥰", + [l.tonsi] = "󿥱", + [l.tu] = "󿥲", + [l.unpa] = "󿥳", + [l.uta] = "󿥴", + [l.utala] = "󿥵", + [l.walo] = "󿥶", + [l.wan] = "󿥷", + [l.waso] = "󿥸", + [l.wawa] = "󿥹", + [l.weka] = "󿥺", + [l.wile] = "󿥻", + }, + [l.ike] = { + [l.ala] = "󿥼", + [l.lili] = "󿥽", + [l.lukin] = "󿥾", + [l.mute] = "󿴜", + }, + [l.ilo] = { + [l.kipisi] = "󿥿", + [l.lape] = "󿦀", + [l.lukin] = "󿦁", + [l.moli] = "󿦂", + [l.musi] = "󿦃", + [l.nanpa] = "󿦄", + [l.oko] = "󿦅", + [l.open] = "󿦆", + [l.suno] = "󿦇", + [l.toki] = "󿦈", + }, + [l.jan] = { + [l.ala] = "󿦉", + [l.alasa] = "󿦊", + [l.ale] = "󿦋", + [l.ali] = "󿦋", + [l.ante] = "󿦌", + [l.ike] = "󿦍", + [l.kala] = "󿦎", + [l.kalama] = "󿦏", + [l.kasi] = "󿦐", + [l.kulupu] = "󿦑", + [l.lawa] = "󿦒", + [l.lili] = "󿦓", + [l.monsuta] = "󿦔", + [l.mute] = "󿦕", + [l.nasa] = "󿦖", + [l.ni] = "󿴁", + [l.olin] = "󿦗", + [l.pakala] = "󿦘", + [l.pali] = "󿦙", + [l.poka] = "󿦚", + [l.pona] = "󿦛", + [l.sama] = "󿦜", + [l.seme] = "󿦝", + [l.sewi] = "󿦞", + [l.sin] = "󿦟", + [l.sona] = "󿦠", + [l.suli] = "󿦡", + [l.suwi] = "󿦢", + [l.toki] = "󿦣", + [l.unpa] = "󿦤", + [l.utala] = "󿦥", + [l.wawa] = "󿦦", + }, + [l.kala] = { + [l.lete] = "󿦧", + [l.lili] = "󿦨", + }, + [l.kalama] = { + [l.musi] = "󿦩", + }, + [l.kasi] = { + [l.jelo] = "󿦪", + [l.kule] = "󿦫", + [l.laso] = "󿦬", + [l.lili] = "󿦭", + [l.loje] = "󿦮", + [l.pimeja] = "󿦯", + [l.walo] = "󿦰", + }, + [l.kijetesantakalu] = { + [l.soweli] = "󿴨", + }, + [l.kili] = { + [l.jelo] = "󿦱", + [l.laso] = "󿦲", + [l.lili] = "󿦳", + [l.loje] = "󿦴", + [l.palisa] = "󿦵", + [l.pimeja] = "󿦶", + [l.suwi] = "󿦷", + [l.walo] = "󿦸", + }, + [l.kiwen] = { + [l.jelo] = "󿦹", + [l.kasi] = "󿦺", + [l.laso] = "󿦻", + [l.lete] = "󿦼", + [l.lili] = "󿦽", + [l.loje] = "󿦾", + [l.mun] = "󿦿", + [l.pimeja] = "󿧀", + [l.seli] = "󿧁", + [l.suno] = "󿧂", + [l.walo] = "󿧃", + }, + [l.ko] = { + [l.jaki] = "󿧄", + [l.jelo] = "󿧅", + [l.kasi] = "󿧆", + [l.kule] = "󿧇", + [l.laso] = "󿧈", + [l.lete] = "󿧉", + [l.lili] = "󿧊", + [l.loje] = "󿧋", + [l.nasa] = "󿧌", + [l.pimeja] = "󿧍", + [l.seli] = "󿧎", + [l.walo] = "󿧏", + [l.lete] = "󿧐", + }, + [l.kule] = { + [l.kasi] = "󿴣", + [l.kili] = "󿴡", + [l.ma] = "󿴟", + [l.mun] = "󿴦", + [l.pilin] = "󿴧", + [l.sewi] = "󿴤", + [l.suno] = "󿴢", + [l.telo] = "󿴥", + [l.uta] = "󿴠", + }, + [l.laso] = { + [l.kasi] = "󿮽", + [l.mun] = "󿮾", + [l.sewi] = "󿮿", + [l.telo] = "󿯁", + }, + [l.len] = { + [l.jan] = "󿧑", + [l.jelo] = "󿧒", + [l.laso] = "󿧓", + [l.lawa] = "󿧔", + [l.lili] = "󿧕", + [l.loje] = "󿧖", + [l.luka] = "󿧗", + [l.noka] = "󿧘", + [l.pimeja] = "󿧙", + [l.sin] = "󿧚", + [l.walo] = "󿧛", + }, + [l.linja] = { + [l.lili] = "󿧜", + [l.pona] = "󿧝", + [l.sike] = "󿯴", + [l.suwi] = "󿯵", + }, + [l.lipu] = { + [l.kasi] = "󿧞", + [l.kule] = "󿴓", + [l.majuna] = "󿴑", + [l.nanpa] = "󿧟", + [l.nimi] = "󿯂", + [l.sewi] = "󿧠", + [l.sona] = "󿧡", + [l.tenpo] = "󿯄", + [l.toki] = "󿧢", + [l.unpa] = "󿴗", + }, + [l.loje] = { + [l.jelo] = "󿯅", + [l.walo] = "󿯆", + }, + [l.luka] = { -- TODO: improve + [l.luka] = { + [l.luka] = { + [l.luka] = "󿵩", + [l.tu] = { + [l.wan] = "󿯊", + [l.tu] = "󿯉", + }, + [l.wan] = { + [l.tu] = "󿯌", + }, + }, + [l.tu] = { + [l.tu] = "󿩎", + [l.wan] = "󿩌", + }, + [l.wan] = { + [l.tu] = "󿩍", + }, + }, + [l.tu] = { + [l.tu] = "󿩈", + [l.wan] = "󿩆", + }, + [l.wan] = { + [l.tu] = "󿩇", + }, + }, + [l.lupa] = { + [l.jaki] = "󿧤", + [l.kiwen] = "󿧥", + [l.kute] = "󿧦", + [l.lili] = "󿧧", + [l.meli] = "󿧨", + [l.monsi] = "󿧩", + [l.nena] = "󿧪", + [l.tomo] = "󿧫", + }, + [l.ma] = { + [l.ale] = "󿧬", + [l.ali] = "󿧬", + [l.ike] = "󿴅", + [l.kasi] = "󿧭", + [l.ni] = "󿴂", + [l.pona] = "󿴆", + [l.tomo] = "󿧮", + }, + [l.mama] = { + [l.mama] = "󿧯", + [l.meli] = "󿧰", + [l.mije] = "󿧱", + [l.tonsi] = "󿯒", + }, + [l.meli] = { + [l.ike] = "󿧲", + [l.lili] = "󿧳", + [l.mije] = "󿴇", + [l.pona] = "󿧴", + [l.sama] = "󿧵", + [l.tonsi] = "󿯗", + [l.unpa] = "󿧶", + [l.wawa] = "󿯚", + }, + [l.mije] = { + [l.ike] = "󿧷", + [l.lili] = "󿧸", + [l.meli] = "󿴇", + [l.pona] = "󿧹", + [l.sama] = "󿧺", + [l.tonsi] = "󿯠", + [l.unpa] = "󿧻", + [l.wawa] = "󿧼", + }, + [l.musi] = { + [l.lili] = "󿧽", + }, + [l.mute] = { + [l.mute] = "󿴝", + }, + [l.nasin] = { + [l.nanpa] = "󿯶", + [l.sitelen] = "󿯸", + }, + [l.nena] = { + [l.kon] = "󿧾", + [l.kute] = "󿧿", + [l.lili] = "󿨀", + [l.mama] = "󿨁", + [l.meli] = "󿨂", + }, + [l.nimi] = { + [l.sin] = "󿶖", + }, + [l.palisa] = { + [l.lili] = "󿨃", + }, + [l.pilin] = { + [l.ala] = "󿨄", + [l.ike] = "󿨅", + [l.nasa] = "󿨆", + [l.pakala] = "󿨇", + [l.pona] = "󿨈", + [l.sama] = "󿨉", + }, + [l.pimeja] = { + [l.jelo] = "󿴉", + [l.laso] = "󿴊", + [l.loje] = "󿴋", + }, + [l.poki] = { + [l.kon] = "󿨊", + [l.len] = "󿨋", + [l.lete] = "󿨌", + [l.lili] = "󿨍", + [l.seli] = "󿨎", + [l.telo] = "󿨏", + [l.tona] = "󿮯", + }, + [l.pona] = { + [l.ala] = "󿨐", + [l.lili] = "󿨑", + [l.lukin] = "󿨒", + [l.mute] = "󿴞", + }, + [l.selo] = { + [l.len] = "󿨓", + [l.soweli] = "󿨔", + }, + [l.sike] = { + [l.lili] = "󿨕", + }, + [l.sitelen] = { + [l.ike] = "󿨖", + [l.ma] = "󿨗", + [l.monsuta] = "󿨘", + [l.pona] = "󿨙", + [l.sitelen] = "󿨚", + [l.tawa] = "󿨛", + [l.toki] = "󿨜", + }, + [l.sona] = { + [l.ala] = "󿨝", + [l.ike] = "󿨞", + [l.lili] = "󿨟", + [l.ma] = "󿨠", + [l.nanpa] = "󿨡", + [l.pona] = "󿨢", + [l.sijelo] = "󿨣", + [l.tenpo] = "󿨤", + [l.toki] = "󿨥", + [l.utala] = "󿨦", + }, + [l.soweli] = { + [l.kijetesantakalu] = "󿴩", + }, + [l.supa] = { + [l.lape] = "󿨧", + [l.lawa] = "󿨨", + [l.lupa] = "󿨩", + [l.moku] = "󿨪", + [l.monsi] = "󿨫", + [l.pali] = "󿨬", + }, + [l.telo] = { + [l.lete] = "󿨭", + [l.lili] = "󿨮", + [l.sitelen] = "󿴌", + }, + [l.tenpo] = { + [l.ni] = "󿴃", + }, + [l.toki] = { + [l.ala] = "󿨯", + [l.ike] = "󿨰", + [l.pona] = "󿨱", + [l.sin] = "󿨲", + [l.sona] = "󿨳", + [l.utala] = "󿨴", + }, + [l.tomo] = { + [l.lape] = "󿨵", + [l.mani] = "󿨶", + [l.moku] = "󿨷", + [l.monsuta] = "󿨸", + [l.nasin] = "󿨹", + [l.ni] = "󿴄", + [l.pali] = "󿨺", + [l.sona] = "󿨻", + [l.tawa] = "󿨼", + [l.unpa] = "󿨽", + [l.utala] = "󿨾", + }, + [l.tonsi] = { + [l.ike] = "󿯥", + [l.lili] = "󿯦", + [l.pona] = "󿯧", + [l.sama] = "󿯨", + [l.sin] = "󿯩", + [l.unpa] = "󿯪", + [l.wawa] = "󿯫", + }, + [l.tu] = { + [l.luka] = "󿩅", + [l.tu] = "󿨿", + [l.wan] = "󿩀", + }, + [l.walo] = { + [l.jelo] = "󿴍", + [l.laso] = "󿴎", + [l.loje] = "󿴏", + [l.pimeja] = "󿯬", + }, + [l.wan] = { + [l.luka] = "󿩃", + [l.tu] = "󿩁", + }, + [l.wawa] = { + [l.tenpo] = "󿯭", + }, +}