<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="nl">
	<id>https://wiki-raamsdonk.nl/index.php?action=history&amp;feed=atom&amp;title=Module%3ALinguistic</id>
	<title>Module:Linguistic - Bewerkingsoverzicht</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-raamsdonk.nl/index.php?action=history&amp;feed=atom&amp;title=Module%3ALinguistic"/>
	<link rel="alternate" type="text/html" href="https://wiki-raamsdonk.nl/index.php?title=Module:Linguistic&amp;action=history"/>
	<updated>2026-04-08T09:55:12Z</updated>
	<subtitle>Bewerkingsoverzicht voor deze pagina op de wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://wiki-raamsdonk.nl/index.php?title=Module:Linguistic&amp;diff=74093&amp;oldid=prev</id>
		<title>Colani: 1 versie geïmporteerd</title>
		<link rel="alternate" type="text/html" href="https://wiki-raamsdonk.nl/index.php?title=Module:Linguistic&amp;diff=74093&amp;oldid=prev"/>
		<updated>2024-03-22T20:17:00Z</updated>

		<summary type="html">&lt;p&gt;1 versie geïmporteerd&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nieuwe pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
  __  __           _       _        _     _                   _     _   _      &lt;br /&gt;
 |  \/  | ___   __| |_   _| | ___ _| |   (_)_ __   __ _ _   _(_)___| |_(_) ___ &lt;br /&gt;
 | |\/| |/ _ \ / _` | | | | |/ _ (_) |   | | &amp;#039;_ \ / _` | | | | / __| __| |/ __|&lt;br /&gt;
 | |  | | (_) | (_| | |_| | |  __/_| |___| | | | | (_| | |_| | \__ \ |_| | (__ &lt;br /&gt;
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)_____|_|_| |_|\__, |\__,_|_|___/\__|_|\___|&lt;br /&gt;
                                                  |___/                        &lt;br /&gt;
Simple internationalization functions that can be called by other modules.&lt;br /&gt;
This Module was copied from Wikimedia Commons, so please request changes there.&lt;br /&gt;
&lt;br /&gt;
Maintainers:&lt;br /&gt;
* Zolo - original version&lt;br /&gt;
* Jarekt&lt;br /&gt;
&lt;br /&gt;
Dependencies:&lt;br /&gt;
- Module uses c:data:I18n/Or.tab&lt;br /&gt;
]]&lt;br /&gt;
require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === Internal functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
&lt;br /&gt;
local function langSwitch(list,lang)&lt;br /&gt;
	local langList = mw.language.getFallbacksFor(lang)&lt;br /&gt;
	table.insert(langList,1,lang)&lt;br /&gt;
	for i,language in ipairs(langList) do&lt;br /&gt;
		if list[language] then&lt;br /&gt;
			return list[language]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------&lt;br /&gt;
-- read Commons Data:SOMENAME.tab dataset and look for message identified by a &lt;br /&gt;
-- &amp;quot;key&amp;quot; in a language &amp;quot;lang&amp;quot;. See editAtWikidata as an example.&lt;br /&gt;
local function formatMessage(dataset, key, lang)&lt;br /&gt;
	for _, row in pairs(mw.ext.data.get(dataset, lang).data) do&lt;br /&gt;
		local id, msg = unpack(row)&lt;br /&gt;
		if id == key then&lt;br /&gt;
			return mw.message.newRawMessage(msg):plain()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	error(&amp;#039;Invalid message key &amp;quot;&amp;#039; .. key .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------&lt;br /&gt;
local function nowiki(str) -- remove all the links&lt;br /&gt;
	if not str then&lt;br /&gt;
		return str&lt;br /&gt;
	end&lt;br /&gt;
	str = mw.ustring.gsub(str, &amp;quot;&amp;lt;[^&amp;gt;]*&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)    -- remove all html tags from str&lt;br /&gt;
	str = mw.ustring.gsub(str, &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, &amp;quot;&amp;quot;)        -- remove bold &lt;br /&gt;
	str = mw.ustring.gsub(str, &amp;quot;&amp;#039;&amp;#039;&amp;quot;, &amp;quot;&amp;quot;)         -- remove italics&lt;br /&gt;
	str = mw.ustring.gsub(str, &amp;quot;%[%[[Ff]ile:[^%]]+%]%]&amp;quot;, &amp;quot;&amp;quot;) -- remove file icons&lt;br /&gt;
	str = mw.ustring.gsub(str, &amp;quot;%[%[[^|]*|&amp;quot;, &amp;quot;&amp;quot;) -- remove piped links, like &amp;quot;[[:en:test|&amp;quot;&lt;br /&gt;
	str = mw.ustring.gsub(str, &amp;quot;%[[^ ]+ &amp;quot;, &amp;quot;&amp;quot;)   -- remove URL links, like &amp;quot;[https://www.wikidata.org/wiki/Q2706250 &amp;quot;&lt;br /&gt;
	str = mw.ustring.gsub(str, &amp;quot;%[%[&amp;quot;, &amp;quot;&amp;quot; )      -- remove piped links, like &amp;quot;[[&amp;quot;&lt;br /&gt;
	str = mw.ustring.gsub(str, &amp;quot;%]&amp;quot;, &amp;quot;&amp;quot; )        -- remove piped links, like &amp;quot;]&amp;quot; or &amp;quot;]]&amp;quot;&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------&lt;br /&gt;
-- Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
-- It works similarly to Module:Yesno&lt;br /&gt;
local function yesno(val, default)&lt;br /&gt;
	if type(val) == &amp;#039;boolean&amp;#039; then&lt;br /&gt;
		return val&lt;br /&gt;
	elseif type(val) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		if val==1 then &lt;br /&gt;
			return true&lt;br /&gt;
		elseif val==0 then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	elseif type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
	    val = mw.ustring.lower(val)  -- put in lower case&lt;br /&gt;
	    if val == &amp;#039;no&amp;#039;  or val == &amp;#039;n&amp;#039; or val == &amp;#039;false&amp;#039; or val == &amp;#039;0&amp;#039; then&lt;br /&gt;
	        return false&lt;br /&gt;
	    elseif val == &amp;#039;yes&amp;#039; or val == &amp;#039;y&amp;#039; or val == &amp;#039;true&amp;#039;  or val == &amp;#039;1&amp;#039; then&lt;br /&gt;
	        return true&lt;br /&gt;
	    end&lt;br /&gt;
    end&lt;br /&gt;
    return default&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === External functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the function to be called from other LUA codes&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------------&lt;br /&gt;
function p.vowelfirst (str)&lt;br /&gt;
	if str then &lt;br /&gt;
		local vowels = &amp;#039;aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭï&amp;#039;..&lt;br /&gt;
			&amp;#039;ḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ&amp;#039;&lt;br /&gt;
		str = mw.ustring.lower(mw.ustring.sub(str,1,1))&lt;br /&gt;
		return mw.ustring.find(vowels, str, 1, true ) &lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------------&lt;br /&gt;
function p.inparentheses(str)&lt;br /&gt;
	if (not str) or (str == &amp;quot;&amp;quot;) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local str2 = mw.message.new(&amp;#039;parentheses&amp;#039;, str):inLanguage(lang):plain()&lt;br /&gt;
	return (str2~=nil and str2) or (&amp;#039;(&amp;#039;..str..&amp;#039;)&amp;#039;) -- in case this module is moved to a project where {{int:parenthesis}} is not set&lt;br /&gt;
end&lt;br /&gt;
&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 or mw.text.trim(raw) == &amp;quot;&amp;quot; then &lt;br /&gt;
		raw = mw.ustring.lower(nowiki(word))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -&amp;gt; &amp;#039;italie&amp;#039;&lt;br /&gt;
	-- any way to automate this ?&lt;br /&gt;
	&lt;br /&gt;
	if lang == &amp;#039;fr&amp;#039; then &lt;br /&gt;
		determiner = yesno(determiner,false)&lt;br /&gt;
&lt;br /&gt;
		if determiner then&lt;br /&gt;
			if string.sub(number or &amp;#039;&amp;#039;,1,1)==&amp;#039;p&amp;#039; then -- number == &amp;#039;plural&amp;#039;&lt;br /&gt;
				return &amp;#039;des&amp;amp;#32;&amp;#039; .. word&lt;br /&gt;
			elseif p.vowelfirst(raw) then&lt;br /&gt;
				return &amp;#039;de l’&amp;#039; .. word&lt;br /&gt;
			elseif string.sub(gender or &amp;#039;&amp;#039;,1,1)==&amp;#039;f&amp;#039; then -- gender == &amp;#039;feminine&amp;#039;&lt;br /&gt;
				return &amp;#039;de la&amp;amp;#32;&amp;#039; .. word&lt;br /&gt;
			else&lt;br /&gt;
				return &amp;#039;du&amp;amp;#32;&amp;#039; .. word&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if p.vowelfirst(raw) then&lt;br /&gt;
				return &amp;#039;d’&amp;#039; .. word&lt;br /&gt;
			else&lt;br /&gt;
				return &amp;#039;de&amp;amp;#32;&amp;#039; .. word&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	elseif lang == &amp;#039;ca&amp;#039; then&lt;br /&gt;
		-- implement [[Template:Of/ca]] or  https://ca.wikipedia.org/wiki/Plantilla:Deod%27/base for case where &amp;quot;{{{context}}}&amp;quot; is &amp;quot;en&amp;quot; (default on Commons)&lt;br /&gt;
		if ( p.vowelfirst(raw) and not mw.ustring.find( &amp;#039;ia|ià|ie|io|iu|ua|ue|ui|uí|uï|uo|ya|ye|yi|yo|yu|&amp;#039;, mw.ustring.sub(raw,1,2) .. &amp;#039;|&amp;#039;)) then&lt;br /&gt;
			return &amp;#039;d\&amp;#039;&amp;#039; .. word&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;de &amp;#039; .. word&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------------&lt;br /&gt;
function p.noungroup(noun, adj, lang)&lt;br /&gt;
	if not noun or noun == &amp;#039;&amp;#039; then &lt;br /&gt;
		return nil -- not &amp;#039;&amp;#039; so that it is not counted as a string by mw.listToText&lt;br /&gt;
	end&lt;br /&gt;
	if not adj or adj == &amp;#039;&amp;#039;&lt;br /&gt;
		then return noun&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local wordsep = mw.message.new( &amp;quot;Word-separator&amp;quot; ):inLanguage(lang):plain()&lt;br /&gt;
	-- Assign order of words per language: 1 means adjective before the noun and 2 means adjective after the noun&lt;br /&gt;
	-- original source for many: language subpages of [[Template:Technique]]&lt;br /&gt;
	-- corrections to that using https://wals.info/feature/87A, still different:&lt;br /&gt;
	-- * vi: WALS says 2&lt;br /&gt;
	-- * gl isn&amp;#039;t consistent in [[Template:Technique/gl]], but seems to be 2&lt;br /&gt;
	local LUT = {ar=2, ca=2, cs=1, da=1, de=1, el=1, en=1, es=2, et=1, fi=1, fr=2, &lt;br /&gt;
		gl=2, he=2, hu=1, it=2, ja=1, la=2, mk=1, nds=1, nb=1, nl=1, no=1, pl=1, pt=2, &lt;br /&gt;
		ro=2, ru=1, scn=2, sk=1, sl=1, sr=1, sv=1, sw=1, tr=1, vec=1, vi=1, zh=1}&lt;br /&gt;
	local primaryLangSubtag = mw.text.split(lang, &amp;#039;-&amp;#039;, true)[1]&lt;br /&gt;
	local case = LUT[lang] or LUT[primaryLangSubtag]&lt;br /&gt;
	if case==1 then     -- adjective before the noun&lt;br /&gt;
		return adj .. wordsep .. noun&lt;br /&gt;
	elseif case==2 then -- adjective after the noun&lt;br /&gt;
		return noun .. wordsep .. adj&lt;br /&gt;
	else                -- order unknown&lt;br /&gt;
		return noun .. &amp;#039; (&amp;#039; .. adj .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------------&lt;br /&gt;
function p.conj(args, lang, conjtype)&lt;br /&gt;
	local comma    = mw.message.new( &amp;quot;comma-separator&amp;quot;):inLanguage(lang):plain()&lt;br /&gt;
	local wordsep  = mw.message.new( &amp;quot;Word-separator&amp;quot; ):inLanguage(lang):plain()&lt;br /&gt;
	local andtable = { ar=&amp;#039; و&amp;#039;, he=&amp;#039; ו&amp;#039;, ja=&amp;#039;および&amp;#039;, pl=&amp;#039; i &amp;#039;} -- languages with a problem with the MediaWiki:And&lt;br /&gt;
	local sep1, sep2 = comma, nil&lt;br /&gt;
	if conjtype == &amp;#039;comma&amp;#039; then&lt;br /&gt;
		sep2 = comma&lt;br /&gt;
	elseif conjtype == &amp;#039;or&amp;#039; or conjtype == &amp;#039;explicit or&amp;#039; then &lt;br /&gt;
		local wordor = formatMessage(&amp;#039;I18n/Or.tab&amp;#039;, &amp;#039;or&amp;#039;, lang) -- get translated &amp;quot;or&amp;quot;&lt;br /&gt;
		sep2 = wordsep .. wordor  .. wordsep -- pad it with spaces (if needed)&lt;br /&gt;
		sep1 = (conjtype == &amp;#039;explicit or&amp;#039; and sep2) or comma -- adds &amp;quot;or&amp;quot; betwen all words when the context can be confusing&lt;br /&gt;
	elseif conjtype and conjtype ~= &amp;#039;and&amp;#039; and conjtype ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		sep1, sep2 = conjtype, conjtype&lt;br /&gt;
	elseif andtable[lang] then &lt;br /&gt;
		sep2 = andtable[lang]&lt;br /&gt;
	else&lt;br /&gt;
		sep2 = mw.message.new( &amp;quot;and&amp;quot; ):inLanguage(lang):plain() .. wordsep&lt;br /&gt;
	end&lt;br /&gt;
	return mw.text.listToText(args, sep1, sep2)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the functions to be called from template namespace&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------------&lt;br /&gt;
function p.offromwiki(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	return p.of(args.word, args.lang, args.raw, args.gender, args.number, args.determiner)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------------&lt;br /&gt;
function p.conjfromWiki(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	if not args or not args[1] then&lt;br /&gt;
		args = frame:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local lang = args.lang&lt;br /&gt;
	if not lang or mw.text.trim(lang) == &amp;#039;&amp;#039; then&lt;br /&gt;
		lang = frame:callParserFunction( &amp;quot;int&amp;quot;, &amp;quot;lang&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	local 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) == &amp;#039;number&amp;#039; then&lt;br /&gt;
				j = mw.text.trim(j)&lt;br /&gt;
				if j ~= &amp;#039;&amp;#039; then&lt;br /&gt;
					table.insert(newargs, j)&lt;br /&gt;
				end&lt;br /&gt;
			else &lt;br /&gt;
				if i ~= &amp;#039;type&amp;#039; and i ~= &amp;#039;lang&amp;#039; then &lt;br /&gt;
					return &amp;#039;error: bad parameter in template:Conj: &amp;#039; .. i .. &amp;#039;[[Category:Pages with incorrect template usage/Conj|A]]&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
	end&lt;br /&gt;
	return p.conj(newargs, lang, args.type)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Colani</name></author>
	</entry>
</feed>