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 ' ' ersetzt => NOWRAP
return string.gsub(k, " ", " ")
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, " ", " ")
else return " " -- evtl. wäre '<span style="font-size:0.167em;"> </span>' oder ' ' 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 --.. ' '
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= ' [[' .. 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