Module:Besoh
This is the documentation for Module:Besoh, the inflection and estimated-pronunciation module for Besoh (registry code YCQ-BE) on the Yezur wiki. It is not called directly: Template:YCQ-BE-decl invokes decl for the noun table and Template:YCQ-BE-conj invokes conj for the verb table, each with {{#invoke:Besoh|…}}. Both build every form from one headword and print an estimated pronunciation beneath each. The paradigms are those set out at Dictionary:About Besoh.
Parameters
| Parameter | Purpose |
|---|---|
word |
The headword the table is built from. Defaults to the page name, which is what entries rely on; set it only where the page name is not the citation form. |
1 |
The same, given positionally. word takes precedence.
|
Both are read from the calling template's arguments, not from #invoke: a value passed straight to #invoke is ignored and the page name used instead.
Noun forms
decl prints a wikitable of the bare, dative and locative forms in singular and plural.
| Cell | Ending | Derivation |
|---|---|---|
| Plural | -u, after a vowel -'u |
A final e or o is absorbed into the ending (medo → medu); other vowel-final stems take the glottal (śizu → śizu'u); consonants and the glottal take plain -u (san → sanu, ho' → ho'u).
|
| Dative | bi |
The postposition, written solid with the noun (gisbobi, gisbubi). |
| Locative singular | -on, after a vowel -'on |
sanon, ña'on. |
| Locative plural | — | The locative of the plural, with the sequence 'u' reduced to '. Where the plural ends in -'u, the plural locative therefore falls together with the singular (śizu'on is both); elsewhere the two stay distinct (sanu'on beside sanon).
|
Every cell links to Dictionary:form#Besoh except the citation form, which is left unlinked.
Verb forms
conj prints a wikitable of the stative and the perfect, and of the two combined.
| Cell | Ending | Derivation |
|---|---|---|
| Stative | -va |
humva, serva. |
| Perfect | va' |
The particle preposed as a separate word: va' hum. |
| Perfect stative | va' and -va |
The particle before the stative: va' humva. |
The plain–plain cell is a dash. The stative is linked; the two perfect cells are phrases of two words and are not.
Estimated pronunciation
Besoh spelling is conservative, so each form in the tables is passed through the module's own rendering of the spoken laws. Letters not listed have their face values.
| Letters | Sounds |
|---|---|
ś ź |
ʃ ʒ |
c j |
ʦ ʣ |
ñ |
ɲ |
n |
ŋ |
ĥ ĝ |
x ɣ |
ǵ |
ʁ |
' |
ʔ |
ä ë ï ö ü |
aː eː iː oː uː |
The following then apply, in this order.
| Change | Example |
|---|---|
| iu becomes /y/ | kovĥiu /kɔvçy/ |
| ĥ becomes /ç/ before i, e and /y/ | kovĥiu /kɔvçy/ |
| A final n is dropped, leaving nasality on the vowel before it; it survives under suffixation | san /sã/, sanu /saŋu/ |
| A final ' is a catch on the vowel, /ˀ/; elsewhere it stays /ʔ/ | sagobbe' /saɣɔbbeˀ/, ña'on /ɲaʔõ/ |
| b d g become /β ð ɣ/ between vowels | gisbobi /gizboβi/ |
| e o become /ɛ ɔ/ in a closed syllable, that is before two consonants or before one at the end | hev /hɛf/, sagobbe' /saɣɔbbeˀ/ |
| A final e or o becomes /əː/, where a vowel stands earlier in the word and the e or o does not follow a vowel or a long vowel directly | medo /meðəː/ |
| Obstruents assimilate voicing regressively | keśva /kɛʒva/, gisbu /gizbu/ |
| A final obstruent devoices | hev /hɛf/ |
Stress is not estimated. The laws that key on the end of the word are applied to the end of the whole string, so in the two-word perfect they reach the second word only and the particle is printed /vaʔ/ rather than the /vaˀ/ it would have alone.
The module does not call Module:Auphen: it carries the laws above in Lua of its own. The same laws are held as data at Module:Auphen/YCQ-BE, which is what {{auphen|word|YCQ-BE}} reads for the Pronunciation line of an entry, and which records that the two must be kept in step. That page declares no named rulesets, so Besoh inflection is generated here rather than by a sound-change derivation; engine behaviour and its divergences are logged at Module talk:Auphen.
The single-form functions _plural, _dative, _locative, _loc_pl, _stative, _perfect and _pron are exported for calling from other modules. Each takes and returns a plain string, so none of them can be reached through #invoke.
-- Module:Besoh — inflection and estimated pronunciation for Besoh (YCQ-BE).
-- Morphology mirrors the language's table rules: plural -u (-'u after vowels),
-- dative postposition bi, locative -on (-'on after vowels) with the 'u'
-- collapse in the plural locative; stative -va, perfect particle va'.
-- pron() implements the ten spoken laws (stress is not estimated).
local p = {}
local U = mw.ustring
local VOW = "aeiouäëïöü"
local function ends_vowel(w)
return U.find(w, "[" .. VOW .. "]$") ~= nil
end
function p._plural(w)
return w .. (ends_vowel(w) and "'u" or "u")
end
function p._dative(w) return w .. "bi" end
function p._locative(w)
return w .. (ends_vowel(w) and "'on" or "on")
end
function p._loc_pl(w)
local f = p._locative(p._plural(w))
return (U.gsub(f, "'u'", "'"))
end
function p._stative(w) return w .. "va" end
function p._perfect(w) return "va' " .. w end
-- estimated pronunciation from the orthography (laws 6–15, segmental only)
function p._pron(w)
local s = w
-- letters to base sounds
for a, b in pairs({ ["ś"]="ʃ", ["ź"]="ʒ", ["c"]="ʦ", ["j"]="ʣ", ["ñ"]="ɲ",
["n"]="ŋ", ["ĥ"]="x", ["ĝ"]="ɣ", ["ǵ"]="ʁ", ["'"]="ʔ",
["ä"]="aː", ["ë"]="eː", ["ï"]="iː", ["ö"]="oː", ["ü"]="uː" }) do
s = U.gsub(s, a, b)
end
s = U.gsub(s, "iu", "y")
s = U.gsub(s, "x([iey])", "ç%1")
local NAS = { a="ã", e="ẽ", i="ĩ", o="õ", u="ũ" }
s = U.gsub(s, "([aeiou])ŋ$", function(v) return NAS[v] end)
s = U.gsub(s, "([aeiouyː])ʔ$", "%1ˀ")
s = U.gsub(s, "([aeiouyː])b([aeiouy])", "%1β%2")
s = U.gsub(s, "([aeiouyː])d([aeiouy])", "%1ð%2")
s = U.gsub(s, "([aeiouyː])g([aeiouy])", "%1ɣ%2")
local L = "pbtdkgqʦʣfvszʃʒxɣʁhmɲŋrlβðç"
s = U.gsub(s, "e([" .. L .. "][" .. L .. "])", "ɛ%1")
s = U.gsub(s, "o([" .. L .. "][" .. L .. "])", "ɔ%1")
s = U.gsub(s, "e([" .. L .. "])$", "ɛ%1")
s = U.gsub(s, "o([" .. L .. "])$", "ɔ%1")
local VOC = "aeiouyɛɔãẽĩõũ"
if U.find(s, "[" .. VOC .. "].*[eo]$") and not U.find(s, "[" .. VOC .. "ː][eo]$") then
s = U.gsub(s, "[eo]$", "əː")
end
local DEV = { b="p", d="t", g="k", v="f", z="s", ["ʒ"]="ʃ", ["ʣ"]="ʦ", ["ɣ"]="x" }
local VCE = { p="b", t="d", k="g", f="v", s="z", ["ʃ"]="ʒ", ["ʦ"]="ʣ" }
s = U.gsub(s, "([ptkfsʃʦ])([bdgvzʒʣ])", function(a, b2) return VCE[a] .. b2 end)
s = U.gsub(s, "([bdgvzʒʣɣ])$", function(a) return DEV[a] end)
return s
end
local function cell(form, link)
local shown
if link then
shown = "'''[[Dictionary:" .. form .. "#Besoh|" .. form .. "]]'''"
else
shown = "'''" .. form .. "'''"
end
return shown .. "<br /><small>/" .. p._pron(form) .. "/</small>"
end
local function headword(frame)
local w = mw.text.trim(frame:getParent().args.word or frame:getParent().args[1] or "")
if w == "" then w = mw.title.getCurrentTitle().text end
return w
end
-- {{YCQ-BE-decl}} — noun table; the bare plural links to its own entry.
function p.decl(frame)
local w = headword(frame)
local rows = {
'{| class="wikitable" style="text-align:center"',
'! !! SG !! PL',
'|-', '! Ø',
'| ' .. cell(w, false) .. ' || ' .. cell(p._plural(w), true),
'|-', '! DAT',
'| ' .. cell(p._dative(w), true) .. ' || ' .. cell(p._dative(p._plural(w)), true),
'|-', '! LOC',
'| ' .. cell(p._locative(w), true) .. ' || ' .. cell(p._loc_pl(w), true),
'|}',
}
return table.concat(rows, "\n")
end
-- {{YCQ-BE-conj}} — verb table.
function p.conj(frame)
local w = headword(frame)
local rows = {
'{| class="wikitable" style="text-align:center"',
'! !! Ø !! STAT',
'|-', '! Ø',
'| — || ' .. cell(p._stative(w), true),
'|-', '! PERF',
'| ' .. cell(p._perfect(w), false) .. ' || ' .. cell(p._perfect(p._stative(w)), false),
'|}',
}
return table.concat(rows, "\n")
end
return p