<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://baripedia.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ALinguistique</id>
	<title>Module:Linguistique - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://baripedia.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ALinguistique"/>
	<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Linguistique&amp;action=history"/>
	<updated>2026-05-18T11:05:56Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.38.6</generator>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Linguistique&amp;diff=30868&amp;oldid=prev</id>
		<title>Arthur : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Linguistique&amp;diff=30868&amp;oldid=prev"/>
		<updated>2016-01-27T20:14:04Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Ne fonctionne qu'en français. Si besoin est, on peut s'inspirer de [[wikidata:Module:Linguistic]] pour ajouter d'autres langues.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local lang = 'fr'&lt;br /&gt;
&lt;br /&gt;
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'&lt;br /&gt;
&lt;br /&gt;
-- i18n&lt;br /&gt;
local wordor = ' ou '&lt;br /&gt;
local wordand = ' et '&lt;br /&gt;
local comma = ', '&lt;br /&gt;
local fullstop = '. '&lt;br /&gt;
local wordsep = ' '&lt;br /&gt;
&lt;br /&gt;
local function isin(str, pattern)&lt;br /&gt;
	if str and pattern and mw.ustring.find(str, pattern, 1, true ) then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function processgender(str)&lt;br /&gt;
	if (str == 'f') or (str == 'fem') or (str == 'feminine') then &lt;br /&gt;
		return 'feminine'&lt;br /&gt;
	elseif (str == 'n') or (str == 'neutral') then &lt;br /&gt;
		return 'neutral'&lt;br /&gt;
	else&lt;br /&gt;
		return 'masculine'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function processnumber(str)&lt;br /&gt;
	if (str == 'p') or (str == 'plural') then&lt;br /&gt;
		return 'plural'&lt;br /&gt;
	else &lt;br /&gt;
		return 'singular'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.vowelfirst (str)&lt;br /&gt;
	if str and #str &amp;gt; 0 then return isin(vowels, mw.ustring.lower(mw.ustring.sub(str, 1, 1))) end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.inparentheses(str, lang, space)&lt;br /&gt;
	if (not str) or str == '' then&lt;br /&gt;
		return str&lt;br /&gt;
	end&lt;br /&gt;
	str = '(' .. str .. ')'&lt;br /&gt;
	if not space then&lt;br /&gt;
		space = '&amp;amp;#32;'&lt;br /&gt;
	end&lt;br /&gt;
	return space .. str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.of(word, gender, number, determiner, raw) &lt;br /&gt;
	if not raw then &lt;br /&gt;
		raw = word&lt;br /&gt;
	end&lt;br /&gt;
	gender = processgender(gender)&lt;br /&gt;
	number = processnumber(number)&lt;br /&gt;
	local vowel = p.vowelfirst(raw)&lt;br /&gt;
	local feminine = (gender== 'feminine')&lt;br /&gt;
	-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -&amp;gt; 'italie'&lt;br /&gt;
	-- any way to automate this ?&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	if number == 'plural' then&lt;br /&gt;
		return 'des ' .. word&lt;br /&gt;
	elseif determiner and (determiner ~= '-') then-- de la, du // determiner ~= '-' veut dire renseigné comme vide&lt;br /&gt;
		if vowel then&lt;br /&gt;
			return 'de l’' .. word&lt;br /&gt;
		elseif feminine then&lt;br /&gt;
			return 'de la ' .. word&lt;br /&gt;
		else&lt;br /&gt;
			return 'du ' .. word&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if vowel then&lt;br /&gt;
			return 'd’' .. word&lt;br /&gt;
		else&lt;br /&gt;
			return 'de ' .. word&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.noungroup(noun, adj)&lt;br /&gt;
	if not noun or noun == '' then &lt;br /&gt;
		return nil -- not '' so that it is not counted as a string by mw.listToText&lt;br /&gt;
	end&lt;br /&gt;
	return noun .. wordsep(lang) .. adj -- lorsque c'est en français&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.quickconj(args, conjtype)&lt;br /&gt;
	local separator, conjunction&lt;br /&gt;
	&lt;br /&gt;
	-- cas où separator ~= conj&lt;br /&gt;
	if (not conjtype) or conjtype == 'and' then&lt;br /&gt;
		separator, conjunction = comma, wordand&lt;br /&gt;
	elseif conjtype == 'or' then&lt;br /&gt;
		separator, conjunction = comma, wordor&lt;br /&gt;
	end&lt;br /&gt;
	if (separator and conjunction) then&lt;br /&gt;
		return  mw.text.listToText(args, separator, conjunction)&lt;br /&gt;
	end&lt;br /&gt;
	-- autres cas&lt;br /&gt;
	if conjtype == 'comma' then&lt;br /&gt;
		separator = comma&lt;br /&gt;
	elseif conjtype == 'new line' then&lt;br /&gt;
		separator = '&amp;lt;br /&amp;gt;'&lt;br /&gt;
	else&lt;br /&gt;
		separator = conjtype&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(args, separator)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.conj(args, conjtype)&lt;br /&gt;
	if (not args) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local newargs = {}&lt;br /&gt;
	for i, j in pairs(args) do&lt;br /&gt;
		if type(j) ~= 'nil' then&lt;br /&gt;
			table.insert(newargs, j)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #newargs == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return p.quickconj(newargs, conjtype, lang)&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.conjfromWiki(frame)&lt;br /&gt;
	args = frame.args&lt;br /&gt;
	if not args or not args[1] then&lt;br /&gt;
		args = mw.getCurrentFrame():getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local conjtype = args.type&lt;br /&gt;
	newargs = {}  -- transform args metatable into a table so it can be concetenated&lt;br /&gt;
	for i, j in pairs(args) do&lt;br /&gt;
			if type(i) == 'number' then&lt;br /&gt;
				j = mw.text.trim(j)&lt;br /&gt;
				if j ~= '' then&lt;br /&gt;
					table.insert(newargs, j)&lt;br /&gt;
				end&lt;br /&gt;
			else &lt;br /&gt;
				if i ~= 'type' and i ~= 'lang' then &lt;br /&gt;
					return error('bad parameter in template:Conj:' .. i), '[[Category:Pages with incorrect template usage/Conj|A]]'&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
	end&lt;br /&gt;
	return p.conj(newargs, conjtype)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keepcomplement(oldstr, firstword) -- par exemple &amp;quot;gare de Lyon&amp;quot; -&amp;gt; &amp;quot;Lyon&amp;quot;&lt;br /&gt;
	local str = mw.ustring.gsub(oldstr, '^' .. firstword .. ' ', '')&lt;br /&gt;
	if str == oldstr then&lt;br /&gt;
		return oldstr&lt;br /&gt;
	end&lt;br /&gt;
	local throwable = {&amp;quot;de la &amp;quot;, &amp;quot;de l'&amp;quot;, &amp;quot;des &amp;quot;, &amp;quot;de l’&amp;quot;, &amp;quot;de &amp;quot;, &amp;quot;d’ &amp;quot;, &amp;quot;d'&amp;quot;, &amp;quot;du &amp;quot;}&lt;br /&gt;
	for i, j in pairs(throwable) do&lt;br /&gt;
		if mw.ustring.sub(str, 1, #j) == j then&lt;br /&gt;
			str = mw.ustring.gsub(str, j, &amp;quot;&amp;quot;)&lt;br /&gt;
			return str&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.toascii(str)&lt;br /&gt;
	local convtable = mw.loadData(&amp;quot;Module:Linguistique/ASCII&amp;quot;)&lt;br /&gt;
	for i, j in pairs(convtable) do -- manquent les majuscules&lt;br /&gt;
		str = mw.ustring.gsub(str, '[' .. i .. ']', j)&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Linguistique&amp;diff=28293&amp;oldid=prev</id>
		<title>Arthur : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Linguistique&amp;diff=28293&amp;oldid=prev"/>
		<updated>2015-11-09T20:49:18Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Ne fonctionne qu'en français. Si besoin est, on peut s'inspirer de [[wikidata:Module:Linguistic]] pour ajouter d'autres langues.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local lang = 'fr'&lt;br /&gt;
&lt;br /&gt;
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'&lt;br /&gt;
&lt;br /&gt;
-- i18n&lt;br /&gt;
local wordor = ' ou '&lt;br /&gt;
local wordand = ' et '&lt;br /&gt;
local comma = ', '&lt;br /&gt;
local fullstop = '. '&lt;br /&gt;
local wordsep = ' '&lt;br /&gt;
&lt;br /&gt;
local function isin(str, pattern)&lt;br /&gt;
	if str and pattern and mw.ustring.find(str, pattern, 1, true ) then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function processgender(str)&lt;br /&gt;
	if (str == 'f') or (str == 'fem') or (str == 'feminine') then &lt;br /&gt;
		return 'feminine'&lt;br /&gt;
	elseif (str == 'n') or (str == 'neutral') then &lt;br /&gt;
		return 'neutral'&lt;br /&gt;
	else&lt;br /&gt;
		return 'masculine'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function processnumber(str)&lt;br /&gt;
	if (str == 'p') or (str == 'plural') then&lt;br /&gt;
		return 'plural'&lt;br /&gt;
	else &lt;br /&gt;
		return 'singular'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.vowelfirst (str)&lt;br /&gt;
	if str and #str &amp;gt; 0 then return isin(vowels, mw.ustring.lower(mw.ustring.sub(str, 1, 1))) end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.inparentheses(str, lang, space)&lt;br /&gt;
	if (not str) or str == '' then&lt;br /&gt;
		return str&lt;br /&gt;
	end&lt;br /&gt;
	str = '(' .. str .. ')'&lt;br /&gt;
	if not space then&lt;br /&gt;
		space = '&amp;amp;#32;'&lt;br /&gt;
	end&lt;br /&gt;
	return space .. str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.of(word, gender, number, determiner, raw) &lt;br /&gt;
	if not raw then &lt;br /&gt;
		raw = word&lt;br /&gt;
	end&lt;br /&gt;
	gender = processgender(gender)&lt;br /&gt;
	number = processnumber(number)&lt;br /&gt;
	local vowel = p.vowelfirst(raw)&lt;br /&gt;
	local feminine = (gender== 'feminine')&lt;br /&gt;
	-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -&amp;gt; 'italie'&lt;br /&gt;
	-- any way to automate this ?&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	if number == 'plural' then&lt;br /&gt;
		return 'des ' .. word&lt;br /&gt;
	elseif determiner and (determiner ~= '-') then-- de la, du // determiner ~= '-' veut dire renseigné comme vide&lt;br /&gt;
		if vowel then&lt;br /&gt;
			return 'de l’' .. word&lt;br /&gt;
		elseif feminine then&lt;br /&gt;
			return 'de la ' .. word&lt;br /&gt;
		else&lt;br /&gt;
			return 'du ' .. word&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if vowel then&lt;br /&gt;
			return 'd’' .. word&lt;br /&gt;
		else&lt;br /&gt;
			return 'de ' .. word&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.noungroup(noun, adj)&lt;br /&gt;
	if not noun or noun == '' then &lt;br /&gt;
		return nil -- not '' so that it is not counted as a string by mw.listToText&lt;br /&gt;
	end&lt;br /&gt;
	return noun .. wordsep(lang) .. adj -- lorsque c'est en français&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.quickconj(args, conjtype)&lt;br /&gt;
	local separator, conjunction&lt;br /&gt;
	&lt;br /&gt;
	-- cas où separator ~= conj&lt;br /&gt;
	if (not conjtype) or conjtype == 'and' then&lt;br /&gt;
		separator, conjunction = comma, wordand&lt;br /&gt;
	elseif conjtype == 'or' then&lt;br /&gt;
		separator, conjunction = comma, wordor&lt;br /&gt;
	end&lt;br /&gt;
	if (separator and conjunction) then&lt;br /&gt;
		return  mw.text.listToText(args, separator, conjunction)&lt;br /&gt;
	end&lt;br /&gt;
	-- autres cas&lt;br /&gt;
	if conjtype == 'comma' then&lt;br /&gt;
		separator = comma&lt;br /&gt;
	elseif conjtype == 'new line' then&lt;br /&gt;
		separator = '&amp;lt;br /&amp;gt;'&lt;br /&gt;
	else&lt;br /&gt;
		separator = conjtype&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(args, separator)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.conj(args, conjtype)&lt;br /&gt;
	if (not args) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local newargs = {}&lt;br /&gt;
	for i, j in pairs(args) do&lt;br /&gt;
		if type(j) ~= 'nil' then&lt;br /&gt;
			table.insert(newargs, j)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #newargs == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return p.quickconj(newargs, conjtype, lang)&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.conjfromWiki(frame)&lt;br /&gt;
	args = frame.args&lt;br /&gt;
	if not args or not args[1] then&lt;br /&gt;
		args = mw.getCurrentFrame():getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local conjtype = args.type&lt;br /&gt;
	newargs = {}  -- transform args metatable into a table so it can be concetenated&lt;br /&gt;
	for i, j in pairs(args) do&lt;br /&gt;
			if type(i) == 'number' then&lt;br /&gt;
				j = mw.text.trim(j)&lt;br /&gt;
				if j ~= '' then&lt;br /&gt;
					table.insert(newargs, j)&lt;br /&gt;
				end&lt;br /&gt;
			else &lt;br /&gt;
				if i ~= 'type' and i ~= 'lang' then &lt;br /&gt;
					return error('bad parameter in template:Conj:' .. i), '[[Category:Pages with incorrect template usage/Conj|A]]'&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
	end&lt;br /&gt;
	return p.conj(newargs, conjtype)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keepcomplement(oldstr, firstword) -- par exemple &amp;quot;gare de Lyon&amp;quot; -&amp;gt; &amp;quot;Lyon&amp;quot;&lt;br /&gt;
	local str = mw.ustring.gsub(oldstr, '^' .. firstword .. ' ', '')&lt;br /&gt;
	if str == oldstr then&lt;br /&gt;
		return oldstr&lt;br /&gt;
	end&lt;br /&gt;
	local throwable = {&amp;quot;de la &amp;quot;, &amp;quot;de l'&amp;quot;, &amp;quot;des &amp;quot;, &amp;quot;de l’&amp;quot;, &amp;quot;de &amp;quot;, &amp;quot;d’ &amp;quot;, &amp;quot;d'&amp;quot;, &amp;quot;du &amp;quot;}&lt;br /&gt;
	for i, j in pairs(throwable) do&lt;br /&gt;
		if mw.ustring.sub(str, 1, #j) == j then&lt;br /&gt;
			str = mw.ustring.gsub(str, j, &amp;quot;&amp;quot;)&lt;br /&gt;
			return str&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.toascii(str)&lt;br /&gt;
	local convtable = mw.loadData(&amp;quot;Module:Linguistique/ASCII&amp;quot;)&lt;br /&gt;
	for i, j in pairs(convtable) do -- manquent les majuscules&lt;br /&gt;
		str = mw.ustring.gsub(str, '[' .. i .. ']', j)&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Linguistique&amp;diff=16086&amp;oldid=prev</id>
		<title>Arthur : 1 version</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Linguistique&amp;diff=16086&amp;oldid=prev"/>
		<updated>2014-10-03T21:58:56Z</updated>

		<summary type="html">&lt;p&gt;1 version&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- module d'origine multilingue (voir [[wikidata:Module:Linguistic]], d'où une structure d'apparence un peu comple&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local lang = 'fr'&lt;br /&gt;
&lt;br /&gt;
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'&lt;br /&gt;
&lt;br /&gt;
-- i18n&lt;br /&gt;
local wordor = ' ou '&lt;br /&gt;
local wordand = ' et '&lt;br /&gt;
local comma = ', '&lt;br /&gt;
local fullstop = '. '&lt;br /&gt;
local wordsep = ' '&lt;br /&gt;
&lt;br /&gt;
local function isin(str, pattern)&lt;br /&gt;
	if str and pattern and mw.ustring.find(str, pattern, 1, true ) then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function langisin(str, lang)&lt;br /&gt;
	return isin(str, lang .. ' ') -- space is necessary to avoid false positives like zh in zh-hans&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function processgender(str)&lt;br /&gt;
	if (str == 'f') or (str == 'fem') or (str == 'feminine') then &lt;br /&gt;
		return 'feminine'&lt;br /&gt;
	elseif (str == 'n') or (str == 'neutral') then &lt;br /&gt;
		return 'neutral'&lt;br /&gt;
	else&lt;br /&gt;
		return 'masculine'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function processnumber(str)&lt;br /&gt;
	if (str == 'p') or (str == 'plural') then&lt;br /&gt;
		return 'plural'&lt;br /&gt;
	else &lt;br /&gt;
		return 'singular'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.vowelfirst (str)&lt;br /&gt;
	if str then return isin(vowels, str[1]) end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.inparentheses(str, lang)&lt;br /&gt;
	--todo: define language with exotic parentheses&lt;br /&gt;
	if str == '' then&lt;br /&gt;
		return str&lt;br /&gt;
	else &lt;br /&gt;
		return ' (' .. str .. ')' &lt;br /&gt;
		-- needs internationalization. &lt;br /&gt;
		--Needs leading space in Enlgish because as some languages do not use it, it is part of the formatting&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.of(word, lang, raw, gender, number, determiner) -- rough translation of &amp;quot;of&amp;quot; in various languages&lt;br /&gt;
-- note that the cases when on &amp;quot;of&amp;quot; is employed varies a lot among languages, so it is more prudent to call this from lang specific function only&lt;br /&gt;
	if not raw then &lt;br /&gt;
		raw = word&lt;br /&gt;
	end&lt;br /&gt;
	gender = processgender(gender)&lt;br /&gt;
	number = processnumber(number)&lt;br /&gt;
	-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -&amp;gt; 'italie'&lt;br /&gt;
	-- any way to automate this ?&lt;br /&gt;
	&lt;br /&gt;
	-- todo: ca to replace Template:Of/ca&lt;br /&gt;
	&lt;br /&gt;
	if lang == 'fr' then &lt;br /&gt;
		if number == 'plural' then&lt;br /&gt;
			return 'des ' .. word&lt;br /&gt;
		elseif p.vowelfirst(raw) then&lt;br /&gt;
			return 'de l\'' .. word&lt;br /&gt;
		elseif gender == 'feminine' then&lt;br /&gt;
			return 'de la ' .. word&lt;br /&gt;
		elseif derterminer then&lt;br /&gt;
			return 'du ' .. word&lt;br /&gt;
		else&lt;br /&gt;
			return 'de ' .. word&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.noungroup(noun, adj, lang)&lt;br /&gt;
	if not noun or noun == '' then &lt;br /&gt;
		return nil -- not '' so that it is not counted as a string by mw.listToText&lt;br /&gt;
	end&lt;br /&gt;
	if not adj or adj == ''&lt;br /&gt;
		then return noun&lt;br /&gt;
	end&lt;br /&gt;
	-- adjective before the noun&lt;br /&gt;
	if langisin('de de-at de-ch en en-ca en-gb pl zh zh-hans zh-hant zh-my zh-cn zh-sg zh-tw ', lang) then&lt;br /&gt;
		return adj .. wordsep(lang) .. noun&lt;br /&gt;
	-- adjective after the noun&lt;br /&gt;
	elseif langisin('fr fr-ca es it') then&lt;br /&gt;
		return noun .. wordsep(lang) .. adj&lt;br /&gt;
	else&lt;br /&gt;
		return noun ' (' .. adj .. ')'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.quickconj(args, conjtype)&lt;br /&gt;
	local separator, conjunction&lt;br /&gt;
	&lt;br /&gt;
	-- cas où separator ~= conj&lt;br /&gt;
	if (not conjtype) or conjtype == 'and' then&lt;br /&gt;
		separator, conjunction = comma, wordand&lt;br /&gt;
	elseif conjtype == 'or' then&lt;br /&gt;
		separator, conjunction = comma, wordor&lt;br /&gt;
	end&lt;br /&gt;
	if (separator and conjunction) then&lt;br /&gt;
		return  mw.text.listToText(args, conjunction, separator)&lt;br /&gt;
	end&lt;br /&gt;
	-- autres cas&lt;br /&gt;
	if conjtype == 'comma' then&lt;br /&gt;
		separator = comma&lt;br /&gt;
	else&lt;br /&gt;
		separator = conjtype&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(args, separator)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.conj(args, conjtype)&lt;br /&gt;
	if (not args) or (#args == 0) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local newargs = {}&lt;br /&gt;
	for i, j in pairs(args) do&lt;br /&gt;
		if type(j) ~= 'nil' then&lt;br /&gt;
			table.insert(newargs, j)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	args = newargs&lt;br /&gt;
	return p.quickconj(newargs, conjtype, lang)&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.conjfromWiki(frame)&lt;br /&gt;
	args = frame.args&lt;br /&gt;
	if not args or not args[1] then&lt;br /&gt;
		args = mw.getCurrentFrame():getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local conjtype = args.type&lt;br /&gt;
	newargs = {}  -- transform args metatable into a table so it can be concetenated&lt;br /&gt;
	for i, j in pairs(args) do&lt;br /&gt;
			if type(i) == 'number' then&lt;br /&gt;
				j = mw.text.trim(j)&lt;br /&gt;
				if j ~= '' then&lt;br /&gt;
					table.insert(newargs, j)&lt;br /&gt;
				end&lt;br /&gt;
			else &lt;br /&gt;
				if i ~= 'type' and i ~= 'lang' then &lt;br /&gt;
					return error('bad parameter in template:Conj:' .. i), '[[Category:Pages with incorrect template usage/Conj|A]]'&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
	end&lt;br /&gt;
	return p.conj(newargs, lang, conjtype)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
</feed>