Die Dokumentation für dieses Modul kann unter Modul:Benutzer:Kpfiwa/Flagge/Test/Doku erstellt werden

local stat, FileMedia = pcall( require, "Module:FileMedia" )
if type( FileMedia ) == "table" then
    FileMedia = FileMedia.FileMedia()
else
    -- Fehlerfall; FileMedia enthält Fehlermeldung
    return "<span class=\"error\">" .. FileMedia .. "</span>"
end
local err="<br>'''TEST''' ''temporär''"
local lnk = nil
local logowidth = 20 -- die weitenklamotte
local sort = nil
local nowrap = 'white-space:nowrap;'
local kzn = nil
local wstd = 31 -- mit Rand, gemessen an katar (28)
local hstd = 12 -- Logohöhe default -- sollte via h=??? beeinflussbar sein.
local h, w = 2, 3 -- default h/w
local width = 20 -- nominelle Standartbreite bei 12 hstd
local flagborder = ''
local noflag = 'Flag of None.svg' -- falls nichts ankommt
local linktext = nil -- 'nicht erkannt'
local flgpic = flag
	--local linkziel ='Niemandsland'
local linkziel =nil
local flglnk= ''
local lang = mw.getContentLanguage():getCode()
local listtyp = nil
local p = {}
local fli = {}
-----
local hw= FileMedia.getHeightWidth("Flag_of_the_CIS.svg")
local function loadList(typ) -- typ=E, lang=te
	--local Liste = "Modul:Flagge/Flaglist_" .. lang  .. '_' .. typ
	local Liste = "Modul:Benutzer:Gadacz/Flagge/Flaglist_" .. lang  .. '_' .. (listtyp or 'C')
	return mw.loadData(Liste)
end

local function loli(typ) -- typ=E, lang=te
	--local Liste = "Modul:Flagge/Flaglist_" .. lang  .. '_' .. typ
	local Liste = "Modul:Benutzer:Gadacz/Flagge/Flaglist_" .. lang  .. '_' .. typ
	return require(Liste)
end

fli = loli('C')

local function tu(a,z) -- wandelt in Versalien und extrahiert erstes Zeichen oder Anzahl z
	return string.sub(string.upper(a), 1, z or 1)
end


local function cbkold(k)
	--[[ In der Liste werden '-' in Variablen als Rechenoperation ausgewertet. 
	Daher wird hier das '-' durch '_' ersetzt.
	In der Liste wurde es beim Anlegen bereits ausgetauscht. --]]
	if k then return string.gsub(k, "-", "_") end
end

local function cbk(s) -- WP-LUA geht mit Sonderzeichen ungnädig um. im Key dürfen auch keine '-' und SPACE sein	
return s or '' -- zum Testen verkürzte Funktion
	--local o = {'ä',  'ö',  '-', ' ', 'ü',  'ß',  'á', 'ò', 'ù', 'é'} -- Sollte alle Sonderzeichen abfangen
	--local r = {'ae', 'oe', '_', '_', 'ue', 'ss', 'a', 'o', 'u', 'e'}
	--if s then
   -- 	for i, v in ipairs(o) do  s = string.gsub(s, v, r[i]) end
   -- end
---	return s or ''
end -- orf(s)

function nbsp(k) --Hier wird das Leerzeichen durch '&nbsp;' ersetzt => NOWRAP
	return string.gsub(k, " ", "&nbsp;")
end -- function nbsp

function nnbsp(k) --Hier wird ein schmales, geschütztes Leerzeichen => NOWRAP eingefügt bzw. (wenn k) ' ' damit ersetzt
	if k then return string.gsub(k, " ", "&#8239;")
    else return "&#8239;" -- evtl. wäre '<span style="font-size:0.167em;">&nbsp;</span>' oder '&thinsp;' besser
  end -- if k
end -- function nnbsp

function sortclean(k)
	-- In der Liste stören im Lemma vorhandene Sonder-/Satzzeichen bei der Sortierung. Daher radikal putzen
	return string.gsub(k, "%A+", "")
end

function round(val, decimal) -- css will bei zu vielen Nachkommastellen streiken
 if (decimal) then
  return math.floor( (val * 10^decimal) + 0.5) / (10^decimal)
 else
  return math.floor(val+0.5)
 end
end


function fpic(o, v, logowidth) -- (orient, val, logowidth)
	local val = cbk(v) -- Bindestriche/Leet-/Sonderzeichen  ersetzen
	if fli[val] then --[[ falls es Größeneintrag gibt, sonst (or) via FileMedia.get... Das ist aber teurer! --]]
		local f = fli[val].f -- Grafik/Flagge
		local h = fli[val].h or FileMedia.getHeight(f) -- Höhe
		local w = fli[val].w or FileMedia.getWidth(f)  -- Breite
		flglnk = '|link=' ..  linkziel or fli[val].l or nil -- Flaggenlink
		flgpic = fli[val].f or noflag -- Bilddatei (File: ..) -- Datei 'international'
		if fli[val].b == 1 then flagborder = '|border' or '' end -- Bildrand  'international'
	end
	--[[ setzt den Bildaufruf zusammen
		dabei werden Größenangaben aus der Liste berücksichtigt und ggf. gem WIDTH neu berechnet.
		Zukunftsmusik: Berechnung (auch) via H=??? == logohight
	
		Berechnungen hier noch für H=??? == logohight ergänzen--]]
		if logohight then 
			zoom = round(logohight/hstd, 2)
			hightreal = logohight
		else
			zoom = round(logowidth/width, 2)
			hightreal = hstd * zoom -- Errechnete Höhe bei WIDTH-Angabe
		end -- if logohight
	divi = round(h/w,3)
	margins= wstd*zoom-hstd*zoom/h*w
	margin_half=margins/2

	local file = '[[File:' .. flgpic .. '|x' .. hightreal .. 'px' .. flglnk .. flagborder .. '|class=noviewer]]'
	if o == '#' then return file --.. '&nbsp;'
	elseif o == 'W' then -- Zeilenumbruch (wrap) erlaubt, Flagge an Text
			rightmrg = 0; leftmrg = 0; nowrap = ''
			elseif o == 'L' then -- linksbündig
			leftmrg = 0; rightmrg = margins
		elseif o == 'R' then -- rechtsbündig
			rightmrg = 0; leftmrg = margins
		elseif o == 'N' then -- 
			rightmrg = 0; leftmrg = 0
		else
			leftmrg = margin_half
			rightmrg = margin_half
	end
	return '<span style="margin:0px ' .. rightmrg .. 'px 0px '.. leftmrg ..'px;' .. nowrap .. '">' .. file .. '</span>'
end

function orf(v)
	v = tu(v)
	local t = {'L', 'R', 'N', 'W', '#'}
	--[[	L: links-/leftbündig
			R: rechts-/rightbündig
			N: Flagge direkt an Text, nowrap
			W: Flagge direkt an Text, Zeilenumbruch möglich
			#: Kein Linktext, nur Flagge
	--]]
  for index, value in ipairs(t) do
    if value == v then
      return v
    end -- if value
  end -- for ...
  return false
end -- orf(v)

--[[ der Umweg à la fx wäre auch evtl. eine Variante um unterschiedliche Organisationen, Routen,
	sonstige Logoträger zu unterscheiden und dann eine entsprechende Liste zu wählen und mit 
	fli = mw.loadData(xxxxListe) zu laden. --]]


function p.f(frame)
	--fli = fli or loli('C')
	frame = frame:getParent() -- erst mal die übergebenen Parameter aufrufen
  -- und zuteilen
	for key, val in pairs(frame.args) do
		key=tu(key) -- hier auf einen Großbuchstaben verkürzen
		local t = cbk(val) -- sonst funktioniert Abfrahe nicht, weil cbk=true ist
err=err .. '<br>*Start t=' .. t .. ' key=' .. key .. ' val=' .. val
		if key == "1" then 
			if val == '#' then orient = val -- aus Kompatibilitätsgründen zu Altversion
        elseif fli[t] then kzn = val	else linkziel = val
err=err .. '<br>*2 kzn=' .. (kzn or 'NIX') .. ' linkziel=' .. (linkziel or 'NIX') .. ' linktext=' .. (linktext or 'NIX')
      end -- if val == #
    end --if key == "1" 
    if key == "K" or key=='I' or key == 'O' or key == 'C'  or key == '3' then -- [K]ennzeichen, [I]SO, [O]rganisation ([R]oute)
      kzn = cbk(val) -- evtl. auf Übergabe abfragen

    elseif key == 'L' then linkziel = val -- [L]ink (könnte ggf. '1' überschreiben.
    elseif key == 'Z' then linkziel = val; linktext = val -- '[Z]iel' verändertes Linkziel, auch Linktext-Anzeige
    elseif key == 'W' or key == 'P' then logowidth = tonumber(val) -- [p]ixel bzw. [W]IDTH
    elseif key == '2' or key == 'T' then linktext = val -- link[t]ext abweichend von 1
    elseif key == 'H' then logohight = tonumber(val) -- [H]öhe (Zukunftsmusik)
    elseif key == 'B' or key == 'M' then orient = orf(val) -- Flaggen[m]argin oder [bo]rder ggf. wrap bzw. Umbruch ermöglichen siehe function orf()
    elseif key == 'S' then sort = val -- [S]ortierwert (beliebiges Wort) oder wie {{AUT|sortable=ja}}
		end -- if key ...
	end -- for key, val in ..
err=err .. '<br>*3 linktext =' .. (linktext or 'NIX') .. ' linkziel =' .. (linkziel or 'NIX') 

	-- Jetzt die Tabellenzeile für 'kzn' (Kennzeichen) auslesen
	local val = cbk(kzn) -- Bindestriche durch '_' ersetzen, kann ggf verschwinden, da oben schon eingesetzt
	if not fli[val] then val='ZZZ' end -- Falsches oder fehlendes Kennzeichen
	if fli[val] then
--		linkziel = linkziel or fli[val].l or mist[1] -- Link auf Lemma
		linkziel = linkziel or fli[val].l or '' -- Link auf Lemma
		linktext = linktext or fli[val].ltxt or fli[val].l or linkziel -- sichtbarer Linktext, default = Lemma
 err=err .. '<br>* VAL linktext =' .. (linktext or 'NIX') .. ' linkziel =' .. (linkziel or 'NIX')

		arh = fli[val].h or 1 -- Höhe (amtlich, als a/r)
    arw = fli[val].w or 1 -- Breite
		flgpic = fli[val].f or flag -- Bilddatei
		flglnk = linkziel or flgpic -- Flaggenlink
		if sort and tu(sort,2) == 'JA' then sort = kzn end-- damit funktioniert auch {{AUT|sortable=ja}}
		sort = sort or fli[val].s or linktext or linkziel -- Sortierschlüssel
		if fli[val].b then flagborder = '|border' or '' end -- Bildrand
	end -- if fli[val]
	
	-- führenden Eintrag mit Sortiervorgabe (unsichtbar) anlegen
	if sort then sort = '<span style="display:none;">' .. sortclean(sort) .. '</span>' else sort = '' end

	bild = fpic(orient, val, logowidth)
	if orient == '#' then return sort .. bild --  .. err
		end -- Text entffällt
	if nowrap then linktext = nbsp(linktext) end
	link= '&nbsp;[[' .. linkziel .. '|' .. linktext ..']]' 
	return sort .. bild .. link  -- .. err
end -- function p.f(frame)

function p.fx(frame)
	--local fli = require "Modul:Benutzer:Gadacz/Flagge/ListeE"

	--[[ Hilfsroutine um die alten Versionen mit 'Vorlage:XYZ' bis 'Vorlage:ABC' auszuwerten
		Dort muss der Eintrag stehen: 
			<onlyinclude>{{#invoke:Flagge|fx}}}}</onlyinclude>
			<noinclude>{{Dokumentation}}</noinclude>
		'fx' ist obligatorisch!! XYZ ist durch den ISO 3-Letter-code des Landes oder ein anderes Kennzeichen zu ersetzen.
		Parameter werden später vom Aufruf der Vorlage im Lemma übernommen.
		Hier wird also nur 'XYZ' ermittelt und übergeben
	--]]
	local a = frame:getParent():getTitle() -- daher kommt XYZ
	kzn = string.gsub(a, "(%C+):(%C+)", "%2") --Kennzeichen extrahieren
	listtyp = 'C'
	r = p.f(frame) -- den Rest zuordnen und verarbeiten
	return r -- .. err
end

function p.fCfunction(frame)
	i=Test
end

function p.lg(frame)
	local listtyp = 'C'
local Liste = "Modul:Benutzer:Gadacz/Flagge/Flaglist_" .. lang  .. '_' ..  listtyp
	fli = loli(listtyp)
	--fli = loadList('C')
x=fli['DEU'].f
	local err = "Test: " 
	return err .. lang .. x
end

-----
function p.getContent(frame)
    local text = mw.text.trim(frame.args[1])
    local namespace = mw.text.trim(frame.args[2])
    local title = mw.title.new(text, namespace)
    return ';getContent\n<blockquote>' .. title:getContent() .. '</blockquote>\n'
end
-----
local function findList(t,q)
    local key
    local value
    local result

    for key, value in pairs(t) do
    	key=tu(key)
        if (key == pg and q == 'P') or  (key == '1' and q == 'V') then
            result = tu(value)
         end
    end
 local Liste = "Modul:Benutzer:Gadacz/Flagge/Flaglist_" .. lang  .. '_' ..  (result or 'C')

    return Liste
end
------------
local function tableToString(t)
    local key
    local value
    local result
 
    result = ''
 
    for key, value in pairs(t) do
        if (tonumber(key) ~= nil) then
            result = result .. ':table[' .. key .. '] is ' .. value .. '\n' 
        else
            result = result .. ':table[\'' .. key .. '\'] is ' .. value .. '\n' 
        end
    end
 
    return result
end

--------
function table.merge(t1, t2)
   for k,v in ipairs(t2) do
      table.insert(t1, v)
   end 
 
   return t1
end

function p.test(frame) -- Muster ohne Wert!
	local err="TEST: " .. findList(frame.args,'V') .. " (tableToString(frame.args))<br>"; local i=1
	require('Modul:Benutzer:Gadacz/Flagge/Para_' .. lang)
	err=err ..  '<br>aus Para_' .. lang ..': --' .. kk .. '<br>'
key='O'
if kk then err=err ..  '<br>ERFOLG<br>' end
	--yy=frame
	frame = frame:getParent()
	local err= err.."TEST2: " .. frame:getTitle() .. " (getTitle)<br>"; local i=1
	--y=
--[[	https://en.wikiversity.org/wiki/Lua/Frame_Object#Create_a_Lua_Script_that_Uses_the_Frame_Object
--]]
	err=err .. '<br>' .. findList(frame.args,'P') .. '<br>'-- passende Liste suchen 'P' = Parent
	flagge="Flag_of_the_CIS.svg"
local x = frame.args[1] or 'NIX mit 1. Parameter'
local zw=FileMedia.getWidth(flagge)
local zh=FileMedia.getHeight(flagge)
err=err .. "<br>" .. flagge .. ' ist ' .. zw .. ' breit und ' .. zh .. ' hoch<br>'
-- https://de.wikipedia.org/wiki/Wikipedia:Lua/Modul/FileMedia/de
-- besser https://commons.wikimedia.org/wiki/Module:File
	for key, val in pairs(frame.args) do
		err = err .. i .. '. Key=' .. key .. ' Wert=' .. val .. '<br>'
		i=i+1
	end
local zz={}
local i={}
local h={}
local k1='AHO'
local k2='ARM_1952'
i=	loli('I')
h=	loli('H')
zz= table.merge (i, h)
local a1 = zz[k1].titl or 'Y'
		local a2 = zz[k2].l or 'Z' 
	return err .. '<br>-----' .. x .. hw .. a1 .. a2
end -- test

return p