Module:fr-verb/pron

local pron = {}

local rsubn = mw.ustring.gsub

-- version of rsubn that discards all but the first return value local function rsub(term, foo, bar) local retval = rsubn(term, foo, bar) return retval end

local function map(seq, fun) if type(seq) == "table" then local ret = {} for _, s in ipairs(seq) do			-- store in separate var in case fun has multiple retvals local retval = fun(s) table.insert(ret, retval) end return ret else -- store in separate var in case fun has multiple retvals local retval = fun(seq) return retval end end

-- Combine stem pronunciation and suffix pronunciation. The stem can actually -- consist of a table of stems, in which case the suffix will be added to each -- stem separately and the return value will be a list of pronunciations; -- otherwise the return value will be a single string. The combination -- procedure mostly just appends the two, but handles changing ".jj" to "j.j" -- (moving the syllable boundary) and converting ".C[lʁ]j" to ".C[lʁ]i". local function add(source, appendix) return map(source, function(s)		return rsub(rsub(s .. appendix, "%.jj", "j.j"), "(%..[lʁ])(j[ɔe]̃?)", "%1i.%2")	end) end

-- Construct the pronunciation of the entire present tense (indicative, -- subjunctive, imperative and participle), plus the imperfect indicative, -- given up to four stems: -- STEM = short pre-final stem (used for pres indic/imper 1s/2s/3s, required); -- STEM2 = pre-vocalic stem (used for pres indic/imper 1p/2p, --        impf indic 1s/2s/3s/3p, pres part) (required); -- STEM3 = long pre-final stem (used for pres indic 3p and pres subj 1s/2s/3s/3p, --        defaults to STEM); -- STEM4 = pre-/j/ stem (used for 1p/2p of pres subj and impf indic, --        defaults to STEM2). -- -- The value of any of these stem arguments can actually consist of multiple -- stems in a table or separated by a /; see add. -- -- Note that this will not override an already-existing value for the -- present participle, but will override all the rest. pron["ind_p"] = function(data, stem, stem2, stem3, stem4) stem3 = stem3 or stem stem4 = stem4 or stem2 data.prons.ind_p_1s = add(stem,"") data.prons.ind_p_2s = add(stem,"") data.prons.ind_p_3s = add(stem,"") data.prons.ind_p_1p = add(stem2,"ɔ̃") data.prons.ind_p_2p = add(stem2,"e") data.prons.ind_p_3p = add(stem3,"")

pron["ind_i"](data, stem2, stem4) pron["sub_p"](data, stem3, stem4)

data.prons.imp_p_2s = add(stem,"") data.prons.imp_p_1p = add(stem2,"ɔ̃") data.prons.imp_p_2p = add(stem2,"e")

data.prons.ppr = add(stem2,"ɑ̃") end

-- Construct the pronunciation of the imperfect indicative given STEM -- (used for the 1s/2s/3s/3p parts) and STEM2 (used for the 1p/2p parts). -- STEM2 defaults to STEM, and either or both may be multipart, see add. pron["ind_i"] = function(data, stem, stem2) stem2 = stem2 or stem data.prons.ind_i_1s = add(stem,"ɛ") data.prons.ind_i_2s = add(stem,"ɛ") data.prons.ind_i_3s = add(stem,"ɛ") data.prons.ind_i_1p = add(stem2,"jɔ̃") data.prons.ind_i_2p = add(stem2,"je") data.prons.ind_i_3p = add(stem,"ɛ") end

-- Construct the pronunciation of the simple past, imperfect subjunctive and -- past participle given the stem (which should include the final vowel and -- may be multipart, see add). This will not override an already-existing -- value for the past participle, but will override the rest. pron["ind_ps"] = function(data, stem) data.prons.ind_ps_1s = add(stem,"") data.prons.ind_ps_2s = add(stem,"") data.prons.ind_ps_3s = add(stem,"") data.prons.ind_ps_1p = add(stem,"m") data.prons.ind_ps_2p = add(stem,"t") data.prons.ind_ps_3p = add(stem,"ʁ")

pron["sub_pa"](data,stem)

data.prons.pp = add(stem,"") end

-- Construct the pronunciation of future and conditional. STEM is used for -- all parts but 1p/2p of the conditional, which uses STEM2 (which defaults to -- STEM). Either or both stems may be multipart (see add). The stem should -- contain the 'r' of the infinitive. pron["ind_f"] = function(data, stem, stem2) data.prons.ind_f_1s = add(stem, "e") data.prons.ind_f_2s = add(stem, "a") data.prons.ind_f_3s = add(stem, "a") data.prons.ind_f_1p = add(stem, "ɔ̃") data.prons.ind_f_2p = add(stem, "e") data.prons.ind_f_3p = add(stem, "ɔ̃")

pron["cond_p"](data, stem, stem2) end

-- Construct the pronunciation of the conditional. The stem -- passed in may be multipart (see add). pron["cond_p"] = function(data, stem, stem2) stem2 = stem2 or stem data.prons.cond_p_1s = add(stem,"ɛ") data.prons.cond_p_2s = add(stem,"ɛ") data.prons.cond_p_3s = add(stem,"ɛ") data.prons.cond_p_1p = add(stem2,"jɔ̃") data.prons.cond_p_2p = add(stem2,"je") data.prons.cond_p_3p = add(stem,"ɛ") end

-- Construct the pronunciation of the present subjunctive given two stems -- (which may be multipart, see add). STEM is used for the singular and 3p, -- and STEM2 is used for 1p and 2p (i.e. when followed by a vowel). pron["sub_p"] = function(data, stem, stem2) data.prons.sub_p_1s = add(stem,"") data.prons.sub_p_2s = add(stem,"") data.prons.sub_p_3s = add(stem,"") data.prons.sub_p_1p = add(stem2,"jɔ̃") data.prons.sub_p_2p = add(stem2,"je") data.prons.sub_p_3p = add(stem,"") end

-- Construct the pronunciation of the imperfect subjunctive given the stem -- (which may be multipart, see add). pron["sub_pa"] = function(data, stem) data.prons.sub_pa_1s = add(stem,"s") data.prons.sub_pa_2s = add(stem,"s") data.prons.sub_pa_3s = add(stem,"") data.prons.sub_pa_1p = add(stem,".sjɔ̃") data.prons.sub_pa_2p = add(stem,".sje") data.prons.sub_pa_3p = add(stem,"s") end

-- Construct the pronunciation of all verb parts for -er verbs given the -- following stems (which may be multipart, see add): --  STEM_FINAL is used for those forms without a syllabic suffix (singular --     and 3p of the present indicative/subjunctive/imperative); --  STEM_NONFINAL is used for the remaining forms, except that: --  STEM_NONFINAL_I is used for those forms beginning with /j/ (1p and 2p of --     present subjunctive and imperfect indicative), and should not contain --    a final /j/; --  STEM_FUT is used for the future and conditional (and should contain --     a final /ʁ/), except that: --  STEM_FUT_I is used for 1p and 2p of the conditional (and should contain --     a final /ʁ/). pron["er"] = function(data, stem_final, stem_nonfinal, stem_nonfinal_i, stem_fut, stem_fut_i) stem_fut = stem_fut or add(stem_nonfinal, "ə.ʁ") data.prons.ppr = add(stem_nonfinal,"ɑ̃") data.prons.pp = add(stem_nonfinal,"e")

pron.ind_p(data, stem_final, stem_nonfinal, stem_final, stem_nonfinal_i) pron.ind_f(data, stem_fut, stem_fut_i) pron.ind_ps_a(data, stem_nonfinal) end

-- Construct the pronunciation of the simple past and imperfect subjunctive -- for -er verbs, given the stem (which may be multipart, see add). pron["ind_ps_a"] = function(data, stem) data.prons.ind_ps_1s = add(stem,"e") data.prons.ind_ps_2s = add(stem,"a") data.prons.ind_ps_3s = add(stem,"a") data.prons.ind_ps_1p = add(stem,"am") data.prons.ind_ps_2p = add(stem,"at") data.prons.ind_ps_3p = add(stem,"ɛʁ")

pron.sub_pa(data, add(stem, "a")) end

return pron

-- For Vim, so we get 4-space tabs -- vim: set ts=4 sw=4 noet: