text:
Module:eu-pron/new

--Based on Module:es-pronunc by Benwing2.

local export = {}

local m_IPA = require("Module:IPA") local m_table = require("Module:table") local put_module = "Module:parse utilities"

local force_cat = false -- for testing

local lang = require("Module:languages").getByCode("eu")

local u = mw.ustring.char local rfind = mw.ustring.find local rsubn = mw.ustring.gsub local rmatch = mw.ustring.match local rsplit = mw.text.split local ulower = mw.ustring.lower local uupper = mw.ustring.upper local usub = mw.ustring.sub local ulen = mw.ustring.len local unfd = mw.ustring.toNFD local unfc = mw.ustring.toNFC

local TILDE = u(0x0303) -- tilde = ̃ local SYLDIV = u(0xFFF0) -- used to represent a user-specific syllable divider (.) so we won't change it local vowel = "aeiouAEIOU" -- vowel; include y so we get single-word y correct and for syllabifying from spelling local V = "[" .. vowel .. "]" -- vowel class local W = "[wʝ]" -- glides, used in a few loanwords local sylsep = "%-." .. SYLDIV -- hyphen included for syllabifying from spelling local sylsep_c = "[" .. sylsep .. "]" local wordsep = "# " local separator = sylsep .. wordsep local separator_c = "[" .. separator .. "]" local C = "[^" .. vowel .. separator .. "]" -- consonant class including h

-- 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

-- version of rsubn that returns a 2nd argument boolean indicating whether -- a substitution was made. local function rsubb(term, foo, bar) local retval, nsubs = rsubn(term, foo, bar) return retval, nsubs > 0 end

-- apply rsub repeatedly until no change local function rsub_repeatedly(term, foo, bar) while true do		local new_term = rsub(term, foo, bar) if new_term == term then return term end term = new_term end end

local function decompose(text) -- decompose everything but ñ and ü text = unfd(text) text = rsub(text, ".[" .. TILDE .. "]", {		["n" .. TILDE] = "ñ",		["N" .. TILDE] = "Ñ",	}) return text end

local function split_on_comma(term) if term:find(",%s") then return require(put_module).split_on_comma(term) else return rsplit(term, ",") end end

-- Remove any HTML from the formatted text and resolve links, since the extra characters don't contribute to the -- displayed length. local function convert_to_raw_text(text) text = rsub(text, "<.->", "") if text:find("%[%[") then text = require("Module:links").remove_links(text) end return text end

-- Return the approximate displayed length in characters. local function textual_len(text) return ulen(convert_to_raw_text(text)) end

local function construct_default_differences(dialect) if dialect == "gipuzkoan" then return { northern_different = false, j_different = false, need_bisc = false, }	end return nil end

-- Main syllable-division algorithm local function syllabify_from_spelling_or_pronun(text)

text = rsub_repeatedly(text, "(" .. V .. ")(" .. C .. W .. "?" .. V .. ")", "%1.%2")	text = rsub_repeatedly(text, "(" .. V .. C .. ")(" .. C .. V .. ")", "%1.%2")	text = rsub_repeatedly(text, "(" .. V .. C .. ")(" .. C .. C .. V .. ")", "%1.%2")	text = rsub_repeatedly(text, "(" .. V .. C .. C .. ")(" .. C .. C .. V .. ")", "%1.%2")	text = rsub(text, "([pfbktdɡg])%.([lrɾ])", ".%1%2") --the first "ɡ" is the IPA one; the second "g" is the regular one text = rsub_repeatedly(text, "(" .. C .. ")%.s(" .. C .. ")", "%1s.%2") -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	text = rsub_repeatedly(text, "([ae]" .. ")ui", "%1u.i") text = rsub_repeatedly(text, "([aeiou]" .. ")([aeo])", "%1.%2") text = rsub_repeatedly(text, "ii", "i.i") text = rsub_repeatedly(text, "([iou]" .. ")u", "%1.u")

return text end

local function syllabify_from_spelling(text) text = decompose(text) -- start at FFF1 because FFF0 is used for SYLDIV -- Temporary replacements for characters we want treated as default consonants. The C and related consonant regexes -- treat all unknown characters as consonants. local TEMP_tz = u(0xFFF1) local TEMP_ts = u(0xFFF2) local TEMP_tx = u(0xFFF3) local TEMP_tx_CAPS = u(0xFFF4) local TEMP_ll = u(0xFFF5) local TEMP_ll_CAPS = u(0xFFF6) local TEMP_dd = u(0xFFF7) local TEMP_dd_CAPS = u(0xFFF8) local TEMP_tt = u(0xFFF9) local TEMP_tt_CAPS = u(0xFFFA) local TEMP_rr = u(0xFFB) -- Change user-specified. into SYLDIV so we don't shuffle it around when dividing into syllables. text = text:gsub("%.", SYLDIV)

-- handle digraphs text = rsub(text, "tz", TEMP_tz) text = rsub(text, "ts", TEMP_ts) text = rsub(text, "tx", TEMP_tx) text = rsub(text, "Tx", TEMP_tx_CAPS) text = rsub(text, "ll", TEMP_ll) text = rsub(text, "Ll", TEMP_ll_CAPS) text = rsub(text, "tt", TEMP_tt) text = rsub(text, "Tt", TEMP_tt_CAPS) text = rsub(text, "dd", TEMP_dd) text = rsub(text, "Dd", TEMP_dd_CAPS) text = rsub(text, "rr", TEMP_rr) text = syllabify_from_spelling_or_pronun(text)

text = text:gsub(SYLDIV, ".") text = text:gsub(TEMP_tz, "tz") text = text:gsub(TEMP_ts, "ts") text = text:gsub(TEMP_tx, "tx") text = text:gsub(TEMP_tx_CAPS, "Tx") text = text:gsub(TEMP_ll, "ll") text = text:gsub(TEMP_ll_CAPS, "Ll") text = text:gsub(TEMP_tt, "tt") text = text:gsub(TEMP_tt_CAPS, "Tt") text = text:gsub(TEMP_dd, "dd") text = text:gsub(TEMP_dd_CAPS, "Dd") text = text:gsub(TEMP_rr, "rr") text = unfc(text) return text end

-- Generate the IPA of a given respelling, where a respelling is the representation of the pronunciation of a given function export.IPA(text, dialect, phonetic) local northern = dialect == "northern" local southern = dialect == "gipuzkoan" or dialect == "navarrese" or dialect == "biscayan" local nav = dialect == "navarrese" local bisc = dialect == "biscayan" local northern_different = false local j_different = false local need_bisc = false local J = "" local N = "" -- start at FFF1 because FFF0 is used for SYLDIV local TEMP_Y = u(0xFFF1) local TEMP_W = u(0xFFF2)

--function that gets the last two syllables (used for generating the correct rhymes) local function extract_last_syllables(text) local words = rsplit(text, " ") if #words > 1 then --no rhymes are generated when there are multiple words return "" end text = rsub(text, "([aeou])i", "%1") text = rsub(text, "([ae])u", "%1") local length = string.len(text) local rhyme  = "" local count  = -1 local syl    = 0 while count > -length do			if string.find("aeiou", string.sub(text,count,count)) then rhyme = string.sub(text,count,-1) syl = syl + 1 if syl == 2 then return rhyme end end count = count - 1 end return rhyme end

text = ulower(text or mw.title.getCurrentTitle.text) -- decompose everything but ñ and ü text = decompose(text) -- convert commas and en/en dashes to IPA foot boundaries text = rsub(text, "%s*[,–—]%s*", " | ") -- question mark or exclamation point in the middle of a sentence -> IPA foot boundary text = rsub(text, "([^%s])%s*[!?]%s*([^%s])", "%1 | %2")

-- canonicalize multiple spaces and remove leading and trailing spaces local function canon_spaces(text) text = rsub(text, "%s+", " ") text = rsub(text, "^ ", "") text = rsub(text, " $", "") return text end

text = canon_spaces(text)

-- Convert hyphens to spaces, to handle Austria-Hungría, franco-italiano, etc.	text = rsub(text, "%-", " ") -- canonicalize multiple spaces again, which may have been introduced by hyphens text = canon_spaces(text) -- now eliminate punctuation text = rsub(text, "[!?']", "") -- put # at word beginning and end and double ## at text/foot boundary beginning/end text = rsub(text, " | ", "# | #") text = "##" .. rsub(text, " ", "# #") .. "##"	--determining whether "h" denotes a phoneme, or the lack of palatalization, palatalization when needed text = rsub(text, "nh", "N") text = rsub(text, "lh", "L") text = rsub(text, "([aeo])il([# .h]*[aeiou])", (northern and "%1ił%2" or "%1ĺ%2")) text = rsub(text, "([aeo])in([# .h]*[aeiou])", (northern and "%1iň%2" or "%1ń%2")) text = rsub(text, "uin([# .h]*[aeiou])", (northern and "uiň%1" or "uiń%1")) text = rsub(text, "uil([# .h]*[aeiou])", (northern and "uił%1" or "uiĺ%1")) text = rsub(text, "il([# .h]*[aeiou])", (northern and "ił%1" or "iĺ%1")) text = rsub(text, "in([# .h]*[aeiou])", (northern and "iň%1" or "iń%1")) if text:find("[łňńĺh]") then northern_different = true end if extract_last_syllables(text):find("[łňńĺh]") then N = "N" end text = rsub(text, "ĺ", "ʎ") text = rsub(text, "ń", "ɲ") text = rsub(text, "N", "n") text = rsub(text, "L", "l") text = rsub(text, "ň", "n") text = rsub(text, "ł", "l")

--c, g, q	text = rsub(text, "ng([^aeiouüwhlr])", "n%1") -- Bangkok, angstrom, etc. text = rsub(text, "q", "k") -- quark, Qatar, burqa, Iraq, etc. text = rsub(text, "c", "k") -- campus, etc.

--alphabet-to-phoneme text = rsub(text, "aje#", "aʒe#") -- final -aje is pronounced /aʒe/ in the North and /axe/ in the South, regardless of how native j is pronounced text = rsub(text, "ihoa", "iχoa") -- the  in conjugated forms of joan is pronounced in the South text = rsub(text, "zh", "ź") text = rsub(text, "tx", "C") --not the real sound text = rsub(text, "tz", "Ś") --not the real sound text = rsub(text, "ts", "S") --not the real sound text = rsubb(text, "ll", "ʎ") text = rsubb(text, "dd", "ɟ") text = rsubb(text, "tt", "c") text = rsub(text, "x", "ʃ") text = rsub(text, "#p([st])", "#%1") -- psicologia, pterodaktilo text = rsub(text, "[gñrvz]",			{ ["g"] = "ɡ", ["ñ"] = "ɲ", ["v"] = "b", ["z"] = "ś" }) if text:find("ś") or text:find("S") then need_bisc = true end --/x/~/j/~/ʒ/ sounds if text:find("[yj]") then northern_different = true j_different = true end if extract_last_syllables(text):find("[yj]") then J = "J" end if text:find("ʒ") or text:find("χ") then northern_different = true end if extract_last_syllables(text):find("ʒ") then N = "N" end if text:find("kh") then northern_different = true end if extract_last_syllables(text):find("kh") then N = "N" end if text:find("ź") then northern_different = true end if extract_last_syllables(text):find("ź") then N = "N" end text = rsubb(text, "j", (northern and "ɟ" or "x")) text = rsubb(text, "y", (northern and "ɟ" or "j")) --  is used for words which always have a palatal text = rsubb(text, "kh", (northern and "k" or "χ")) text = rsubb(text, "ź", (northern and "ʒ" or "ʃ"))

-- trilled r (in all cases except between vowels) text = rsub(text, "([aeiou])r([aeiou])", "%1ɾ%2") text = rsub(text, "([aeiou])r([aeiou])", "%1ɾ%2") -- it has to be applied twice in order to handle VrVrV sequences text = rsub(text, "rr", "r")

text = rsub(text, "n([# .]*[bpm])", "m%1") -- lack of /h/ in Southern dialects text = rsub(text, "aha", (northern and "aha" or "a")) text = rsub(text, "ehe", (northern and "ehe" or "e")) text = rsub(text, "ihi", (northern and "ihi" or "i")) text = rsub(text, "oho", (northern and "oho" or "o")) text = rsub(text, "uhu", (northern and "uhu" or "u")) text = rsub(text, "h", (northern and "h" or ""))

text = rsub(text, "n([# .]*[bpm])", "m%1")

-- handle i/u between vowels text = rsub_repeatedly(text, "ui", "U") --this dipthong requires special treatment local vowel_to_glide = { ["i"] = "i.", ["u"] = "u." }	text = rsub_repeatedly(text, "(" .. V .. "*)([iu])(" .. V .. ")",			function(v1, iu, v2)				return v1 .. vowel_to_glide[iu] .. v2			end	) text = rsub_repeatedly(text, "U", "ui")

--syllable division text = syllabify_from_spelling_or_pronun(text)

--dialectal differences if nav then text = rsub(text, "x", "j") elseif bisc then --fake symbols, to be replaced later text = rsub(text, "x", "đ") text = rsub(text, "j", "đ") text = rsub(text, "ś", "s") text = rsub(text, "S", "Ś") end

text = rsubb(text, "ʒ", (southern and "x" or "ʒ")) text = rsubb(text, "χ", (southern and "x" or "h")) --phonetic transcription if phonetic then -- θ, s, f before voiced consonants local voiced = "mnɲbdɟɡʎljđ" local r = "ɾr" local tovoiced = { ["s"] = "z̺", ["ś"] = "z̻", }		local function voice(sound, following) return tovoiced[sound] .. following end text = rsub(text, "([sś])(" .. separator_c .. "*[" .. voiced .. r .. "])", voice)

-- fricative vs. stop allophones; first convert stops to fricatives, then back to stops -- after nasals and sometimes after l		local stop_to_fricative = {["b"] = "β", ["d"] = "ð", ["ɡ"] = "ɣ"} local fricative_to_stop = {["β"] = "b", ["ð"] = "d", ["ɣ"] = "ɡ"} text = rsub(text, "[bdɡ]", stop_to_fricative) text = rsub(text, "([mnɲ]" .. separator_c .. "*)([βɣ])",			function(nasal, fricative) return nasal .. fricative_to_stop[fricative] end		) text = rsub(text, "([lʎmnɲ]" .. separator_c .. "*)([ð])",			function(nasal_l, fricative) return nasal_l .. fricative_to_stop[fricative] end		) text = rsub(text, "##β", "##b") text = rsub(text, "##ð", "##d") text = rsub(text, "##ɣ", "##ɡ")

text = rsub(text, "[td]", {["t"] = "t̪", ["d"] = "d̪"})

-- nasal assimilation before consonants local labiodental, dentialveolar, alveolopalatal, palatal, velar = "ɱ", "n̪", "nʲ", "ɲ", "ŋ" local nasal_assimilation = { ["f"] = labiodental, ["t"] = dentialveolar, ["d"] = dentialveolar, ["C"] = alveolopalatal, ["ʃ"] = alveolopalatal, ["đ"] = alveolopalatal, ["ɟ"] = palatal, ["c"] = palatal, ["ʎ"] = palatal, ["j"] = palatal, ["k"] = velar, ["x"] = velar, ["ɡ"] = velar, }		text = rsub(text, "n(" .. separator_c .. "*)(.)",				function(stress, following)					return (nasal_assimilation[following] or "n") .. stress .. following				end		)

-- lateral assimilation before consonants text = rsub(text, "l(" .. separator_c .. "*)(.)",				function(stress, following)					local l = "l"					if following == "t" or following == "d" then						-- dentialveolar						l = "l̪"					elseif following == "C" or following == "ʃ" or following == "đ" then						-- alveolopalatal						l = "lʲ"					elseif following == "ɟ" or following == "c" or following == "j" then						-- alveolopalatal						l = "ʎ"					end					return l .. stress .. following				end)

-- voiced fricatives are actually approximants text = rsub(text, "([βðɣ])", "%1̞") --nasalization of vowels text = rsub(text, "([aeou])i([mnɲ])", "%1" .. TILDE .. "i" .. TILDE .. "%2") text = rsub(text, "([ae])u([mnɲ])", "%1" .. TILDE .. "u" .. TILDE .. "%2") text = rsub(text, "([aeiou])([mnɲ])", "%1" .. TILDE .. "%2") end --semivowels text = rsub(text, "([aeou])" .. TILDE .. "([i])", "%1" .. TILDE .. "%2̯") text = rsub(text, "([ae])" .. TILDE .. "([u])", "%1" .. TILDE .. "%2̯") text = rsub(text, "([aeou][i])", "%1̯") text = rsub(text, "([ae][u])", "%1̯") text = rsub(text, "u̯i̯", "u̯i") --correct the mistake appeareing in words with aui, eui

-- convert fake symbols to real ones local final_conversions = { ["S"] = "t͡s̺", ["Ś"] = "t͡s̻", ["s"] = "s̺", ["ś"] = "s̻", ["C"] = "t͡ʃ", ["X"] = "x", ["đ"] = "d͡ʒ", ["ʝ"] = "j" }	text = rsub(text, "[SŚsśCXđʝ]", final_conversions)

-- remove # symbols at word and text boundaries text = rsub(text, "#", "") text = mw.ustring.toNFC(text)

--add technical characters to the end of the rhyme in order to parse the rhymes correctly text = text .. J .. N

local differences = nil if dialect == "gipuzkoan" then differences = { northern_different = northern_different, need_bisc = need_bisc, j_different = j_different, }	end local ret = { text = text, differences = differences, }	return ret end

function export.IPA_string(frame) local iparams = { [1] = {},		["style"] = {required = true}, ["phonetic"] = {type = "boolean"}, }	local iargs = require("Module:parameters").process(frame.args, iparams) local retval = export.IPA(iargs[1], iargs.style, iargs.phonetic) return retval.text end

-- Generate all relevant dialect pronunciations and group into styles. local function express_all_styles(style_spec, dodialect) local ret = { pronun = {}, expressed_styles = {}, }

local need_bisc

local function express_style(hidden_tag, tag, representative_dialect, matching_styles) matching_styles = matching_styles or representative_dialect

-- If style specified, make sure it matches the requested style. local style_matches if not style_spec then style_matches = true else local style_parts = rsplit(matching_styles, "%-") local or_styles = rsplit(style_spec, "%s*,%s*") for _, or_style in ipairs(or_styles) do				local and_styles = rsplit(or_style, "%s*%+%s*") local and_matches = true for _, and_style in ipairs(and_styles) do					local negate if and_style:find("^%-") then and_style = and_style:gsub("^%-", "") negate = true end local this_style_matches = false for _, part in ipairs(style_parts) do						if part == and_style then this_style_matches = true break end end if negate then this_style_matches = not this_style_matches end if not this_style_matches then and_matches = false end end if and_matches then style_matches = true break end end end if not style_matches then return end

-- Fetch the representative dialect's pronunciation if not already present. if not ret.pronun[representative_dialect] then dodialect(ret, representative_dialect) end -- Insert the new style into the style group, creating the group if necessary. local new_style = { tag = tag, pronun = ret.pronun[representative_dialect], }		for _, hidden_tag_style in ipairs(ret.expressed_styles) do			if hidden_tag_style.tag == hidden_tag then table.insert(hidden_tag_style.styles, new_style) return end end table.insert(ret.expressed_styles, {			tag = hidden_tag,			styles = {new_style},		}) end

-- For each type of difference, figure out if the difference exists in any of the given respellings. We do this by -- generating the pronunciation for the dialect "gipuzkoan", for each respelling. In the process of	-- generating the pronunciation for a given respelling, it computes how the other dialects for that respelling -- differ. Then we take the union of these differences across the respellings. dodialect(ret, "gipuzkoan") local differences = {} for _, difftype in ipairs { "northern_different", "j_different", "need_bisc"} do		for _, pronun in ipairs(ret.pronun["gipuzkoan"]) do			if pronun.differences[difftype] then differences[difftype] = true end end end local northern_different = differences.northern_different local j_different = differences.j_different need_bisc = differences.need_bisc

-- Now, based on the observed differences, figure out how to combine the individual dialects into styles and style groups. if northern_different then express_style("Navarro-Lapurdian","Navarro-Lapurdian","northern") if j_different then express_style("Southern","Gipuzkoan","gipuzkoan") express_style("Southern","Biscayan","biscayan") express_style("Southern","Navarrese","navarrese") else if need_bisc then express_style("Southern","Gipuzkoan, Navarrese","gipuzkoan") express_style("Southern","Biscayan","biscayan") else express_style("Southern","Southern","gipuzkoan") end end else if j_different then express_style("Navarro-Lapurdian","Navarro-Lapurdian","northern") express_style("Southern","Gipuzkoan","gipuzkoan") express_style("Southern","Biscayan","biscayan") express_style("Southern","Navarrese","navarrese") elseif need_bisc then express_style(false,"most dialects","gipuzkoan") express_style(false,"Biscayan","biscayan") else express_style(false,false,"gipuzkoan") end end

return ret end

local function format_all_styles(expressed_styles, format_style) for i, style_group in ipairs(expressed_styles) do		if #style_group.styles == 1 then style_group.formatted, style_group.formatted_len = format_style(style_group.styles[1].tag, style_group.styles[1], i == 1) else style_group.formatted, style_group.formatted_len = format_style(style_group.tag, style_group.styles[1], i == 1) for j, style in ipairs(style_group.styles) do				style.formatted, style.formatted_len = format_style(style.tag, style, i == 1 and j == 1) end end end

local maxlen = 0 for i, style_group in ipairs(expressed_styles) do		local this_len = style_group.formatted_len if #style_group.styles > 1 then for _, style in ipairs(style_group.styles) do				this_len = math.max(this_len, style.formatted_len) end end maxlen = math.max(maxlen, this_len) end

local lines = {}

local need_major_hack = false for i, style_group in ipairs(expressed_styles) do		if #style_group.styles == 1 then table.insert(lines, style_group.formatted) need_major_hack = false else local inline = '\n \n' .. style_group.formatted .. " "			local full_prons = {} for _, style in ipairs(style_group.styles) do				table.insert(full_prons, style.formatted) end local full = '\n \n' .. table.concat(full_prons, "\n") .. " "			local em_length = math.floor(maxlen * 0.68) -- from Module:grc-pronunciation table.insert(lines, ' ' .. inline .. full .. " ") need_major_hack = true end end

-- major hack to get bullets working on the next line after a div box return table.concat(lines, "\n") .. (need_major_hack and "\n " or "") end

local function dodialect_pronun(args, ret, dialect) ret.pronun[dialect] = {} for i, term in ipairs(args.terms) do		local phonemic, phonetic, differences if term.raw then phonemic = term.raw_phonemic phonetic = term.raw_phonetic differences = construct_default_differences(dialect) else phonemic = export.IPA(term.term, dialect, false) phonetic = export.IPA(term.term, dialect, true) differences = phonemic.differences phonemic = phonemic.text phonetic = phonetic.text end local refs if not term.ref then refs = nil else refs = {} for _, refspec in ipairs(term.ref) do				local this_refs = require("Module:references").parse_references(refspec) for _, this_ref in ipairs(this_refs) do					table.insert(refs, this_ref) end end end

ret.pronun[dialect][i] = { raw = term.raw, phonemic = phonemic, phonetic = phonetic, refs = refs, q = term.q,			qq = term.qq, a = term.a,			aa = term.aa, differences = differences, }	end end

local function generate_pronun(args) local function remove_technical_chars(text) return rsub(text, "([JN])", "") end

local function this_dodialect_pronun(ret, dialect) dodialect_pronun(args, ret, dialect) end

local ret = express_all_styles(args.style, this_dodialect_pronun)

local function format_style(tag, expressed_style, is_first) local pronunciations = {} local formatted_pronuns = {}

local function ins(formatted_part) table.insert(formatted_pronuns, formatted_part) end

-- Loop through each pronunciation. For each one, add the phonemic and phonetic versions to `pronunciations`, -- for formatting by Module:IPA, and also create an approximation of the formatted version so that we can -- compute the appropriate width of the HTML switcher div box that holds the different per-dialect variants. -- NOTE: The code below constructs the formatted approximation out-of-order in some cases but that doesn't -- currently matter because we assume all characters have the same width. If we change the width computation -- in a way that requires the correct order, we need changes to the code below. for j, pronun in ipairs(expressed_style.pronun) do			-- Add tag to left qualifiers if first one -- FIXME: Consider using accent qualifier for the tag instead. local qs = pronun.q			if j == 1 and tag then if qs then qs = m_table.deepcopy(qs) table.insert(qs, tag) else qs = {tag} end end

local first_pronun = #pronunciations + 1

if not pronun.phonemic and not pronun.phonetic then error("Internal error: Saw neither phonemic nor phonetic pronunciation") end

if pronun.phonemic then -- missing if 'raw:[...]' given -- don't display syllable division markers in phonemic local slash_pron = "/" .. remove_technical_chars(pronun.phonemic:gsub("%.", "")) .. "/"				table.insert(pronunciations, {					pron = slash_pron,				}) ins(slash_pron) end

if pronun.phonetic then -- missing if 'raw:/.../' given local bracket_pron = "[" .. remove_technical_chars(pronun.phonetic) .. "]"				table.insert(pronunciations, {					pron = bracket_pron,				}) ins(bracket_pron) end

local last_pronun = #pronunciations

if qs then pronunciations[first_pronun].q = qs			end if pronun.a then pronunciations[first_pronun].a = pronun.a			end if j > 1 then pronunciations[first_pronun].separator = ", " ins(", ") end if pronun.qq then pronunciations[last_pronun].qq = pronun.qq			end if pronun.aa then pronunciations[last_pronun].aa = pronun.aa			end if qs or pronun.qq or pronun.a or pronun.aa then -- Note: This inserts the actual formatted qualifier text, including HTML and such, but the later call -- to textual_len removes all HTML and reduces links. ins(require("Module:pron qualifier").format_qualifiers {					lang = lang,					text = "",					q = qs,					qq = pronun.qq,					a = pronun.a,					aa = pronun.aa,				}) end

if pronun.refs then pronunciations[last_pronun].refs = pronun.refs -- Approximate the reference using a footnote notation. This will be slightly inaccurate if there are -- more than nine references but that is rare. ins(string.rep("[1]", #pronun.refs)) end if first_pronun ~= last_pronun then pronunciations[last_pronun].separator = " " ins(" ") end end

local bullet = string.rep("*", args.bullets) .. " "		-- Here we construct the formatted line in `formatted`, and also try to construct the equivalent without HTML -- and wiki markup in `formatted_for_len`, so we can compute the approximate textual length for use in sizing -- the toggle box with the "more" button on the right. local pre = is_first and args.pre and args.pre .. " " or "" local post = is_first and args.post and " " .. args.post or "" local formatted = bullet .. pre .. m_IPA.format_IPA_full { lang = lang, items = pronunciations, separator = "" } .. post local formatted_for_len = bullet .. pre .. "IPA(key): " .. table.concat(formatted_pronuns) .. post return formatted, textual_len(formatted_for_len) end

ret.text = format_all_styles(ret.expressed_styles, format_style)

return ret end

local function parse_respelling(respelling, pagename, parse_err) local raw_respelling = respelling:match("^raw:(.*)$") if raw_respelling then local raw_phonemic, raw_phonetic = raw_respelling:match("^/(.*)/ %[(.*)%]$") if not raw_phonemic then raw_phonemic = raw_respelling:match("^/(.*)/$") end if not raw_phonemic then raw_phonetic = raw_respelling:match("^%[(.*)%]$") end if not raw_phonemic and not raw_phonetic then parse_err(("Unable to parse raw respelling '%s', should be one of /.../, [...] or /.../ [...]")				:format(raw_respelling)) end return { raw = true, raw_phonemic = raw_phonemic, raw_phonetic = raw_phonetic, }	end if respelling == "+" then respelling = pagename end return {term = respelling} end

-- Return the number of syllables of a phonemic representation, which should have syllable dividers in it but no -- hyphens. local function get_num_syl_from_phonemic(phonemic) -- Maybe we should just count vowels instead of the below code. phonemic = rsub(phonemic, "|", " ") -- remove IPA foot boundaries local words = rsplit(phonemic, " +") for i, word in ipairs(words) do -- IPA stress marks are syllable divisions if between characters; otherwise just remove. word = rsub(word, "(.)[ˌˈ](.)", "%1.%2") word = rsub(word, "[ˌˈ]", "") words[i] = word end -- There should be a syllable boundary between words. phonemic = table.concat(words, ".") return ulen(rsub(phonemic, "[^.]", "")) + 1 end

-- Take the last two syllables for the ryhme, unless the word has a single syllable local function convert_phonemic_to_rhyme(phonemic) local syllables = rsplit(phonemic, "%.") local rh = "" if #syllables > 1 then rh = table.concat(syllables, ".", #syllables - 1, #syllables) else rh = phonemic end return rsub(rh, "^[^" .. vowel .. "]*", ""):gsub("%.", ""):gsub("͡", "") end

local function split_syllabified_spelling(spelling) return rsplit(spelling, "%.") end

-- "Align" syllabification to original spelling by matching character-by-character, allowing for extra syllable and -- accent markers in the syllabification. If we encounter an extra syllable marker (.), we allow and keep it. If we -- encounter an extra accent marker in the syllabification, we drop it. In any other case, we return nil indicating -- the alignment failed. local function align_syllabification_to_spelling(syllab, spelling) local result = {} local syll_chars = rsplit(decompose(syllab), "") local spelling_chars = rsplit(decompose(spelling), "") local i = 1 local j = 1 while i <= #syll_chars or j <= #spelling_chars do		local ci = syll_chars[i] local cj = spelling_chars[j] if ci == cj then table.insert(result, ci) i = i + 1 j = j + 1 elseif ci == "." then table.insert(result, ci) i = i + 1 elseif ci == AC or ci == GR or ci == CFLEX then -- skip character i = i + 1 else -- non-matching character return nil end end if i <= #syll_chars or j <= #spelling_chars then -- left-over characters on one side or the other return nil end return unfc(table.concat(result)) end

local function generate_hyph_obj(term) return {syllabification = term, hyph = split_syllabified_spelling(term)} end

-- Word should already be decomposed. local function word_has_vowels(word) return rfind(word, V) end

local function all_words_have_vowels(term) local words = rsplit(decompose(term), "[ %-]") for i, word in ipairs(words) do -- Allow empty word; this occurs with prefixes and suffixes. if word ~= "" and not word_has_vowels(word) then return false end end return true end

local function should_generate_rhyme_from_respelling(term) local words = rsplit(decompose(term), " +") return #words == 1 and -- no if multiple words not words[1]:find(".%-.") and -- no if word is composed of hyphenated parts (e.g. Austria-Hungría) not words[1]:find("%-$") and -- no if word is a prefix not (words[1]:find("^%-") and words[1]:find(CFLEX)) and -- no if word is an unstressed suffix word_has_vowels(words[1]) -- no if word has no vowels (e.g. a single letter) end

local function should_generate_rhyme_from_ipa(ipa) return not ipa:find("%s") and word_has_vowels(decompose(ipa)) end

local function dodialect_specified_rhymes(rhymes, hyphs, parsed_respellings, rhyme_ret, dialect) rhyme_ret.pronun[dialect] = {} for _, rhyme in ipairs(rhymes) do		local num_syl = rhyme.num_syl local no_num_syl = false

-- If user explicitly gave the rhyme but didn't explicitly specify the number of syllables, try to take it from -- the hyphenation. if not num_syl then num_syl = {} for _, hyph in ipairs(hyphs) do				if should_generate_rhyme_from_respelling(hyph.syllabification) then local this_num_syl = 1 + ulen(rsub(hyph.syllabification, "[^.]", "")) m_table.insertIfNot(num_syl, this_num_syl) else no_num_syl = true break end end if no_num_syl or #num_syl == 0 then num_syl = nil end end

-- If that fails and term is single-word, try to take it from the phonemic. if not no_num_syl and not num_syl then for _, parsed in ipairs(parsed_respellings) do				for dialect, pronun in pairs(parsed.pronun.pronun[dialect]) do -- Check that pronun.phonemic exists (it may not if raw phonetic-only pronun is given). if pronun.phonemic then if not should_generate_rhyme_from_ipa(pronun.phonemic) then no_num_syl = true break end -- Count number of syllables by looking at syllable boundaries (including stress marks). local this_num_syl = get_num_syl_from_phonemic(pronun.phonemic) m_table.insertIfNot(num_syl, this_num_syl) end end if no_num_syl then break end end if no_num_syl or #num_syl == 0 then num_syl = nil end end

table.insert(rhyme_ret.pronun[dialect], {			rhyme = rhyme.rhyme,			num_syl = num_syl,			qualifiers = rhyme.qualifiers,			differences = construct_default_differences(dialect),		}) end end

local function parse_pron_modifier(arg, put, parse_err, generate_obj, param_mods, no_split_on_comma) local retval = {}

if arg:find("<") then if not put then put = require(put_module) end

local function get_valid_prefixes local valid_prefixes = {} for param_mod, _ in pairs(param_mods) do				table.insert(valid_prefixes, param_mod) end table.insert(valid_prefixes, "q") table.insert(valid_prefixes, "qq") table.insert(valid_prefixes, "a") table.insert(valid_prefixes, "aa") table.sort(valid_prefixes) return valid_prefixes end

local segments = put.parse_balanced_segment_run(arg, "<", ">") local comma_separated_groups = no_split_on_comma and {segments} or put.split_alternating_runs_on_comma(segments) for _, group in ipairs(comma_separated_groups) do			local obj = generate_obj(group[1]) for j = 2, #group - 1, 2 do				if group[j + 1] ~= "" then parse_err("Extraneous text '" .. group[j + 1] .. "' after modifier") end local modtext = group[j]:match("^<(.*)>$") if not modtext then parse_err("Internal error: Modifier '" .. group[j] .. "' isn't surrounded by angle brackets") end local prefix, val = modtext:match("^([a-z]+):(.*)$") if not prefix then local valid_prefixes = get_valid_prefixes for i, valid_prefix in ipairs(valid_prefixes) do valid_prefixes[i] = "'" .. valid_prefix .. ":'"					end parse_err("Modifier " .. group[j] .. " lacks a prefix, should begin with one of " ..						m_table.serialCommaJoin(valid_prefixes)) end if prefix == "q" or prefix == "qq" or prefix == "a" or prefix == "aa" then if not obj[prefix] then obj[prefix] = {} end table.insert(obj[prefix], val) elseif param_mods[prefix] then local key = param_mods[prefix].item_dest or prefix if obj[key] then parse_err("Modifier '" .. prefix .. "' specified more than once") end local convert = param_mods[prefix].convert if convert then obj[key] = convert(val) else obj[key] = val end else local valid_prefixes = get_valid_prefixes for i, valid_prefix in ipairs(valid_prefixes) do valid_prefixes[i] = "'" .. valid_prefix .. "'"					end parse_err("Unrecognized prefix '" .. prefix .. "' in modifier " .. group[j]						.. ", should be " .. m_table.serialCommaJoin(valid_prefixes)) end end table.insert(retval, obj) end elseif no_split_on_comma then table.insert(retval, generate_obj(arg)) else for _, term in ipairs(split_on_comma(arg)) do			table.insert(retval, generate_obj(term)) end end

return retval end

local function parse_rhyme(arg, put, parse_err) local function generate_obj(term) return {rhyme = term} end local param_mods = { s = { item_dest = "num_syl", convert = function(arg) local nsyls = rsplit(arg, ",") for i, nsyl in ipairs(nsyls) do					if not nsyl:find("^[0-9]+$") then parse_err("Number of syllables '" .. nsyl .. "' should be numeric") end nsyls[i] = tonumber(nsyl) end return nsyls end, },	}

return parse_pron_modifier(arg, put, parse_err, generate_obj, param_mods) end

local function parse_hyph(arg, put, parse_err) -- None other than qualifiers local param_mods = {}

return parse_pron_modifier(arg, put, parse_err, generate_hyph_obj, param_mods) end

local function parse_homophone(arg, put, parse_err) local function generate_obj(term) return {term = term} end local param_mods = { t = { -- We need to store the  inline modifier into the "gloss" key of the parsed term, -- because that is what Module:links (called from Module:homophones) expects. item_dest = "gloss", },		gloss = {}, pos = {}, alt = {}, lit = {}, id = {}, g = { -- We need to store the  inline modifier into the "genders" key of the parsed term, -- because that is what Module:links (called from Module:homophones) expects. item_dest = "genders", convert = function(arg) return rsplit(arg, ",") end, },	}

return parse_pron_modifier(arg, put, parse_err, generate_obj, param_mods) end

local function generate_audio_obj(arg) local file, gloss if arg:find("#") then file, gloss = arg:match("^(.-)%s*#%s*(.*)$") else file, gloss = arg:match("^(.-)%s*;%s*(.*)$") end file = file or arg return {file = file, gloss = gloss} end

local function parse_audio(arg, put, parse_err) -- None other than qualifiers local param_mods = {}

-- Don't split on comma because some filenames have embedded commas not followed by a space -- (typically followed by an underscore). return parse_pron_modifier(arg, put, parse_err, generate_audio_obj, param_mods, "no split on comma") end

-- External entry point for. function export.show_pr(frame) local params = { [1] = {list = true}, ["rhyme"] = {}, ["hyph"] = {}, ["hmp"] = {}, ["audio"] = {list = true}, ["pagename"] = {}, }	local parargs = frame:getParent.args local args = require("Module:parameters").process(parargs, params) local pagename = args.pagename or mw.title.getCurrentTitle.subpageText

-- Parse the arguments. local function remove_technical_chars(text) return rsub(text, "([JN])", "") end local respellings = #args[1] > 0 and args[1] or {"+"} local parsed_respellings = {} local function overall_parse_err(msg, arg, val) error(msg .. ": " .. arg .. "= " .. val) end local overall_rhyme = args.rhyme and parse_rhyme(args.rhyme, nil, function(msg) overall_parse_err(msg, "rhyme", args.rhyme) end) or nil local overall_hyph = args.hyph and parse_hyph(args.hyph, nil, function(msg) overall_parse_err(msg, "hyph", args.hyph) end) or nil local overall_hmp = args.hmp and parse_homophone(args.hmp, nil, function(msg) overall_parse_err(msg, "hmp", args.hmp) end) or nil local overall_audio if args.audio then overall_audio = {} for _, audio in ipairs(args.audio) do			local parsed_audio = parse_audio(audio, nil, function(msg) overall_parse_err(msg, "audio", audio) end) if #parsed_audio > 1 then error("Internal error: Saw more than one object returned from parse_audio") end table.insert(overall_audio, parsed_audio[1]) end end local put

for i, respelling in ipairs(respellings) do		local function parse_err(msg) error(msg .. ": " .. i .. "= " .. respelling) end if respelling:find("<") then if not put then put = require(put_module) end

local param_mods = { pre = {}, post = {}, style = {}, bullets = { convert = function(arg) if not arg:find("^[0-9]+$") then parse_err("Modifier 'bullets' should have a number as argument, but saw '" .. arg .. "'") end return tonumber(arg) end, },				rhyme = { insert = true, flatten = true, convert = function(arg) return parse_rhyme(arg, put, parse_err) end, },				hyph = { insert = true, flatten = true, convert = function(arg) return parse_hyph(arg, put, parse_err) end, },				hmp = { insert = true, flatten = true, convert = function(arg) return parse_homophone(arg, put, parse_err) end, },				audio = { insert = true, flatten = true, convert = function(arg) return parse_audio(arg, put, parse_err) end, },			}

local function get_valid_prefixes local valid_prefixes = {} for param_mod, _ in pairs(param_mods) do					table.insert(valid_prefixes, param_mod) end table.insert(valid_prefixes, "ref") table.insert(valid_prefixes, "q") table.insert(valid_prefixes, "qq") table.insert(valid_prefixes, "a") table.insert(valid_prefixes, "aa") table.sort(valid_prefixes) return valid_prefixes end

local segments = put.parse_balanced_segment_run(respelling, "<", ">") local comma_separated_groups = put.split_alternating_runs_on_comma(segments, ",") local parsed = {terms = {}, audio = {}, rhyme = {}, hyph = {}, hmp = {}} for j, group in ipairs(comma_separated_groups) do				local termobj = parse_respelling(group[1], pagename, parse_err) for k = 2, #group - 1, 2 do					if group[k + 1] ~= "" then parse_err("Extraneous text '" .. group[k + 1] .. "' after modifier") end local modtext = group[k]:match("^<(.*)>$") if not modtext then parse_err("Internal error: Modifier '" .. group[k] .. "' isn't surrounded by angle brackets") end local prefix, arg = modtext:match("^([a-z]+):(.*)$") if not prefix then local valid_prefixes = get_valid_prefixes for i, valid_prefix in ipairs(valid_prefixes) do valid_prefixes[i] = "'" .. valid_prefix .. ":'"						end parse_err("Modifier " .. group[k] .. " lacks a prefix, should begin with one of " ..							m_table.serialCommaJoin(valid_prefixes)) end if prefix == "ref" or prefix == "q" or prefix == "qq" or prefix == "a" or prefix == "aa" then if not termobj[prefix] then termobj[prefix] = {} end table.insert(termobj[prefix], arg) elseif param_mods[prefix] then if j < #comma_separated_groups then parse_err("Modifier '" .. prefix .. "' should occur after the last comma-separated term") end if not param_mods[prefix].insert and parsed[prefix] then parse_err("Modifier '" .. prefix .. "' occurs twice, second occurrence " .. group[k]) end local converted if param_mods[prefix].convert then converted = param_mods[prefix].convert(arg) else converted = arg end if param_mods[prefix].insert then if param_mods[prefix].flatten then for _, obj in ipairs(converted) do									table.insert(parsed[prefix], obj) end else table.insert(parsed[prefix], converted) end else parsed[prefix] = converted end else local valid_prefixes = get_valid_prefixes for i, valid_prefix in ipairs(valid_prefixes) do valid_prefixes[i] = "'" .. valid_prefix .. "'"						end parse_err("Unrecognized prefix '" .. prefix .. "' in modifier " .. group[k]							.. ", should be " .. m_table.serialCommaJoin(valid_prefixes)) end end table.insert(parsed.terms, termobj) end if not parsed.bullets then parsed.bullets = 1 end table.insert(parsed_respellings, parsed) else local termobjs = {} for _, term in ipairs(split_on_comma(respelling)) do				table.insert(termobjs, parse_respelling(term, pagename, parse_err)) end table.insert(parsed_respellings, {				terms = termobjs,				audio = {},				rhyme = {},				hyph = {},				hmp = {},				bullets = 1,			}) end end

if overall_hyph then local hyphs = {} for _, hyph in ipairs(overall_hyph) do			if hyph.syllabification == "+" then hyph.syllabification = syllabify_from_spelling(pagename) hyph.hyph = split_syllabified_spelling(hyph.syllabification) elseif hyph.syllabification == "-" then overall_hyph = {} break end end end

-- Loop over individual respellings, processing each. for _, parsed in ipairs(parsed_respellings) do		parsed.pronun = generate_pronun(parsed) local no_auto_rhyme = false for _, term in ipairs(parsed.terms) do			if term.raw then if not should_generate_rhyme_from_ipa(term.raw_phonemic or term.raw_phonetic) then no_auto_rhyme = true break end elseif not should_generate_rhyme_from_respelling(term.term) then no_auto_rhyme = true break end end

if #parsed.hyph == 0 then if not overall_hyph and all_words_have_vowels(pagename) then for _, term in ipairs(parsed.terms) do					if not term.raw then local syllabification = syllabify_from_spelling(term.term) local aligned_syll = align_syllabification_to_spelling(syllabification, pagename) if aligned_syll then m_table.insertIfNot(parsed.hyph, generate_hyph_obj(aligned_syll)) end end end end else for _, hyph in ipairs(parsed.hyph) do				if hyph.syllabification == "+" then hyph.syllabification = syllabify_from_spelling(pagename) hyph.hyph = split_syllabified_spelling(hyph.syllabification) elseif hyph.syllabification == "-" then parsed.hyph = {} break end end end

-- Generate the rhymes. local function dodialect_rhymes_from_pronun(rhyme_ret, dialect) rhyme_ret.pronun[dialect] = {} -- It's possible the pronunciation for a passed-in dialect was never generated. This happens e.g. with -- . The initial call to generate_pronun fails to generate a pronunciation -- for the dialect 'distinction-yeismo' because the pronunciation of 'cebolla' differs between distincion -- and seseo and so the seseo style restriction rules out generation of pronunciation for distincion -- dialects (other than 'gipuzkoan', which always gets generated so as to determine on which axes			-- the dialects differ). However, when generating the rhyme, it is based only on -olla, whose pronunciation -- does not differ between distincion and seseo, but does differ between lleismo and yeismo, so it needs to			-- generate a yeismo-specific rhyme, and 'distincion-yeismo' is the representative dialect for yeismo in the -- situation where distincion and seseo do not have distinct results (based on the following line in			-- express_all_styles): --  express_style(false, "most of Spain and Latin America", "distincion-yeismo", "distincion-seseo-yeismo") -- In this case we need to generate the missing overall pronunciation ourselves since we need it to generate -- the dialect-specific rhyme pronunciation. if not parsed.pronun.pronun[dialect] then dodialect_pronun(parsed, parsed.pronun, dialect) end for _, pronun in ipairs(parsed.pronun.pronun[dialect]) do				-- We should have already excluded multiword terms and terms without vowels from rhyme generation (see				-- `no_auto_rhyme` below). But make sure to check that pronun.phonemic exists (it may not if raw				-- phonetic-only pronun is given). if pronun.phonemic then -- Count number of syllables by looking at syllable boundaries (including stress marks). local num_syl = get_num_syl_from_phonemic(pronun.phonemic) -- Get the rhyme by truncating everything up through the last stress mark + any following -- consonants, and remove syllable boundary markers. local rhyme = convert_phonemic_to_rhyme(pronun.phonemic) local saw_already = false for _, existing in ipairs(rhyme_ret.pronun[dialect]) do						if existing.rhyme == rhyme then saw_already = true -- We already saw this rhyme but possibly with a different number of syllables, -- e.g. if the user specified two pronunciations 'biología' (4 syllables) and -- 'bi.ología' (5 syllables), both of which have the same rhyme /ia/. m_table.insertIfNot(existing.num_syl, num_syl) break end end if not saw_already then local rh2 = rsub(rhyme, "ts̻", "") local rhyme_diffs = nil if dialect == "gipuzkoan" then rhyme_diffs = {} if rfind(rh2,"s̻") then rhyme_diffs.need_bisc = true end if rfind(rhyme,"ts̺") then rhyme_diffs.need_bisc = true end if rfind(rhyme,"J") then rhyme_diffs.j_different = true end if rfind(rhyme,"N") then rhyme_diffs.northern_different = true end end table.insert(rhyme_ret.pronun[dialect], {							rhyme = remove_technical_chars(rhyme),							num_syl = {num_syl},							differences = rhyme_diffs,						}) end end end end

if #parsed.rhyme == 0 then if overall_rhyme or no_auto_rhyme then parsed.rhyme = nil else parsed.rhyme = express_all_styles(parsed.style, dodialect_rhymes_from_pronun) end else local no_rhyme = false for _, rhyme in ipairs(parsed.rhyme) do				if rhyme.rhyme == "-" then no_rhyme = true break end end if no_rhyme then parsed.rhyme = nil else local function this_dodialect(rhyme_ret, dialect) return dodialect_specified_rhymes(parsed.rhyme, parsed.hyph, {parsed}, rhyme_ret, dialect) end parsed.rhyme = express_all_styles(parsed.style, this_dodialect) end end end

if overall_rhyme then local no_overall_rhyme = false for _, orhyme in ipairs(overall_rhyme) do			if orhyme.rhyme == "-" then no_overall_rhyme = true break end end if no_overall_rhyme then overall_rhyme = nil else local all_hyphs if overall_hyph then all_hyphs = overall_hyph else all_hyphs = {} for _, parsed in ipairs(parsed_respellings) do					for _, hyph in ipairs(parsed.hyph) do						m_table.insertIfNot(all_hyphs, hyph) end end end local function dodialect_overall_rhyme(rhyme_ret, dialect) return dodialect_specified_rhymes(overall_rhyme, all_hyphs, parsed_respellings, rhyme_ret, dialect) end overall_rhyme = express_all_styles(parsed.style, dodialect_overall_rhyme) end end

-- If all sets of pronunciations have the same rhymes, display them only once at the bottom. -- Otherwise, display rhymes beneath each set, indented. local first_rhyme_ret local all_rhyme_sets_eq = true for j, parsed in ipairs(parsed_respellings) do		if j == 1 then first_rhyme_ret = parsed.rhyme elseif not m_table.deepEquals(first_rhyme_ret, parsed.rhyme) then all_rhyme_sets_eq = false break end end

local function format_rhyme(rhyme_ret, num_bullets) local function format_rhyme_style(tag, expressed_style, is_first) local pronunciations = {} local rhymes = {} for _, pronun in ipairs(expressed_style.pronun) do				table.insert(rhymes, pronun) end local data = { lang = lang, rhymes = rhymes, qualifiers = tag and {tag} or nil, force_cat = force_cat, }			local bullet = string.rep("*", num_bullets) .. " "			local formatted = bullet .. require("Module:rhymes").format_rhymes(data) local formatted_for_len_parts = {} table.insert(formatted_for_len_parts, bullet .. "Rhymes: " .. (tag and "(" .. tag .. ") " or "")) for j, pronun in ipairs(expressed_style.pronun) do				if j > 1 then table.insert(formatted_for_len_parts, ", ") end if pronun.qualifiers then table.insert(formatted_for_len_parts, "(" .. table.concat(pronun.qualifiers, ", ") .. ") ")				end table.insert(formatted_for_len_parts, "-" .. pronun.rhyme) end return formatted, textual_len(table.concat(formatted_for_len_parts)) end

return format_all_styles(rhyme_ret.expressed_styles, format_rhyme_style) end

-- If all sets of pronunciations have the same hyphenations, display them only once at the bottom. -- Otherwise, display hyphenations beneath each set, indented. local first_hyphs local all_hyph_sets_eq = true for j, parsed in ipairs(parsed_respellings) do		if j == 1 then first_hyphs = parsed.hyph elseif not m_table.deepEquals(first_hyphs, parsed.hyph) then all_hyph_sets_eq = false break end end

local function format_hyphenations(hyphs, num_bullets) local hyphtext = require("Module:hyphenation").format_hyphenations { lang = lang, hyphs = hyphs} return string.rep("*", num_bullets) .. " " .. hyphtext end

-- If all sets of pronunciations have the same homophones, display them only once at the bottom. -- Otherwise, display homophones beneath each set, indented. local first_hmps local all_hmp_sets_eq = true for j, parsed in ipairs(parsed_respellings) do		if j == 1 then first_hmps = parsed.hmp elseif not m_table.deepEquals(first_hmps, parsed.hmp) then all_hmp_sets_eq = false break end end

local function format_homophones(hmps, num_bullets) local hmptext = require("Module:homophones").format_homophones { lang = lang, homophones = hmps } return string.rep("*", num_bullets) .. " " .. hmptext end

local function format_audio(audios, num_bullets) local ret = {} for i, audio in ipairs(audios) do			local text = require("Module:audio").format_audio { lang = lang, file = audio.file, caption = audio.gloss, q = audio.q,				qq = audio.qq, a = audio.a,				aa = audio.aa, }			table.insert(ret, string.rep("*", num_bullets) .. " " .. text) end return table.concat(ret, "\n") end

local textparts = {} local min_num_bullets = 9999 for j, parsed in ipairs(parsed_respellings) do		if parsed.bullets < min_num_bullets then min_num_bullets = parsed.bullets end if j > 1 then table.insert(textparts, "\n") end table.insert(textparts, parsed.pronun.text) if #parsed.audio > 0 then table.insert(textparts, "\n") -- If only one pronunciation set, add the audio with the same number of bullets, otherwise -- indent audio by one more bullet. table.insert(textparts, format_audio(parsed.audio, #parsed_respellings == 1 and parsed.bullets or parsed.bullets + 1)) end if not all_rhyme_sets_eq and parsed.rhyme then table.insert(textparts, "\n") table.insert(textparts, format_rhyme(parsed.rhyme, parsed.bullets + 1)) end if not all_hyph_sets_eq and #parsed.hyph > 0 then table.insert(textparts, "\n") table.insert(textparts, format_hyphenations(parsed.hyph, parsed.bullets + 1)) end if not all_hmp_sets_eq and #parsed.hmp > 0 then table.insert(textparts, "\n") table.insert(textparts, format_homophones(parsed.hmp, parsed.bullets + 1)) end end if overall_audio and #overall_audio > 0 then table.insert(textparts, "\n") table.insert(textparts, format_audio(overall_audio, min_num_bullets)) end if all_rhyme_sets_eq and first_rhyme_ret then table.insert(textparts, "\n") table.insert(textparts, format_rhyme(first_rhyme_ret, min_num_bullets)) end if overall_rhyme then table.insert(textparts, "\n") table.insert(textparts, format_rhyme(overall_rhyme, min_num_bullets)) end if all_hyph_sets_eq and #first_hyphs > 0 then table.insert(textparts, "\n") table.insert(textparts, format_hyphenations(first_hyphs, min_num_bullets)) end if overall_hyph and #overall_hyph > 0 then table.insert(textparts, "\n") table.insert(textparts, format_hyphenations(overall_hyph, min_num_bullets)) end if all_hmp_sets_eq and #first_hmps > 0 then table.insert(textparts, "\n") table.insert(textparts, format_homophones(first_hmps, min_num_bullets)) end if overall_hmp and #overall_hmp > 0 then table.insert(textparts, "\n") table.insert(textparts, format_homophones(overall_hmp, min_num_bullets)) end

return table.concat(textparts) end

return export

title: Module:eu-pron/new


text:
summer soldier

Noun

 * 1) A person who fights for a cause only when to do so is easy and costs little.

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

title: summer soldier


text: summer soldiers

title: summer soldiers


text:
brunbränd

Adjective

 * 1) tanned, bronzed (of a person or the like, from the sun's rays or the like)
 * 2) sunburnt (of plants or the like)
 * 3) burnt brown (from heat)

title: brunbränd


text:
Reconstruction:Proto-Finnic/hukkudak

Etymology
From.

Verb

 * 1) to get lost, to disappear
 * 2) to drown, to die

Descendants

 * South Karelian:
 * South Karelian:
 * South Karelian:
 * South Karelian:
 * South Karelian:

title: Reconstruction:Proto-Finnic/hukkudak


text:
miętolić

Etymology
From.

Verb

 * 1)  to rumple
 * 2)  to caress a person or animal by squeezing them hard
 * 3)  to have sexual intercourse with someone while squeezing them hard to satisfy one's sexual desire
 * 4)  to get rumpled
 * 1)  to have sexual intercourse with someone while squeezing them hard to satisfy one's sexual desire
 * 2)  to get rumpled
 * 1)  to get rumpled

title: miętolić


text: brunbränt

title: brunbränt


text: brunbrända

title: brunbrända


text: Template:eu-pr

title: Template:eu-pr


text: brunbrände

title: brunbrände


text: bahay balintataw

title: bahay balintataw


text:
User:Ioe bidome/sandbox

Etymology
From

Noun

 * 1) measure
 * 2) judge

title: User:Ioe bidome/sandbox


text:
prédál

Etymology
. With the verb-forming suffix.

Verb

 * 1)  to pillage, plunder, loot
 * 2)  to squander, waste, fritter away to spend or use wealth, money in a foolish and wasteful way
 * 1)  to squander, waste, fritter away to spend or use wealth, money in a foolish and wasteful way

title: prédál


text: omituisellamme

title: omituisellamme


text: omituisillamme

title: omituisillamme


text: omituiseltamme

title: omituiseltamme


text: omituisiltamme

title: omituisiltamme


text:
oregerlig

Etymology
. Cognate of 🇨🇬. .

Adjective

 * 1) unruly, rambunctious

title: oregerlig


text: jīdīpī

title: jīdīpī


text: Category:sl:Nineteen

title: Category:sl:Nineteen


text: ジーディーピー

title: ジーディーピー


text:
oregerlighet

Noun

 * 1) unruliness, rambunctiousness

title: oregerlighet


text: preventivt

title: preventivt


text: Category:Slovene neuter hard nouns with adjectival endings


text: Category:Slovene neuter nouns with adjectival endings


text: dāoshēn

title: dāoshēn


text: 稷山

title: 稷山


text: dǎoshēn

title: dǎoshēn


text: Category:Slovene neuter nouns with adjectival endings with fixed accent


text: oregerligheten

title: oregerligheten


text: oregerlighetens

title: oregerlighetens


text: oregerlighets

title: oregerlighets


text: Category:Slovene feminine nouns with adjectival endings with fixed accent


text: academic freedoms

title: academic freedoms


text: Category:Slovene feminine nouns with adjectival endings


text:
sahsisk

Adjective

 * 1) A west Germanic language historically tied to Anglo-Saxon and Old Low Franconian.

title: sahsisk


text: Category:Swedish terms prefixed with p-

title: Category:Swedish terms prefixed with p-


text: omituisellemme

title: omituisellemme


text: omituisillemme

title: omituisillemme


text:
chiên ghẻ

Noun

 * 1)  a group's member who adversely influences on other members and besmirches a group's reputation; a bad apple

title: chiên ghẻ


text:
p-stav

Etymology
sv

Noun

 * 1) a contraceptive implant (for women, placed under the skin, releasing progestagen)

title: p-stav


text: Citations:are bears Catholic

title: Citations:are bears Catholic


text: p-staven

title: p-staven


text: p-stavar

title: p-stavar


text:
zżerać

Etymology
From.

Verb

 * 1)  to consume, to eat, to ingest
 * 2)  to devour, to gobble, to gorge, to stuff oneself
 * 3)  to eat up
 * 4)  to gnaw
 * 5)  to eat away at
 * 6)  to sting
 * 7)  to eat one another
 * 8)  to bring yourself to a state of extreme fatigue or loss of strength and health
 * 9)  to bring one another to a state of extreme fatigue or loss of strength and health
 * 10)  to become unusable or cease to exist
 * 11)  to quarrel, to wrangle
 * 1)  to sting
 * 2)  to eat one another
 * 3)  to bring yourself to a state of extreme fatigue or loss of strength and health
 * 4)  to bring one another to a state of extreme fatigue or loss of strength and health
 * 5)  to become unusable or cease to exist
 * 6)  to quarrel, to wrangle
 * 1)  to bring one another to a state of extreme fatigue or loss of strength and health
 * 2)  to become unusable or cease to exist
 * 3)  to quarrel, to wrangle
 * 1)  to quarrel, to wrangle
 * 1)  to quarrel, to wrangle

title: zżerać


text: p-stavarna

title: p-stavarna


text: p-stavs

title: p-stavs


text: p-stavens

title: p-stavens


text:
Talk:kibe

Etymology
There is an apparent uncoincidental kinship between KIBE and Welsh CIBI (chillblain); but no record of borrowing before Middle English - at least in written records. Andrew H. Gray 18:53, 27 June 2023 (UTC) Andrew H. Gray 18:53, 27 June 2023 (UTC)

title: Talk:kibe


text: p-stavars

title: p-stavars


text: p-stavarnas

title: p-stavarnas


text:
ovillig

Etymology
, equivalent to.

Adjective

 * 1) unwilling

title: ovillig


text:
ovillighet

Noun

 * 1) unwillingness

title: ovillighet


text: ovilligheten

title: ovilligheten


text: ovillighetens

title: ovillighetens


text: ovillighets

title: ovillighets


text:
walrusine

Adjective

 * , particularly in size.

title: walrusine


text:
zeżreć

Etymology
From.

Verb

 * 1)  to consume, to eat, to ingest
 * 2)  to devour, to gobble, to gorge, to stuff oneself
 * 3)  to eat up
 * 4)  to gnaw
 * 5)  to eat away at
 * 6)  to sting
 * 7)  to eat one another
 * 8)  to bring yourself to a state of extreme fatigue or loss of strength and health
 * 9)  to bring one another to a state of extreme fatigue or loss of strength and health
 * 10)  to become unusable or cease to exist
 * 11)  to quarrel, to wrangle
 * 1)  to eat one another
 * 2)  to bring yourself to a state of extreme fatigue or loss of strength and health
 * 3)  to bring one another to a state of extreme fatigue or loss of strength and health
 * 4)  to become unusable or cease to exist
 * 5)  to quarrel, to wrangle
 * 1)  to bring one another to a state of extreme fatigue or loss of strength and health
 * 2)  to become unusable or cease to exist
 * 3)  to quarrel, to wrangle
 * 1)  to quarrel, to wrangle
 * 1)  to quarrel, to wrangle

title: zeżreć


text: walrusian

title: walrusian


text:
нечутливий

Etymology
From.

Adjective

 * 1) insensitive, insusceptible
 * 2) insensitive
 * 1) insensitive

title: нечутливий


text:
দাই

Etymology
Due to the lack of aspiration, the word is considered to be a conflation of two related roots: Ultimately both are from derivations of.
 * from, from , from , from , from.
 * from, from , from , from.

Noun

 * 1) midwife
 * 2) nurse

title: দাই


text:
लवङ्ग

Noun

 * 1) clove

title: लवङ्ग


text:
ਸਾਹ ਨਾਲ਼ੀ

Etymology
🇰🇲.

Noun

 * 1) windpipe, trachea

title: ਸਾਹ ਨਾਲ਼ੀ


text:
Reconstruction:Proto-West Germanic/fārēn

Etymology
From.

Verb

 * 1)  to have evil intent
 * 2)  to waylay, lie in ambush


text:
ਸਾਹ ਨਾਲ਼ੀ ਦੀ ਸੋਜ

Noun

 * 1) bronchitis

title: ਸਾਹ ਨਾਲ਼ੀ ਦੀ ਸੋਜ


text:
wykładać karty na stół

Etymology
lit. 'to lay out [the] cards on [the] table'.

Verb

 * 1)  to put one's cards on the table

title: wykładać karty na stół


text:
wyłożyć karty na stół

Etymology
lit. 'to lay out [the] cards on [the] table'.

Verb

 * 1)  to put one's cards on the table

title: wyłożyć karty na stół


text: Stellani

title: Stellani


text: Nardomarino

title: Nardomarino


title: Template:R:xcl:Patkanov:1877


text: Michetti

title: Michetti


text:
odkrywać karty

Etymology
lit. 'to uncover [one's] cards'.

title: odkrywać karty


text:
odkryć karty

Etymology
lit. 'to uncover [one's] cards'.

title: odkryć karty


text: Iamoni

title: Iamoni


text:
odkryć wszystkie karty

Etymology
lit. 'to uncover all of [one's] cards'.

title: odkryć wszystkie karty


text:
odkrywać wszystkie karty

Etymology
lit. 'to uncover all of [one's] cards'.

title: odkrywać wszystkie karty


text:
सिपाह

Etymology
, from, from , from.

Noun

 * 1) army

title: सिपाह


text: Category:Hindi terms derived from the Proto-Indo-European root *ḱewh₁-


text:
odsłaniać karty

Etymology
lit. 'to reveal [one's] cards'.

title: odsłaniać karty


text:
odsłonić karty

Etymology
lit. 'to reveal [one's] cards'.

title: odsłonić karty


text:
wykładać karty

Etymology
lit. 'to lay out [one's] cards'.

title: wykładać karty


text:
wyłożyć karty

Etymology
lit. 'to lay out [one's] cards'.

title: wyłożyć karty


text: töjs

title: töjs


text: töjes

title: töjes


text: töjas

title: töjas


text: töjts

title: töjts


text: töjdes

title: töjdes


text:
ਨਾਲ਼ੀ

Noun

 * 1)  or
 * 2) drain, gutter
 * 3) barrel, muzzle
 * 4) pipe, tube, duct, conduit
 * 5) hollow bone

title: ਨਾਲ਼ੀ


text:
wykładać wszystkie karty na stół

Etymology
lit. 'to lay out all of [one's] cards on [the] table'.

title: wykładać wszystkie karty na stół


text:
wyłożyć wszystkie karty na stół

Etymology
lit. 'to lay out all of [one's] cards on [the] table'.

title: wyłożyć wszystkie karty na stół


text: tänjt

title: tänjt


text:
އިހަވަންދިއްޕޮޅު

Etymology
From.

title: އިހަވަންދިއްޕޮޅު


text:
tänjning

Noun

 * 1) stretching, warping

title: tänjning


text: tänjningen

title: tänjningen


text: tänjningar

title: tänjningar


text: tänjningarna

title: tänjningarna


text: tänjnings

title: tänjnings


text: tänjningens

title: tänjningens


text: tänjningars

title: tänjningars


text: tänjningarnas

title: tänjningarnas


text:
시험관

Etymology
.

Noun

 * 1) test tube

title: 시험관


text: 試驗管

title: 試驗管


text:
töjning

Noun

 * 1) stretching

title: töjning


text:
ба̄йна

Etymology
Borrowed from.

Noun

 * 1) banya

title: ба̄йна


text: töjningen

title: töjningen


text: töjningar

title: töjningar


text: töjningarna

title: töjningarna


text: Category:sjd:Bathing

title: Category:sjd:Bathing


text: töjnings

title: töjnings


text: އިހަވަންދޫ

title: އިހަވަންދޫ


text: töjningens

title: töjningens


text: töjningars

title: töjningars


text: töjningarnas

title: töjningarnas


text:
ਪਰੀਖਿਆ ਨਾਲ਼ੀ

Noun

 * 1) test tube

title: ਪਰੀਖਿਆ ਨਾਲ਼ੀ


text:
طوقه‌لامق

Etymology
From.

Verb

 * 1)  to buckle up, to fasten with a buckle

title: طوقه‌لامق


text:
മുൻവിചാരം

Noun

 * 1) forethought

title: മുൻവിചാരം


text:
wykładnikowy

Etymology
From. .

title: wykładnikowy


text:
Template:eu-pr/documentation

This template generates the ===Pronunciation=== section of a Basque term, including the phonemic pronunciation, rhymes and hyphenation, as well as (if manually specified) audio files and homophones.

This template is intended to replace the use of along with, ,  and similar templates specifying auxiliary pronunciation information.

Respellings and handling of dialectal differences

 * Use the combinations  and   to break the palatalization of  and . This happens mostly in recent loanwords.
 * Use  or   when   or   form a rising diphthong. As before, this happens mostly in recent loanwords.
 * The digraph  returns  in Navarro-Lapurdian and  in Southern dialects (see ).
 * The digraph  returns  in Navarro-Lapurdian and  in Southern dialects (see ).

Value of

 * In general, four pronunciations will be generated: in Navarro-Lapurdian,  in Gipuzkoan,  in Navarrese and  in Biscayan. The following exceptions are handled automatically:
 * Loanwords ending in  are always pronounced with  in the South and  in the North.
 * Conjugated forms of containing the sequence   are pronounced with  in the South.
 * There are some words (such as the given name ) which are pronounced with a palatal by all speakers, these words are to be respelled with.

Parameters
The allowed parameters are as follows:

 * 1, 2, ...
 * Specify a line of pronunciation; see above.

 * rhyme
 * Specify one or more comma-separated rhymes that apply to all pronunciations and are displayed below all of them, without additional indentation. Inline modifiers can be specified, as for . Use this when there are multiple lines of pronunciations, to avoid additional indentation.

 * hyph
 * Specify one or more comma-separated hyphenations that apply to all pronunciations and are displayed below all of them, without additional indentation. Inline modifiers can be specified, as for . Use this when there are multiple lines of pronunciations, to avoid additional indentation.

 * hmp
 * Specify one or more comma-separated homophones that apply to all pronunciations and are displayed below all of them, without additional indentation. Inline modifiers can be specified, as for . Use this when there are multiple lines of pronunciations, to avoid additional indentation.

 * audio, audio2, ...
 * Specify one or more audio files that apply to all pronunciations and are displayed below all of them, without additional indentation. Inline modifiers can be specified, as for . (You cannot specify multiple comma-separated audio files in a single parameter, as audio filenames sometimes have embedded commas in them not followed by a space.) Use this when there are multiple lines of pronunciations, to avoid additional indentation.

 * pagename
 * Explicitly specify the pagename, for testing purposes and for use on documentation pages.

title: Template:eu-pr/documentation


text:
ਪਰੀਖਿਆ

Etymology
From. .

Noun

 * 1) test, examination
 * 2) trial, experiment
 * 3) ordeal

title: ਪਰੀਖਿਆ


text: Portnoo

title: Portnoo


text: ovilligaste

title: ovilligaste


text: ovilligast

title: ovilligast


text: ovillige

title: ovillige


text: ovilligt

title: ovilligt


text: ovilliga

title: ovilliga


text:
wykładniowy

Etymology
From. .

Adjective

 * 1)  legal interpretation

title: wykładniowy


text: ovilligare

title: ovilligare


text: oregerligare

title: oregerligare


text: oregerliga

title: oregerliga


text: oregerligt

title: oregerligt


text: oregerlige

title: oregerlige


text: oregerligast

title: oregerligast


text: oregerligaste

title: oregerligaste


text: Category:Rhymes:Basque/as̺un/6 syllables


text: Category:Rhymes:Basque/as̺un

title: Category:Rhymes:Basque/as̺un


text: Category:Rhymes:Basque

title: Category:Rhymes:Basque


text:
ਪਰਖ

Etymology
From. , a semi-learned borrowing.

Noun

 * 1) test, trial
 * 2) inspection, assay, examination

title: ਪਰਖ


text: Category:es:Hindu deities

title: Category:es:Hindu deities


text: Category:es:Hindu mythology

title: Category:es:Hindu mythology


text: Category:Rhymes:Basque/omen/3 syllables

title: Category:Rhymes:Basque/omen/3 syllables


text: Category:Rhymes:Basque/omen

title: Category:Rhymes:Basque/omen


text:
wykładowczy

Etymology
From. .

Adjective

 * 1)  lecturer

title: wykładowczy


text:
فشقیلق

Etymology
From.

Noun

 * 1) dunghill, a heap of dung, especially one for agricultural purposes

title: فشقیلق


text:
خالی کردن

Etymology
+

Verb

 * 1) to empty, deplete

title: خالی کردن


text:
ਪਰਖਣਾ

Etymology
From.

Verb

 * 1) to test, try, assess
 * 2) to examine, scrutinise, examine

title: ਪਰਖਣਾ


text:
മുന

Noun

 * 1) a sharp point

title: മുന


text: Category:Rhymes:Basque/ala/3 syllables

title: Category:Rhymes:Basque/ala/3 syllables


text: Category:Rhymes:Basque/ala

title: Category:Rhymes:Basque/ala


text:
2-3 tree

Noun

 * 1)  A tree data structure whose every node with children (internal node) has either two children and one data element, or three children and two data elements; a B-tree of order 3.

title: 2-3 tree


text: 2-4 tree

title: 2-4 tree


title: Template:R:pl:Trotz:1772


text:
2-3-4 tree

Noun

 * 1)  A tree data structure whose every node with children (internal node) has either two, three or four child nodes: a 2-node has one data element, and if internal has two child nodes; a 3-node has two data elements, and if internal has three child nodes; and a 4-node has three data elements, and if internal has four child nodes.

title: 2-3-4 tree


text: tuji

title: tuji


text:
B+ tree

Noun

 * 1)  An m-ary tree data structure with a variable but often large number of children per node. It can be viewed as a B-tree in which each node contains only keys (not key–value pairs), and to which an additional level is added at the bottom with linked leaves.

title: B+ tree


text:
wykładca

Etymology
From. .

Noun

 * 1)  explainer; commentator

title: wykładca


text:
વૈષ્ણવ

Etymology
.

Adjective

 * 1) relating or belonging to or coming from Vishnu.
 * 2) devoted to or consecrated to Vishnu.

Noun

 * 1) Vaishnava, a worshipper of Vishnu, a follower of Vaishnavism.

title: વૈષ્ણવ


text:
Talk:屲

Dialectal?
Is this a dialectal character? It looks like an ad-hoc ideogrammatic compound. WiktionariThrowaway (talk) 19:56, 27 June 2023 (UTC)

title: Talk:屲


text:
ਸਾਹਸ

Etymology
.

Noun

 * 1) courage, boldness, daring

title: ਸਾਹਸ


text: gwachi

title: gwachi


text:
bloc party

Etymology
.

Noun

 * 1) A non-ruling political party  that exists pro forma in what is de facto a one-party system, most notably in communist regimes.

Translations

 * Chinese:
 * Mandarin: 民主黨派, 花瓶黨
 * German: Blockpartei
 * Korean: 위성정당 (衛星政黨)

title: bloc party


text:
order statistic tree

Noun

 * 1)  A variant of the binary search tree (or more generally, a B-tree) that supports, in addition to insertion, lookup and deletion, the operations of Select (find the ith smallest element stored in the tree) and Rank (find the rank of element x in the tree, i.e. its index in the sorted list of elements of the tree).

title: order statistic tree


text: order statistic trees

title: order statistic trees


text: bloc parties

title: bloc parties


text: tichi

title: tichi


text: tīchi

title: tīchi


text: Category:Middle French terms derived from the Proto-Indo-European root *dʰewh₂-


text:
wykładka

Etymology
From. .

Noun

 * 1)  boiserie, panelling, underfelt, wall-to-wall carpet
 * 2)  part of a lock
 * 1)  part of a lock

title: wykładka


text:
ныгкешь

Etymology
Likely a word. Cognates include 🇨🇬 and 🇨🇬.

Noun

 * 1) pike

title: ныгкешь


text:
കൂർമ്മ

Adjective

 * 1) sharp intellect

title: കൂർമ്മ


text:
શૈવ

Etymology
.

Adjective

 * 1) relating to, belonging to, or sacred to Shiva

Noun

 * 1) Saivite, a worshipper of Shiva. A follower of Shaivism.

title: શૈવ


text:
കൂർമ്മം

Noun

 * 1) tortoise or turtle

title: കൂർമ്മം


text:
motvillighet

Noun

 * 1) reluctance

title: motvillighet


text: motvilligheten

title: motvilligheten


text: ufuyamatunchu

title: ufuyamatunchu


text: motvillighetens

title: motvillighetens


text: motvillighets

title: motvillighets


text:
ਦੁਨਾਲ਼ੀ

Adjective

 * 1) double-barreled

title: ਦੁਨਾਲ਼ੀ


text: Category:Rhymes:Basque/ama/2 syllables

title: Category:Rhymes:Basque/ama/2 syllables


text: Category:Rhymes:Basque/ama

title: Category:Rhymes:Basque/ama


text:
av ondo

Etymology
lit. 'of evil, [coming] from evil', from biblical parlance, including (KJV: “whatsoever is more than this comes of evil”).

Prepositional phrase

 * 1) a bad thing; harmful or reprehensible

title: av ondo


text:
मस्सा

Noun

 * 1) wart

title: मस्सा


text:
one-party system

Noun

 * 1) A political system in which only one political party has the right to form the government, usually based on the existing constitution.

Translations

 * Chinese:
 * Mandarin: ,
 * German: Einparteiensystem

title: one-party system


text: леништа

title: леништа


text:
wykładniczość

Etymology
From. .

Noun

 * 1)  exponentiality

title: wykładniczość


text:
قارغه بورون

Etymology
From +.

Noun

 * 1) aquiline nose, Roman nose, a nose with a hooked shape
 * 2) pliers, a pincer-like tool often used for bending things

title: قارغه بورون


text:
ਨਾਲ਼ਾ

Noun

 * 1) stream, brook, rivulet, ravine
 * 2) gutter, sewer

title: ਨਾਲ਼ਾ


text:
полуслеп

Adjective

 * 1) half-blind, sandblind, purblind

title: полуслеп


text:
wykładzik

Etymology
From. .

title: wykładzik


text: Category:Rhymes:Basque/ano/5 syllables

title: Category:Rhymes:Basque/ano/5 syllables


text: Category:Rhymes:Basque/ano

title: Category:Rhymes:Basque/ano


text: aga'

title: aga'


text:
hotel room

Noun

 * 1) A room at a hotel where a customer can spend the night.

Translations

 * Dutch:
 * Finnish:
 * French: chambre d'hôtel
 * German:
 * Hungarian:
 * Icelandic:
 * Italian: camera d'albergo, stanza d'albergo
 * Norwegian:
 * Bokmål: hotellrom
 * Nynorsk: hotellrom
 * Polish: pokój hotelowy
 * Swedish:

title: hotel room


text: DFF

title: DFF


text: toshin

title: toshin


text: Category:Rhymes:Basque/erau̯ts̻/2 syllables


text:
Shangli

Etymology
From the.

Translations

 * Chinese:
 * Mandarin: 上栗

title: Shangli


text: Category:Rhymes:Basque/erau̯ts̻

title: Category:Rhymes:Basque/erau̯ts̻


text: Category:Rhymes:Basque/erau̯ts̺/2 syllables


text: Category:Rhymes:Basque/erau̯ts̺

title: Category:Rhymes:Basque/erau̯ts̺


text: agar-ari

title: agar-ari


text: nagar-ari

title: nagar-ari


text: agarinto

title: agarinto


text:
deedlee ball

Noun

 * 1) A small decorative ball made of yarn.

title: deedlee ball


text: SBZ

title: SBZ


text: deedlee balls

title: deedlee balls


text: deedly ball

title: deedly ball


text: deedly balls

title: deedly balls


text: Category:Rhymes:Basque/es̻ko/4 syllables


text: Category:Rhymes:Basque/es̻ko

title: Category:Rhymes:Basque/es̻ko


text: Category:Rhymes:Basque/es̺ko/4 syllables


text: Category:Rhymes:Basque/es̺ko

title: Category:Rhymes:Basque/es̺ko


text:
Pingxiang

Etymology 1
From the romanization of the.

Translations

 * Chinese:
 * Mandarin:

Etymology 2
From the romanization of the.

Translations

 * Chinese:
 * Mandarin:

title: Pingxiang


text: Category:Rhymes:Basque/is̻ki/3 syllables


text:
ਨਾੜੂ

Noun

 * 1) umbilical cord

title: ਨਾੜੂ


text: Category:Rhymes:Basque/is̻ki

title: Category:Rhymes:Basque/is̻ki


text: Category:Rhymes:Basque/is̺ki/3 syllables


text: Category:Rhymes:Basque/is̺ki

title: Category:Rhymes:Basque/is̺ki


text: Category:Rhymes:Basque/ia/5 syllables

title: Category:Rhymes:Basque/ia/5 syllables


text:
dernier en date

Adjective

 * 1) latest most recent

title: dernier en date


text: Category:Rhymes:Basque/ia

title: Category:Rhymes:Basque/ia


text:
premier en date

Adjective

 * 1) earliest

title: premier en date


text: Category:Rhymes:Basque/olik/3 syllables

title: Category:Rhymes:Basque/olik/3 syllables


text: Category:Rhymes:Basque/olik

title: Category:Rhymes:Basque/olik


text: Category:Rhymes:Basque/ucun/2 syllables

title: Category:Rhymes:Basque/ucun/2 syllables


text: Category:Rhymes:Basque/ucun

title: Category:Rhymes:Basque/ucun


text: zakura

title: zakura


text: Category:Rhymes:Basque/abi/2 syllables

title: Category:Rhymes:Basque/abi/2 syllables


text: Category:Rhymes:Basque/abi

title: Category:Rhymes:Basque/abi


text:
User:Stegotyranno

.

title: User:Stegotyranno


text:
ha ont av

Verb

 * 1) to suffer harm from

title: ha ont av


text:
цэ̄ркав

Etymology
Borrowed from, compare 🇨🇬.

Noun

 * 1) church

title: цэ̄ркав


text: Category:Rhymes:Basque/uʃi/2 syllables

title: Category:Rhymes:Basque/uʃi/2 syllables


text: Category:Rhymes:Basque/uʃi

title: Category:Rhymes:Basque/uʃi


text: har ont av

title: har ont av


text: hade ont av

title: hade ont av


text: Category:Rhymes:Basque/eɾa/4 syllables

title: Category:Rhymes:Basque/eɾa/4 syllables


text: haft ont av

title: haft ont av


text: Category:Rhymes:Basque/eɾa

title: Category:Rhymes:Basque/eɾa


text: atabichi

title: atabichi


text: Category:Rhymes:Basque/axe/3 syllables

title: Category:Rhymes:Basque/axe/3 syllables


text: Category:Rhymes:Basque/axe

title: Category:Rhymes:Basque/axe


text: parsnip webworm

title: parsnip webworm


text: Category:Rhymes:Basque/aʒe/3 syllables

title: Category:Rhymes:Basque/aʒe/3 syllables


text: parsnip webworms

title: parsnip webworms


text: Category:Rhymes:Basque/aʒe

title: Category:Rhymes:Basque/aʒe


text:
Template:RQ:pi:Dhtm/documentation

Usage
This template may be used in Wiktionary entry pages to source Pali quotes taken from Andersen and Smith's edition of the Pali Dhatumañjūsā, a collection of Pali roots along with their meanings. Note the roots themselves, which occur as bare stems, are mere mentions as opposed to examples of usage.

Parameters
The template takes the following parameters:

 * 1 or page, or pages – the page number(s) quoted from. When quoting a range of pages with pages, separate the first and last pages of the range with an en dash, like this: 110–111.
 * 2 or passage – a passage to be quoted from the work.
 * 3 or transliteration – a transliteration of the passage into the Latin alphabet. This should never be needed, but is required in the interface for compatibility with Module:RQ:pi:Sai Kam Mong, which is invoked by RQ:pi:Dhtm quote.
 * 4 or translation – a translation of the passage into English
 * brackets – use on to surround a quotation with brackets. This indicates that the quotation either contains a mere mention of a term (for example, "some people find the word manoeuvre hard to spell") rather than an actual use of it (for example, "we need to manoeuvre carefully to avoid causing upset"), or does not provide an actual instance of a term but provides information about related terms.

Examples

 * Wikitext:
 * RQ:pi:Dhtm; or
 * RQ:pi:Dhtm
 * Result:

title: Template:RQ:pi:Dhtm/documentation


text:
parsnip moth

Noun

 * 1) The moth.

title: parsnip moth


text: parsnip moths

title: parsnip moths


text:
نزله

Etymology
.

Noun

 * 1) cold, a common viral illness, usually with congestion of the nasal passages and sometimes fever

title: نزله


text: Category:Rhymes:Basque/ela/3 syllables

title: Category:Rhymes:Basque/ela/3 syllables


text: Category:Rhymes:Basque/ela

title: Category:Rhymes:Basque/ela


text: Category:Rhymes:Basque/oan/3 syllables

title: Category:Rhymes:Basque/oan/3 syllables


text: Category:Rhymes:Basque/oan

title: Category:Rhymes:Basque/oan


text: Category:Rhymes:Basque/oa/4 syllables

title: Category:Rhymes:Basque/oa/4 syllables


text: Category:Rhymes:Basque/oa

title: Category:Rhymes:Basque/oa


text: Category:Rhymes:Basque/ake/4 syllables

title: Category:Rhymes:Basque/ake/4 syllables


text: Category:Rhymes:Basque/ake

title: Category:Rhymes:Basque/ake


text: Category:Rhymes:Basque/een/5 syllables

title: Category:Rhymes:Basque/een/5 syllables


text: Category:Rhymes:Basque/een

title: Category:Rhymes:Basque/een


text:
pac boot

Noun

 * 1) A type of winter boot with a waterproof rubber base enveloping the sides.

title: pac boot


text: pac boots

title: pac boots


text: Category:Rhymes:Basque/oa/3 syllables

title: Category:Rhymes:Basque/oa/3 syllables


text: Category:Rhymes:Basque/oas̺/3 syllables

title: Category:Rhymes:Basque/oas̺/3 syllables


text: Category:Rhymes:Basque/oas̺

title: Category:Rhymes:Basque/oas̺


text: Category:Rhymes:Basque/oas̻/3 syllables

title: Category:Rhymes:Basque/oas̻/3 syllables


text: Category:Rhymes:Basque/oas̻

title: Category:Rhymes:Basque/oas̻


text:
Handschar

Etymology 1
From, in part through.

Noun

 * 1) khanjar oriental dagger

Etymology 2
From, from the Ottoman word in etymology 1. Feminine gender after. Sometimes reinterpreted by folk etymology as 🇰🇲 (literally “hand troop”, further interpretable as “auxiliary troop” or the like).

Proper noun

 * 1)  Waffen-SS mountain infantry division made up of Balkan Muslims

title: Handschar


text: Category:Rhymes:Basque/as̻ke/4 syllables


text: Category:Rhymes:Basque/as̻ke

title: Category:Rhymes:Basque/as̻ke


text: Category:Rhymes:Basque/as̺ke/4 syllables


text: Category:Rhymes:Basque/as̺ke

title: Category:Rhymes:Basque/as̺ke


text: Category:Rhymes:Basque/oas̺/4 syllables

title: Category:Rhymes:Basque/oas̺/4 syllables


text: Category:Rhymes:Basque/oas̻/4 syllables

title: Category:Rhymes:Basque/oas̻/4 syllables


text: Category:Rhymes:Basque/as̺en/4 syllables


text: Category:Rhymes:Basque/as̺en

title: Category:Rhymes:Basque/as̺en


text: Category:Rhymes:Basque/as̻en/4 syllables


text:
Australies

Etymology
From.

title: Australies


text: Category:Rhymes:Basque/as̻en

title: Category:Rhymes:Basque/as̻en


text: Australiese

title: Australiese


text: Category:Rhymes:Basque/ako/3 syllables

title: Category:Rhymes:Basque/ako/3 syllables


text: Category:Rhymes:Basque/ako

title: Category:Rhymes:Basque/ako


text:
абынҳәа

Noun

 * 1) wild boar

title: абынҳәа


text: Category:Rhymes:Basque/apa/2 syllables

title: Category:Rhymes:Basque/apa/2 syllables


text: Category:Rhymes:Basque/apa

title: Category:Rhymes:Basque/apa


text: Category:Rhymes:Basque/ime/3 syllables

title: Category:Rhymes:Basque/ime/3 syllables


text: Category:Rhymes:Basque/ime

title: Category:Rhymes:Basque/ime


text:
ъхъ

Etymology
Maybe from English. Compare with, which is more convincingly native.

Interjection

 * 1) uh-huh expression of agreement or approval; affirmative

title: ъхъ


text: achisan

title: achisan


text: Category:Rhymes:Basque/an/1 syllable

title: Category:Rhymes:Basque/an/1 syllable


text: Category:Rhymes:Basque/an

title: Category:Rhymes:Basque/an


text: Category:Rhymes:Basque/ai̯ɾu/3 syllables


text: Category:Rhymes:Basque/ai̯ɾu

title: Category:Rhymes:Basque/ai̯ɾu


text:
Australianer

Etymology
.

title: Australianer


text:
конфліктувати

Etymology
From. Compare 🇨🇬, 🇨🇬, 🇨🇬.

Verb

 * 1) to clash, to come into conflict
 * 2)  to conflict
 * 1)  to conflict

title: конфліктувати


text: Australianers

title: Australianers


text:
pacs

Etymology
.

Noun

 * 1)  contract of civil partnership, contract of civil union

title: pacs


text:
ha ont om

Verb

 * 1) to be short on/of (have (too) little of something)

title: ha ont om


text:
choscar

Etymology
, originally, from *klVsk- "knock; wink".

Verb

 * 1) to wink

title: choscar


text: har ont om

title: har ont om


text: hade ont om

title: hade ont om


text: haft ont om

title: haft ont om


text:
аҩын

Noun

 * 1) buffalo-inseminator

title: аҩын


text: Category:Rhymes:Basque/ai̯ɾu/2 syllables


text:
алагажә

Noun

 * 1) yellow corn

title: алагажә


text: Category:Rhymes:Basque/eto/3 syllables

title: Category:Rhymes:Basque/eto/3 syllables


text: Category:Rhymes:Basque/eto

title: Category:Rhymes:Basque/eto


text:
ворогувати

Etymology
From. Compare 🇨🇬, 🇨🇬.

Verb

 * 1)  to feud, to be at daggers drawn, to be at loggerheads

title: ворогувати


text: parshioth

title: parshioth


text: Category:Rhymes:Basque/ito/3 syllables

title: Category:Rhymes:Basque/ito/3 syllables


text: Category:Rhymes:Basque/ito

title: Category:Rhymes:Basque/ito


text:
takkiain

Etymology
From. Cognates include 🇨🇬 and 🇨🇬.

Noun

 * 1) burdock

title: takkiain


text: Category:Rhymes:Basque/ints̻a/5 syllables


text: Category:Rhymes:Basque/ints̻a

title: Category:Rhymes:Basque/ints̻a


text: parsil

title: parsil


text: parsleying

title: parsleying


text: Category:Rhymes:Basque/ia/7 syllables

title: Category:Rhymes:Basque/ia/7 syllables


text:
jesust

Etymology
, presumably from.

Interjection

 * 1)  An exclamation, particularly used to express excitement or exasperation.

title: jesust


text: Category:Rhymes:Basque/eɡo/5 syllables

title: Category:Rhymes:Basque/eɡo/5 syllables


text: Category:Rhymes:Basque/eɡo

title: Category:Rhymes:Basque/eɡo


text: Category:Rhymes:Portuguese/upulu

title: Category:Rhymes:Portuguese/upulu


text: Category:Rhymes:Portuguese/upulu/3 syllables


text: ворогуючий

title: ворогуючий


text:
vara ont om

Verb

 * 1) to be (too) little of (something), to be a lack of (something)

title: vara ont om


text: Category:Rhymes:Basque/uɲo/4 syllables

title: Category:Rhymes:Basque/uɲo/4 syllables


text: Category:Rhymes:Portuguese/upulu/4 syllables


text: Category:Rhymes:Basque/uɲo

title: Category:Rhymes:Basque/uɲo


text: Category:Rhymes:Basque/ale/6 syllables

title: Category:Rhymes:Basque/ale/6 syllables


text: Category:Rhymes:Basque/ale

title: Category:Rhymes:Basque/ale


text: Category:Rhymes:Basque/endu/5 syllables

title: Category:Rhymes:Basque/endu/5 syllables


text: är ont om

title: är ont om


text: Category:Rhymes:Basque/endu

title: Category:Rhymes:Basque/endu


text:
Australiaans

Etymology
.

title: Australiaans


text: var ont om

title: var ont om


text: Category:Rhymes:Basque/ean/4 syllables

title: Category:Rhymes:Basque/ean/4 syllables


text: Category:Rhymes:Basque/ean

title: Category:Rhymes:Basque/ean


text: varit ont om

title: varit ont om


text: Category:Rhymes:Basque/os̺ki/5 syllables


text: Category:Rhymes:Basque/os̺ki

title: Category:Rhymes:Basque/os̺ki


text: Australiaanse

title: Australiaanse


text:
R-tree

Etymology
The R stands for.

Noun

 * 1)  A kind of tree data structure used to group objects by nearness of location, representing them by their minimum bounding rectangles in the next higher level of the tree.

title: R-tree


text: R-trees

title: R-trees


text: Category:Rhymes:Basque/is̺mo/6 syllables


text: Category:Rhymes:Basque/is̺mo

title: Category:Rhymes:Basque/is̺mo


text: Category:Rhymes:Basque/iʎe/5 syllables

title: Category:Rhymes:Basque/iʎe/5 syllables


text: Category:Rhymes:Basque/iʎe

title: Category:Rhymes:Basque/iʎe


text: Category:Rhymes:Basque/ile/5 syllables

title: Category:Rhymes:Basque/ile/5 syllables


text: Category:Rhymes:Basque/ile

title: Category:Rhymes:Basque/ile


text: Category:Rhymes:Basque/aɡin/4 syllables

title: Category:Rhymes:Basque/aɡin/4 syllables


text: Category:Rhymes:Basque/aɡin

title: Category:Rhymes:Basque/aɡin


text: Category:Rhymes:Basque/aɾi/5 syllables

title: Category:Rhymes:Basque/aɾi/5 syllables


text: Category:Rhymes:Basque/aɾi

title: Category:Rhymes:Basque/aɾi


text: Category:Rhymes:Basque/eta/4 syllables

title: Category:Rhymes:Basque/eta/4 syllables


text: Category:Rhymes:Basque/eta

title: Category:Rhymes:Basque/eta


text: Category:Rhymes:Basque/aɾi/4 syllables

title: Category:Rhymes:Basque/aɾi/4 syllables


text:
Talk:正夢

Etymology references?
Dear @Eirikr, I see you posted etymologies for this term a good while ago now, but I was wondering what text you were going by when you noted all those dictionaries as sources for the etymology being a compound, because although it seems quite obvious that the term is just a transparent compound, I don't see it myself explicitly stated when I check those sources that the term is such; no mention is made altogether of the word's etymology, as is typical for Japanese dictionaries, so I am just curious from what text you derived the original citations. Kiril kovachev (talk) 21:19, 27 June 2023 (UTC)

 * Hello @Kiril --
 * Good question. Let's look at an example of the dictionary layout.  Here is the relevant page at Kotobank.  This page shows us the Kokugo Dai Jiten and Daijisen entries.  Both list the headword with the following format:
 * まさ‐ゆめ【正夢】
 * That hyphen between まさ and ゆめ indicates a break between components. For us as non-native speakers, we can look up both  and  and see that these also have their own entries.  That, plus the transparency of the definitions of both the individual constituent terms and the combined masayume, makes it clear that this is a compound term.  A native speaker would recognize both まさ and ゆめ as words on their own, and between this cultural context and the notation conventions, I suspect that this is why dictionaries tend not to bother to state in so many words that this is a compound.
 * HTH! ‑‑ Eiríkr Útlendi │Tala við mig 22:41, 27 June 2023 (UTC)
 * I see, I wondered what the meaning of those hyphens was. Is that to say then that headwords in those dictionaries split up like that indicates the word is a compound, or affix, etc.—in other words made of several components/morphemes? This will definitely be a good reference, anyway, for future editing, so thanks very much for your prompt and helpful response! @Eirikr Kiril kovachev (talk) 23:24, 27 June 2023 (UTC)
 * @Kiril, yes, that's my understanding -- that the hyphens (or sometimes spaces) in headword listings in many dictionaries indicate compound boundaries. We can see that same notation here in さくら‐にく【桜肉】 in the Kotobank version of the KDJ, or here in ふな‐びと【船人／舟人】 in the Weblio version of Daijisen, for instance.
 * Cheers! ‑‑ Eiríkr Útlendi │Tala við mig 06:23, 28 June 2023 (UTC)
 * @Kiril, Weblio includes the usage notes from the Daijisen publication. See note #5 here, which explains the use of the hyphen to indicate the boundaries between parts of a compound.  HTH! ‑‑ Eiríkr Útlendi │Tala við mig 06:27, 28 June 2023 (UTC)
 * Oh, perfect, thank you for this expansion, that's excellent to be able to confirm our suspicion was correct. Thanks again, @Eirikr! Kiril kovachev (talk) 12:51, 28 June 2023 (UTC)
 * Happy to help! FWIW, my printed paper edition of the 新明解 uses whitespace between compound components, instead of hyphens.  The online digitized version at Sakura Paris doesn't do that -- possibly a data conversion issue?  Anyway, ご参考に.  (^^) ‑‑ Eiríkr Útlendi │Tala við mig 18:30, 28 June 2023 (UTC)

title: Talk:正夢


text: Category:Rhymes:Basque/itu/5 syllables

title: Category:Rhymes:Basque/itu/5 syllables


text: Category:Rhymes:Basque/itu

title: Category:Rhymes:Basque/itu


text: full rhymes

title: full rhymes


text: Category:Rhymes:Basque/ako/7 syllables

title: Category:Rhymes:Basque/ako/7 syllables


text:
tie in with

Verb

 * 1)  To become associated with (a person or group of people); to connect with.
 * 2)  To be related or relevant to.
 * 1)  To be related or relevant to.
 * 1)  To be related or relevant to.

title: tie in with


text: ties in with

title: ties in with


text: tying in with

title: tying in with


text: tied in with

title: tied in with


text: Category:af:Places in Fiji

title: Category:af:Places in Fiji


text: Category:af:Cities in Fiji

title: Category:af:Cities in Fiji


text: Category:af:Cities in Australia

title: Category:af:Cities in Australia


text: Category:Rhymes:Basque/as̺un/5 syllables


text: Category:Rhymes:Basque/ia/6 syllables

title: Category:Rhymes:Basque/ia/6 syllables


text: Category:Rhymes:Basque/ara/4 syllables

title: Category:Rhymes:Basque/ara/4 syllables


text: Category:Rhymes:Basque/ara

title: Category:Rhymes:Basque/ara


text:
partrick

Noun

 * 1) partridge

title: partrick


text: Category:Rhymes:Basque/edo/3 syllables

title: Category:Rhymes:Basque/edo/3 syllables


text: Category:Rhymes:Basque/edo

title: Category:Rhymes:Basque/edo


text: Category:Rhymes:Basque/ibar/3 syllables

title: Category:Rhymes:Basque/ibar/3 syllables


text: Category:Rhymes:Basque/ibar

title: Category:Rhymes:Basque/ibar


text: Category:Rhymes:Basque/arda/3 syllables

title: Category:Rhymes:Basque/arda/3 syllables


text: Category:Rhymes:Basque/arda

title: Category:Rhymes:Basque/arda


text:
ukontelki

Etymology
From.

Noun

 * 1) stickseed

title: ukontelki


text: Category:af:Places in New South Wales

title: Category:af:Places in New South Wales


text: Category:af:State capitals of Australia

title: Category:af:State capitals of Australia


text: Category:af:Cities in New South Wales

title: Category:af:Cities in New South Wales


text: Category:af:State capitals

title: Category:af:State capitals


text: Category:af:New South Wales

title: Category:af:New South Wales


text:
ਸੀਮਾ

Etymology
.

Noun

 * 1) boundary, border, frontier
 * 2) limit, extent, periphery
 * 3) precincts, confines
 * 4) scope, range

title: ਸੀਮਾ


text: Category:af:Places in Papua New Guinea

title: Category:af:Places in Papua New Guinea


text: Category:af:Cities in Papua New Guinea

title: Category:af:Cities in Papua New Guinea


text:
kokkain

Etymology
From.

title: kokkain


text: Template:tl-pr

title: Template:tl-pr


text:
നീറുക

Verb

 * 1) To smart, hurt or pain
 * 2)  to sorrow, grieve
 * 1)  to sorrow, grieve

title: നീറുക


text: passemeasure

title: passemeasure


text: passemeasures

title: passemeasures


text:
ша̄бп

Etymology
From 🇨🇬, likely of origin. Cognate with 🇨🇬 and 🇨🇬.

Noun

 * 1) whitefish

title: ша̄бп


text: omituisenamme

title: omituisenamme


text: omituisinamme

title: omituisinamme


text: omituiseksemme

title: omituiseksemme


text: omituisiksemme

title: omituisiksemme


text:
ਮਰਯਾਦਾ

Etymology
.

Noun

 * 1) custom, convention, tradition

title: ਮਰਯਾਦਾ


text: Category:af:Sydney

title: Category:af:Sydney


text:
Sydneyer

Etymology
From.

title: Sydneyer


text: Sydneyers

title: Sydneyers


text:
pasanggrahan

Etymology
From

Noun

 * 1)  A resthouse in Indonesia.

Etymology
Reconstructed as

Noun

 * 1) Nonstandard form of persanggrahan.
 * 1) Nonstandard form of persanggrahan.

Etymology
.

Noun

 * 1) A resthouse; guesthouse

title: pasanggrahan


text: pasanggrahans

title: pasanggrahans


text:
Sydneys

Etymology
From.

title: Sydneys


text: Sydneyse

title: Sydneyse


text:
cereda

Etymology
Borrowed from.

Noun

 * 1) beggartick

title: cereda


text:
നീറ്റൽ

Noun

 * 1) paining, stinging or hurting from an open or healing wound

title: നീറ്റൽ