Module:Translitteratio

E Vicipaedia


Hic modulus nonnullas functiones translitteratorias praebet.

De usu[fontem recensere]

{{#invoke:translitteratio|nomen functionis}}

De functionibus[fontem recensere]

abecedaria[fontem recensere]

Haec functio tribus argumentis singulos characteres translitterat.

De usu[fontem recensere]

Codex manuscriptus:

{{#invoke:translitteratio|abecedaria
	| 1 = Lorem ipsum dolor sit amet
	| 2 = aeiou
	| 3 = AEIOU
}}

Effectus:

LOrEm IpsUm dOlOr sIt AmEt

Si secundum argumentum est longius tertio, characteres in excessu a textu delebuntur. Si tertium argumentum est longius secundo, characteres in excessu ignorabuntur.

aucta[fontem recensere]

Secundum hanc functionem variadicam cuique characteri in secundo argumento seorsum argumentum congruit.

De usu[fontem recensere]

Codex manuscriptus:

{{#invoke:translitteratio|aucta
	| 1 = Lorem ipsum dolor sit amet
	| 2 = aeiou
	| 3 = ā
	| 4 = ē
	| 5 = ī
	| 6 = ō
	| 7 = ū
}}

Effectus:

Lōrēm īpsūm dōlōr sīt āmēt

Si secundum argumentum est longius quam numerus argumentorum sequentium, characteres in excessu a textu delebuntur. Si numerus argumentorum sequentium est maior quam characteres secundi argumenti, argumenta in excessu ignorabuntur.

aleatoria[fontem recensere]

Haec pars augenda est.

Haec functio argumentum speciale sine textu in nomine (|=...) adhibet ad quendam textum legendum. Talis textus est index commatibus separatus (at alius character in locum commatis substitui potest – vide infra). Alia argumenta scriptiones definiunt quae ostendentur (ordine fortuito) si elementum est in indice.

Ut alius character in loco comatis adhibeatur, utere argumento speciali |,=....

Ut alius character vel cunctum verbum in loco signi exclamationis adhibeatur ad negationes indicandas, utere argumento speciali |!=....

Codex manuscriptus:

{{#invoke:translitteratio|aleatoria
	| = html, sine murmuribus
	| html = &wpGenerateRawHtml=1
	| xml = &wpGenerateXml=1
	| ! sine murmuribus = &wpRemoveComments=0
	| sine nowiki = &wpRemoveNowiki=1
}}

Effectus:

&wpGenerateRawHtml=1


Codex manuscriptus:

{{#invoke:translitteratio|aleatoria
	| = xml, sine nowiki
	| html = &wpGenerateRawHtml=1
	| xml = &wpGenerateXml=1
	| ! sine murmuribus = &wpRemoveComments=0
	| sine nowiki = &wpRemoveNowiki=1
}}

Effectus:

&wpRemoveComments=0&wpRemoveNowiki=1&wpGenerateXml=1


Codex manuscriptus:

{{#invoke:translitteratio|aleatoria
	| , = /
	| ! = NON
	| = html / xml / sine nowiki
	| html = &wpGenerateRawHtml=1
	| xml = &wpGenerateXml=1
	| NON sine murmuribus = &wpRemoveComments=0
	| sine nowiki = &wpRemoveNowiki=1
}}

Effectus:

&wpRemoveComments=0&wpGenerateRawHtml=1&wpGenerateXml=1&wpRemoveNowiki=1

Vide quoque[fontem recensere]


local ifacies = {}


ifacies.abecedaria = function(frame)

	local argg = frame.args

	if argg[1] == nil or argg[1] == '' then return '' end
	if argg[2] == nil or argg[2] == '' then return argg[1] end

	local reddenda = {}
	local nparia
	local textus = mw.text.split(argg[1], '', true)
	local delenda = mw.text.split(argg[2], '', true)
	local substituenda

	if argg[3] ~= nil then
		substituenda = mw.text.split(argg[3], '', true)
	else
		substituenda = {}
	end

	local ndeletiones = #delenda
	local nlitterae = #textus
	local tmp = #substituenda

	if ndeletiones > tmp then nparia = tmp else nparia = ndeletiones end

	for idx1 = 1, nparia do
		for idx2 = 1, nlitterae do
			if textus[idx2] == delenda[idx1] then
				textus[idx2] = substituenda[idx1]
			end
		end
	end

	for idx1 = nparia + 1, ndeletiones do
		for idx2 = 1, nlitterae do
			if textus[idx2] == delenda[idx1] then
				textus[idx2] = nil
			end
		end
	end

	tmp = 0

	for key, val in pairs(textus) do
		if type(key) == 'number' then
			tmp = tmp + 1
			reddenda[tmp] = key
		end
	end

	table.sort(reddenda)
	for key, val in ipairs(reddenda) do reddenda[key] = textus[val] end
	return table.concat(reddenda)

end


ifacies.aucta = function(frame)

	local substituenda = {}
	local nparia = 0

	for key, val in pairs(frame.args) do
		if type(key) == 'number' then
			if nparia == nil or key > nparia then nparia = key end
			substituenda[key - 2] = val
		end
	end

	nparia = nparia - 2

	if substituenda[-1] == nil or substituenda[-1] == '' then return '' end

	if nparia < 1 or substituenda[0] == nil
		or substituenda[0] == '' then return substituenda[-1] end

	local reddenda = {}
	local textus = mw.text.split(substituenda[-1], '', true)
	local delenda = mw.text.split(substituenda[0], '', true)
	local ndeletiones = #delenda
	local nlitterae = #textus

	substituenda[-1] = nil
	substituenda[0] = nil

	if ndeletiones < nparia then nparia = ndeletiones end

	for idx1 = 1, nparia do
		for idx2 = 1, nlitterae do
			if textus[idx2] == delenda[idx1] then
				textus[idx2] = substituenda[idx1]
			end
		end
	end

	for idx1 = nparia + 1, ndeletiones do
		for idx2 = 1, nlitterae do
			if textus[idx2] == delenda[idx1] then
				textus[idx2] = nil
			end
		end
	end

	local tmp = 0

	for key, val in pairs(textus) do
		if type(key) == 'number' then
			tmp = tmp + 1
			reddenda[tmp] = key
		end
	end

	table.sort(reddenda)
	for key, val in ipairs(reddenda) do reddenda[key] = textus[val] end
	return table.concat(reddenda)

end


ifacies.aleatoria = function(frame)

	local argg = {}
	for arg, txt in pairs(frame.args) do argg[arg] = txt end

	local sep
	if argg[','] ~= nil then sep = argg[',']:match'^%s*(.*%S)' end
	if sep == nil then sep = ',' elseif string.len(sep) > 1 then error(
		'Module:Translitteratio: Argumentum ‘,’ in functione ‘aleatoria’ unum characterem tantum continere potest', 0
	) end

	local neg
	if argg['!'] ~= nil then neg = argg['!']:match'^%s*(.*%S)' end
	if neg == nil then neg = '!' end

	local lneg = string.len(neg)
	local textus = sep .. (argg[''] or '') .. sep

	argg[''] = nil
	argg['!'] = nil
	argg[','] = nil

	local reddenda = {}
	local quaesita = {}
	local responsa = { '' }
	local nresp = 1
	local esep = '%s*' .. sep .. '%s*'
	local einit = '^' .. sep .. '?'
	local eneg = sep .. '%s*' .. neg .. '%s*'
	local sneg = sep .. neg
	local epartitio = sep .. '([^' .. sep .. ']*)'
	local quaesitum

	for arg, txt in pairs(argg) do
		nresp = nresp + 1
		for res in
			arg:gsub('[%%^%$%?%*%+%-%.%(%)%[%]]', '%%%0')
			:gsub(esep, sep):gsub(einit, sep):gsub(eneg, sneg)
			:gsub('%s+', '%%s*'):gmatch(epartitio)
		do
			if res ~= '' and res ~= sep and res ~= neg then
				if res:sub(1, lneg) == neg then
					quaesitum = sep .. '%s*' ..
						res:sub(lneg + 1) .. '%s*' ..
						sep
					if quaesita[quaesitum] ~= nil then
						quaesita[quaesitum][2] = nresp
					else
						quaesita[quaesitum] = { 1,
							nresp }
					end
				else
					quaesitum = sep .. '%s*' .. res ..
						'%s*' .. sep
					if quaesita[quaesitum] ~= nil then
						quaesita[quaesitum][1] = nresp
					else
						quaesita[quaesitum] = { nresp,
							1 }
					end
				end
			end
		end

		responsa[nresp] = txt

	end

	for nummus, bivium in pairs(quaesita) do
		if string.find(textus, nummus) ~= nil then
			table.insert(reddenda, responsa[bivium[1]])
		else
			table.insert(reddenda, responsa[bivium[2]])
		end
	end

	return table.concat(reddenda)

end


return ifacies