10,794
edits
TheNightAvl (talk | contribs) mNo edit summary |
TheNightAvl (talk | contribs) mNo edit summary |
||
Line 1: | Line 1: | ||
local export = {} | local export = {} | ||
local data = { | local data = { | ||
["a"] = { | ["a"] = { | ||
Line 102: | Line 101: | ||
data["!"] = data["."] | data["!"] = data["."] | ||
data["?"] = data["."] | data["?"] = data["."] | ||
IPA = {} | IPA = {} | ||
function append_IPA (working_IPA) | function append_IPA (working_IPA) | ||
local IPA_size = #IPA --This variable needs to be set before the function or it breaks. | local IPA_size = #IPA --This variable needs to be set before the function or it breaks. | ||
if IPA_size > 0 then | if IPA_size > 0 then | ||
for i=1, IPA_size do | for i=1, IPA_size do | ||
Line 114: | Line 110: | ||
end | end | ||
IPA[1] = working_IPA | IPA[1] = working_IPA | ||
end | end | ||
-- BEGIN BASE GENERATION -- | -- BEGIN BASE GENERATION -- | ||
function generate_IPA(s) | |||
function | |||
local s_len = mw.ustring.len(s) | local s_len = mw.ustring.len(s) | ||
IPA = {} | IPA = {} | ||
local split_s = {} | local split_s = {} | ||
for i = 1, s_len do | for i = 1, s_len do | ||
split_s[i] = mw.ustring.sub(s, i,i) | split_s[i] = mw.ustring.sub(s, i,i) | ||
end | end | ||
if s_len == 0 then | if s_len == 0 then | ||
error("Empty input.") | error("Empty input.") | ||
end | end | ||
while s_len > 0 do | while s_len > 0 do | ||
local getData = {} | local getData = {} | ||
local multiMatch = false | local multiMatch = false | ||
local i_iteration = -2 | local i_iteration = -2 | ||
if s_len < 3 then | if s_len < 3 then | ||
i_iteration = 1 - s_len | i_iteration = 1 - s_len | ||
end | end | ||
for i = i_iteration, 0 do | for i = i_iteration, 0 do | ||
getData = data[split_s[s_len + i]] | getData = data[split_s[s_len + i]] | ||
local deadEnd = false | local deadEnd = false | ||
if data[split_s[s_len + i]] == nil then | if data[split_s[s_len + i]] == nil then | ||
error("'" .. split_s[s_len + i] .. "' is an invalid character.") | error("'" .. split_s[s_len + i] .. "' is an invalid character.") | ||
end | end | ||
while type(getData) == "table" do | while type(getData) == "table" do | ||
if i == 0 then | if i == 0 then | ||
if getData[false] then | if getData[false] then | ||
getData = getData[false] | getData = getData[false] | ||
else | else | ||
error(split_s[s_len] .. " is an invalid character.") | error(split_s[s_len] .. " is an invalid character.") | ||
end | end | ||
else | else | ||
for j = 1, 0 - i do | for j = 1, 0 - i do | ||
-- DEBUG PRINT ONLY | -- DEBUG PRINT ONLY | ||
Line 173: | Line 152: | ||
end | end | ||
-- END OF DEBUG PRINT | -- END OF DEBUG PRINT | ||
if getData[split_s[s_len + i + j]] then | if getData[split_s[s_len + i + j]] then | ||
getData = getData[split_s[s_len + i + j]] | getData = getData[split_s[s_len + i + j]] | ||
if type(getData) == "string" then | if type(getData) == "string" then | ||
if j + i == 0 then | if j + i == 0 then | ||
multiMatch = true | multiMatch = true | ||
break | break | ||
else | else | ||
getData = {} | getData = {} | ||
deadEnd = true | deadEnd = true | ||
break | break | ||
end | end | ||
elseif j + i == 0 and getData[false] then | elseif j + i == 0 and getData[false] then | ||
getData = getData[false] | getData = getData[false] | ||
multiMatch = true | multiMatch = true | ||
break | break | ||
Line 198: | Line 170: | ||
error("data[" .. table.concat(getData, "][") .. "][false] is missing." ) | error("data[" .. table.concat(getData, "][") .. "][false] is missing." ) | ||
else | else | ||
end | end | ||
else | else | ||
getData = {} | getData = {} | ||
deadEnd = true | deadEnd = true | ||
Line 211: | Line 181: | ||
end | end | ||
if type(getData) == "string" and (i == 0 or multiMatch == true) then | if type(getData) == "string" and (i == 0 or multiMatch == true) then | ||
append_IPA(getData) | append_IPA(getData) | ||
s = mw.ustring.sub(s, 1, s_len + i - 1) | s = mw.ustring.sub(s, 1, s_len + i - 1) | ||
Line 217: | Line 186: | ||
break | break | ||
elseif deadEnd == false then | elseif deadEnd == false then | ||
end | end | ||
end | end | ||
end | end | ||
return table.concat(IPA) | return table.concat(IPA) | ||
-- END OF BASE GENERATION -- | |||
end | |||
function export.generate(frame) | |||
local args = m_parameters.process(frame:getParent().args, params) | |||
generate_IPA(args[1]) | |||
end | end | ||
return export | return export |