48,407
edits
No edit summary |
No edit summary |
||
| (36 intermediate revisions by the same user not shown) | |||
| Line 27: | Line 27: | ||
local function dediacv(str, diacritic) | local function dediacv(str, diacritic) | ||
return gsub(mw.ustring.toNFD(str), diacritic, "") | return gsub(mw.ustring.toNFD(str), diacritic, "") | ||
end | end | ||
| Line 63: | Line 52: | ||
{"qu?", "ḱ"}, {"þ", "θ"}, {"v", "β"}, | {"qu?", "ḱ"}, {"þ", "θ"}, {"v", "β"}, | ||
{"%-", ""}, | --{"%-", ""}, | ||
} | } | ||
| Line 89: | Line 78: | ||
local phonetic_rules = { | local phonetic_rules = { | ||
-- Gorgia Toscana | -- Gorgia Toscana | ||
{"(" .. vowels .. "·)p(" .. vowels .. ")", "%1ɸ%2"}, | {"(" .. vowels .. "·)p(" .. vowels .. ")", "%1ɸ%2"}, {"p$", "ɸ"}, | ||
{"(" .. vowels .. "·)b(" .. vowels .. ")", "%1β%2"}, | {"(" .. vowels .. "·)b(" .. vowels .. ")", "%1β%2"}, {"b$", "β"}, | ||
{"(" .. vowels .. "·)t(" .. vowels .. ")", "%1θ%2"}, | {"(" .. vowels .. "·)t(" .. vowels .. ")", "%1θ%2"}, {"t$", "θ"}, | ||
{"(" .. vowels .. "·)d(" .. vowels .. ")", "%1ð%2"}, | {"(" .. vowels .. "·)d(" .. vowels .. ")", "%1ð%2"}, {"d$", "ð"}, | ||
{"(" .. vowels .. "·)k(" .. vowels .. ")", "%1x%2"}, | {"(" .. vowels .. "·)k(" .. vowels .. ")", "%1x%2"}, {"k$", "x"}, | ||
{"(" .. vowels .. "·)g(" .. vowels .. ")", "%1ɣ%2"}, | {"(" .. vowels .. "·)g(" .. vowels .. ")", "%1ɣ%2"}, {"g$", "ɣ"}, | ||
{"I", "i"}, | {"I", "i"}, | ||
{"^ɸ", "f"}, {"(" .. consonants .. ")([·ˈˌ]?)ɸ", "%1%2f"}, | {"^ɸ", "f"}, {"(" .. consonants .. ")([·ˈˌ]?)ɸ", "%1%2f"}, | ||
{"^β", "v"}, {"(" .. consonants .. ")([·ˈˌ]?)β", "%1%2v"}, | {"^β", "v"}, {"(" .. consonants .. ")([·ˈˌ]?)β", "%1%2v"}, | ||
{"ḱ", "kʷ"}, {"ǵ", " | {"ḱ", "kʷ"}, {"ǵ", "gʷ"}, | ||
{"k([ieɛj])", "k" .. advanced .. "%1"}, {"g([ieɛj])", "g˖%1"}, | {"k([ieɛj])", "k" .. advanced .. "%1"}, {"g([ieɛj])", "g˖%1"}, | ||
{"k([oɔu])", "q%1"}, {"g([oɔu])", "ɢ%1"}, | {"k([oɔu])", "q%1"}, {"g([oɔu])", "ɢ%1"}, | ||
| Line 112: | Line 101: | ||
-- consonants | -- consonants | ||
{"ʈ", "t | {"ʈ", "t"}, | ||
{"[ʤʧʃ]", "%1ʷ"}, | {"[ʤʧʃ]", "%1ʷ"}, | ||
} | } | ||
| Line 122: | Line 111: | ||
{"ɐj", "ɔ" .. raised .. "j"}, {"aj", "a" .. c.diaer .. raised .. "j"}, | {"ɐj", "ɔ" .. raised .. "j"}, {"aj", "a" .. c.diaer .. raised .. "j"}, | ||
{"ʦ", "t͡s"}, {"ʣ", "d͡z"}, | |||
{"([ntdszl])", "%1" .. laminal}, {"(͡[sz])" .. laminal, "%1" .. dental}, | {"([ntdszl])", "%1" .. laminal}, {"(͡[sz])" .. laminal, "%1" .. dental}, | ||
} | } | ||
| Line 127: | Line 117: | ||
local upper_rules = { | local upper_rules = { | ||
{"a", "ɐ"}, {"ɸ", "f"}, {"β", "v"}, {"θ", "t"}, {"ð", "d"}, | {"a", "ɐ"}, {"ɸ", "f"}, {"β", "v"}, {"θ", "t"}, {"ð", "d"}, | ||
{"^[ˌˈ]", ""}, {"[ˌˈ]", "·"}, {"ju", "y"}, {"ew", "y"}, {"[ɛI]", "ɐj"}, {"ɔ", "aw"}, | {"^[ˌˈ]+", ""}, {"[ˌˈ]+", "·"}, {"··", "·"}, {"ju", "y"}, {"ew", "y"}, {"[ɛI]", "ɐj"}, {"ɔ", "aw"}, | ||
{"r", "ɾ"}, {"r·r", "ʀ"}, {"d·([ʣʤ])", "·%1"}, {"t·([ʦʧ])", "·%1"}, | {"r", "ɾ"}, {"r·r", "ʀ"}, {"d·([ʣʤ])", "·%1"}, {"t·([ʦʧ])", "·%1"}, | ||
{"ʣ", "z"}, {"ʦ", "s"}, {"ʧ", "ʃ"}, {"ʤ", "ʒ"}, | {"ʣ", "z"}, {"ʦ", "s"}, {"ʧ", "ʃ"}, {"ʤ", "ʒ"}, | ||
| Line 157: | Line 147: | ||
local paulistan_rules = { | local paulistan_rules = { | ||
{"^([ˈˌ]?)s", "% | {"^([ˈˌ]?)s(" .. consonants .. ")", "es%1%2"}, {"r", "ɾ"}, {"d·([ʣʤ])", "·%1"}, {"t·([ʦʧ])", "·%1"}, {"[ʧʦ]", "s"}, {"ʤ", "ʒ"}, | ||
{"(" .. consonants .. ") | {"(" .. consonants .. ")([ˈ·ˌ])%1", "%2%1"}, {"ð", "d"}, {"d([iĩjɪ])", "ʤ%1"}, {"t([iĩjɪ])", "ʧ%1"}, | ||
{"^([ˈˌ]?) | {"^([ˈˌ]?)ɾ", "%1ʁ"}, {"ɾ([ˈˌ·]?)(" .. consonants .. ")", "ɹ%1%2"}, {"([pbtdkg])$", "%1ĭ"}, | ||
{"([mnŋɲ])(" .. vowels .. ")([ˈˌ·]?)([mnŋɲ])", "%1%2" .. c.tilde .. "%3%4"}, | |||
{"ḱ", "kw"}, {"ǵ", "gw"}, | {"ḱ", "kw"}, {"ǵ", "gw"}, {"(" .. vowels .. ")([ˈˌ·]?)ɲ", "%1" .. c.tilde .. "%2j̃"}, | ||
{"(·[^ | {"(·[^·ˈˌ]*)j", "%1ɪ̯"}, {"^(·[^·ˈˌ]*)j", "%1ɪ̯"}, | ||
{"(·[^ | {"(·[^·ˈˌ]*)w", "%1ʊ̯"}, {"^(·[^·ˈˌ]*)w", "%1ʊ̯"}, | ||
{"(·[^ | {"(·[^·ˈˌ]*)i", "%1ɪ"}, {"^(·[^·ˈˌ]*)i", "%1ɪ"}, | ||
{"(·[^ | {"(·[^·ˈˌ]*)u", "%1ʊ"}, {"^(·[^·ˈˌ]*)u", "%1ʊ"}, | ||
{"(·[^ | {"(·[^·ˈˌ]*)e", "%1i"}, {"^(·[^·ˈˌ]*)e", "%1i"}, | ||
{"(" .. vowels .. ")([ˈˌ·]?)ŋ", "%1" .. c.tilde .. "%2w" .. c.tilde}, | |||
{"ẽ", "ẽj" .. c.tilde}, {"õ", "õw" .. c.tilde}, {c.tilde .. c.tilde, c.tilde}, | |||
} | } | ||
| Line 175: | Line 165: | ||
-- Escaped characters | -- Escaped characters | ||
{"ʤ", "d͡ʒ"}, {"ʧ", "t͡ʃ"}, {"ʈ", "t"}, {"ʦ", "t͡s"}, {"ʣ", "d͡z"}, | {"ʤ", "d͡ʒ"}, {"ʧ", "t͡ʃ"}, {"ʈ", "t"}, {"ʦ", "t͡s"}, {"ʣ", "d͡z"}, | ||
{"g", " | {"g", "g"}, {"ḱ", "kʷ"}, {"ǵ", "gʷ"}, {"I", "i"}, | ||
{"·", "."}, | {"·?ˈ·?", "ˈ"}, {"·", "."}, | ||
} | } | ||
local function syllabify(word) | local function syllabify(word, no_stress) | ||
local clusters = m_table.listToSet({ | local clusters = m_table.listToSet({ | ||
"s[ptʈkfɸ]", "z[bdgβʤmnlr]", | "s[ptʈkfɸ]", "z[bdgβʤmnlr]", | ||
| Line 199: | Line 189: | ||
word = gsub(word, "··", "·"); word = gsub(word, "·$", ""); word = gsub(word, "^·", "") | word = gsub(word, "··", "·"); word = gsub(word, "·$", ""); word = gsub(word, "^·", "") | ||
word = gsub(word, "(" .. consonants .. ")·(" .. vowels .. ")", "·%1%2") | word = gsub(word, "(" .. consonants .. ")·(" .. vowels .. ")", "·%1%2") | ||
word = gsub(word, "·?(" .. consonants .. ")% | word = gsub(word, "(·?)(" .. consonants .. ")%2(" .. vowels .. "*)", "%2%1%2%3") | ||
word = gsub(word, "·(" .. consonants .. ")$", "%1"); word = gsub(word, "^(" .. consonants .. ")·", "%1") | word = gsub(word, "·(" .. consonants .. ")$", "%1"); word = gsub(word, "^(" .. consonants .. ")·", "%1") | ||
word = gsub(word, "·(.)·", "%1·") | word = gsub(word, "·(.)·", "%1·") | ||
word = gsub(word, "·s(" .. voiceless .. ")", "s·%1") | |||
word = gsub(word, "(" .. consonants .. ")s·(" .. voiceless .. ")", "%1·s%2") | |||
word = gsub(word, "ï(" .. vowels .. ")", "i·%1") | word = gsub(word, "ï(" .. vowels .. ")", "i·%1"); word = gsub(word, "ḱ·ḱ", "k·ḱ") | ||
word = gsub(word, "·?d([ʤʣ])", "d·%1"); word = gsub(word, "·tʦ", "t·ʦ") | word = gsub(word, "·?d([ʤʣ])", "d·%1"); word = gsub(word, "·tʦ", "t·ʦ") | ||
word = gsub(word, "·?ŋg", "ŋ·g"); word = gsub(word, "··", "·") | word = gsub(word, "·?ŋg", "ŋ·g"); word = gsub(word, "··", "·") | ||
for cluster, _ in pairs(clusters) do | |||
word = gsub(word, "(" .. consonants .. "+)·(" .. consonants .. "+)", function(c1,c2) return match(c1 .. c2, cluster) and "·" .. c1 .. c2 or c1 .. "·" .. c2 end) | |||
end | |||
word = gsub(word, "%-", "·"); word = gsub(word, "··", "·") | |||
end | end | ||
local syllables = split(word, "·"); | local syllables = split(word, "·"); | ||
if #syllables == 1 then return | if no_stress or (#syllables == 1 and not match(word, "[" .. c.acute .. c.circ .. "]")) then | ||
return dediacv(word, "[" .. c.acute .. c.circ .. "]") | |||
end | |||
local first_stress = "[âêîôû]" | local first_stress = "[âêîôû]" | ||
| Line 240: | Line 238: | ||
end | end | ||
function export.crux(term, outputs) | function export.crux(term, no_stress, outputs) | ||
local ret, dialects = {}, {} | local ret, dialects = {}, {} | ||
term = mw.ustring.lower(term) | term = mw.ustring.lower(term) | ||
| Line 248: | Line 246: | ||
end | end | ||
term = syllabify(term) | term = syllabify(term, no_stress) | ||
term = term:gsub("·([ˈˌ])", "%1") | term = term:gsub("·?([ˈˌ])·?", "%1") | ||
term = term:gsub("ˌˌ", "ˌ") | term = term:gsub("ˌˌ", "ˌ") | ||
| Line 262: | Line 260: | ||
end | end | ||
local upper, bolognese, paulistan = phonemic, phonetic, | local upper, bolognese, paulistan = phonemic, phonetic, phonemic | ||
for _, rule in ipairs(upper_rules) do | for _, rule in ipairs(upper_rules) do | ||
upper = gsub(upper, rule[1], rule[2]) | upper = gsub(upper, rule[1], rule[2]) | ||
| Line 327: | Line 325: | ||
function separate_word(term) | function separate_word(term, no_stress) | ||
local phonemic, phonetic, dialects = {}, {}, {} | local phonemic, phonetic, dialects = {}, {}, {} | ||
local m, t, d = "", "", {} | local m, t, d = "", "", {} | ||
| Line 333: | Line 331: | ||
if match(term, " ") then | if match(term, " ") then | ||
for word in gsplit(term, " ") do | for word in gsplit(term, " ") do | ||
local ret, d = export.crux(word) | local ret, d = export.crux(word, no_stress) | ||
m = ret[1]; t = ret[2] | m = ret[1]; t = ret[2] | ||
| Line 345: | Line 343: | ||
end | end | ||
else | else | ||
return export.crux(term) | return export.crux(term, no_stress) | ||
end | end | ||
| Line 354: | Line 352: | ||
local parent_args = frame:getParent().args | local parent_args = frame:getParent().args | ||
local params = { | local params = { | ||
[1] = { default = mw.title.getCurrentTitle().nsText == 'Template' and " | [1] = { default = mw.title.getCurrentTitle().nsText == 'Template' and "agghiu" or mw.title.getCurrentTitle().text }, | ||
["rs"] = {type = 'boolean'}, | |||
} | } | ||
local args = require("Module:parameters").process(parent_args, params) | local args = require("Module:parameters").process(parent_args, params) | ||
local term = args[1] | local term = args[1]; local no_stress = args.rs | ||
local ret, dialects = separate_word(term) | local ret, dialects = separate_word(term, no_stress) | ||
local phonemic = ret[1]; local phonetic = ret[2] | local phonemic = ret[1]; local phonetic = ret[2] | ||
local IPA_args = {{pron = '/' .. (phonemic or "test") .. '/', a = "Standard Ravennese"}, {pron = '[' .. (phonetic or "test2") .. ']'}} | local IPA_args = {{pron = '/' .. (phonemic or "test") .. '/', a = {"Standard Ravennese"}}, {pron = '[' .. (phonetic or "test2") .. ']'}} | ||
for key, value in pairs(dialects) do | for key, value in pairs(dialects) do | ||
if value ~= phonemic then | if value ~= phonemic and value ~= phonetic then | ||
table.insert(IPA_args, {pron = '[' .. value .. ']', a = {sub(key,1,1)}, separator = "\n** "}) | table.insert(IPA_args, {pron = '[' .. value .. ']', a = {sub(key,1,1)}, separator = "\n** "}) | ||
end | end | ||