Module:ltc-pron/baxter

local export = {} local m_string_utils = require("Module:string utilities")

local gsub = m_string_utils.gsub local match = m_string_utils.match

local baxter_initial = { [1] = "p", [2] = "ph", [3] = "b", [4] = "m", [5] = "t", [6] = "th", [7] = "d", [8] = "n", [9] = "tr", [10] = "trh", [11] = "dr", [12] = "nr", [13] = "ts", [14] = "tsh", [15] = "dz", [16] = "s", [17] = "z", [18] = "tsr", [19] = "tsrh", [20] = "dzr", [21] = "sr", [22] = "zr", [23] = "tsy", [24] = "tsyh", [25] = "dzy", [26] = "sy", [27] = "zy", [28] = "k", [29] = "kh", [30] = "g", [31] = "ng", [32] = "x", [33] = "h", [34] = "ʔ", [35] = "h", [36] = "y", [37] = "l", [38] = "ny" }

local baxter_final = { [1] = "uwng", [2] = "juwng", [3] = "uwk", [4] = "juwk", [5] = "owng", [6] = "owk", [7] = "jowng", [8] = "jowk", [9] = "æwng", [10] = "æwk", [11] = "jie", [12] = "jwie", [13] = "je", [14] = "jwe", [15] = "jij", [16] = "jwij", [17] = "ij", [18] = "wij", [19] = "i", [20] = "jɨj", [21] = "jwɨj", [22] = "jo", [23] = "u", [24] = "ju", [25] = "aj", [26] = "waj", [27] = "joj", [28] = "jwoj", [29] = "æj", [30] = "wæj", [31] = "ɛɨ", [32] = "wɛɨ", [33] = "ɛj", [34] = "wɛj", [35] = "jiej", [36] = "jwiej", [37] = "jej", [38] = "jwej", [39] = "ej", [40] = "wej", [41] = "oj", [42] = "woj", [43] = "jin", [44] = "in", [45] = "win", [46] = "in", [47] = "jwin", [48] = "jit", [49] = "it", [50] = "wit", [51] = "it", [52] = "jwit", [53] = "on", [54] = "ot", [55] = "won", [56] = "wot", [57] = "jɨn", [58] = "jɨt", [59] = "jun", [60] = "jut", [61] = "an", [62] = "wan", [63] = "at", [64] = "wat", [65] = "jon", [66] = "jwon", [67] = "jot", [68] = "jwot", [69] = "æn", [70] = "wæn", [71] = "æt", [72] = "wæt", [73] = "ɛn", [74] = "wɛn", [75] = "ɛt", [76] = "wɛt", [77] = "jien", [78] = "jwien", [79] = "jen", [80] = "jwen", [81] = "jiet", [82] = "jwiet", [83] = "jet", [84] = "jwet", [85] = "en", [86] = "wen", [87] = "et", [88] = "wet", [89] = "aw", [90] = "æw", [91] = "jiew", [92] = "jew", [93] = "ew", [94] = "a", [95] = "wa", [96] = "ja", [97] = "jwa", [98] = "æ", [99] = "wæ", [100] = "jæ", [101] = "ang", [102] = "wang", [103] = "ak", [104] = "wak", [105] = "jang", [106] = "jwang", [107] = "jak", [108] = "jwak", [109] = "æng", [110] = "wæng", [111] = "jæng", [112] = "jwæng", [113] = "æk", [114] = "wæk", [115] = "jæk", [116] = "jwæk", [117] = "ɛng", [118] = "wɛng", [119] = "ɛk", [120] = "wɛk", [121] = "jieng", [122] = "jwieng", [123] = "jiek", [124] = "jwiek", [125] = "eng", [126] = "weng", [127] = "ek", [128] = "wek", [129] = "ong", [130] = "wong", [131] = "ok", [132] = "wok", [133] = "ing", [134] = "ik", [135] = "wik", [136] = "juw", [137] = "uw", [138] = "jiw", [139] = "jim", [140] = "im", [141] = "jip", [142] = "ip", [143] = "am", [144] = "ap", [145] = "jæm", [146] = "jom", [147] = "jæp", [148] = "jop", [149] = "æm", [150] = "æp", [151] = "ɛm", [152] = "ɛp", [153] = "jiem", [154] = "jem", [155] = "jiep", [156] = "jep", [157] = "em", [158] = "ep", [159] = "om", [160] = "op" }

local reverse_drjowngX_nrjuwX = { [11] = "je", [12] = "jwe", [15] = "ij", [16] = "wij", [35] = "jej", [36] = "jwej", [43] = "in", [47] = "win", [48] = "it", [52] = "wit", [77] = "jen", [78] = "jwen", [81] = "jet", [82] = "jwet", [91] = "jew", [121] = "jeng", [122] = "jweng", [123] = "jek", [124] = "jwek", [138] = "iw", [139] = "im", [141] = "ip", [153] = "jem", [155] = "jep" }

local function is_coronal(initial_type) return (initial_type >= 5 and initial_type <= 27) or (initial_type >= 36 and initial_type <= 38) end

local function is_labial(initial_type) return (initial_type >= 1 and initial_type <= 4) end

local function is_palatal(initial_type) return (initial_type >= 23 and initial_type <= 27) or (initial_type == 36) or (initial_type == 38) end

function export.baxter_1992(initial_type, final_type, tone_label) local initial = baxter_initial[initial_type] local final = baxter_final[final_type] if is_coronal(initial_type) then final = reverse_drjowngX_nrjuwX[final_type] or final end if is_palatal(initial_type) then final = string.gsub(final, "^j", "") elseif is_labial(initial_type) then if (final_type ~= 42) and (final_type ~= 55) and (final_type ~= 56) then final = string.gsub(final, "^w", "") final = string.gsub(final, "^jw", "j") end end return initial .. final .. tone_label end

local baxter_1992_to_2014_map = { {pattern = "ɛɨ", replace = "ɛ"}, {pattern = "ɛ", replace = "ea"}, {pattern = "æ", replace = "ae"}, {pattern = "ɨ", replace = "+"}, {pattern = "ʔ", replace = "'"}, }

function export.baxter_2014(initial_type, final_type, tone_label) local output = export.baxter_1992(initial_type, final_type, tone_label) for _, item in ipairs(baxter_1992_to_2014_map) do		output = output:gsub(item.pattern, item.replace) end return output end

export.baxter = export.baxter_2014

export.baxter_initial = baxter_initial export.baxter_final = baxter_final

return export