Modul:Benutzer:Kpfiwa/Flagge
Erscheinungsbild
- noch in Arbeit
--[[ ist AUSSCHLIESSLICH zu Entwicklungs. und Testzwecken angelegt und noch lange nicht fertig.
Konstruktive Hinweise von Besserwissern sind jedoch willkommen.
PRIMÄRER Zweck der Versuche ist, die Flaggen mit den staatlich vorgegebenen Maßen korrekt darzustellen.
Alle übrigen Parameter sollen mindestens die gewohnten Parameter abarbeiten.
Was fehlt noch?
# Einbindung aller Parameter, wie sie bei 'Land mit Flagge' Standard sind
# Vorgabe für bisherige Vorlagen im Stil {{XYZ}}
# Falscheingaben werden noch nicht sauber abgefangen
--]]
--[[
local wstd = 32 -- mit Rand, gemessen an katar (28)
local histd = 12 -- Logohöhe default
local orient = ''
local width = 20 -- nominelle Standartbreite bei 12 histd
local flagborder = ''
local flag = 'Flag of None.svg' -- falls nichts ankommt
local ctrorg = 'nicht erkannt'
local flgpic = 'Flag of None.svg'
local textlink ='Niemandsland'
local flglnk= ''
local arh, arw = 1, 1
local mist = {'Land nicht gefunden','Falscher Parameter','sonstiger Fehler'}
local val = 'XYZ'--]]
local lnk = nil
local logopx = 20 -- die weitenklamotte
local sort = nil
local nowrap = 'white-space:pre;'
erg=nil -- nur zum Testen
local p, zeile, fli = {}, {}, {}
-- da stehen die Daten
local fli = mw.loadData("Modul:Benutzer:Gadacz/Flagge/ListeE")
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
function nw(s)
if nowrap == 1 then return s end
s='<span style="white-space:pre;">' .. s .. '</span>'
return s
end
function cbk(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. --]]
return string.gsub(k, "-", "_")
end
function nbsp(k)
--[[ Hier wird das Leerzeichen durch ' ' ersetzt.
--]]
return string.gsub(k, " ", " ")
end
function sortclean(k)
--[[ In der Liste stören im Lemma vorhandene Sonder-/Satzzeichen die Ausgabe,
wenn sie in der Sortierung verwendet werden, Daher radikal putzen --]]
return string.gsub(k, "%A+", "")
end
function splitval(v) -- weist die Werte aus der Liste zu
val = cbk(v) -- Bindestriche durch '_' ersetzen
if not fli[val] then val='ZZZ' end
if fli[val] then
ctrorg = fli[val].ctry or mist[1] -- Link auf Lemma
arh = fli[val].h or 1; arw = fli[val].w or 1 -- Höhe und Breite
flglnk = fli[val].ctry or nil; textlink = flglnk -- Flaggenlink
flgpic = fli[val].flg or flag -- Bilddatei
sort = fli[val].srt or flglnk -- Sortierschlüssel
if fli[val].bdr == 1 then flagborder = '|border' or '' end -- Bildrand
end
end
function round(val, decimal)
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, pwidt) -- (orient, val, logopx) pwidt war lp
--[[ Die Rechnerei stimmt nicht, da "schiefe" Verhältnisse wie bei Katar nicht auf einen Dezimalwert rediziert werden --]]
local wstd = 31 -- mit Rand, gemessen an katar (28)
local hstd = 12 -- Logohöhe default
local h, w = 2, 3 -- defailt h/w
local width = 20 -- nominelle Standartbreite bei 12 hstd
local flagborder = ''
local flag = 'Flag of None.svg' -- falls nichts ankommt
local ctrorg = 'nicht erkannt'
local flgpic = flag
local textlink ='Niemandsland'
local flglnk= ''
local val = cbk(v) -- Bindestriche ersetzen
if fli[val] then
h = fli[val].h -- Höhe
w = fli[val].w -- Breite
flglnk = fli[val].ctry or nil; textlink = flglnk -- Flaggenlink
flgpic = fli[val].flg or flag -- Bilddatei
sort = fli[val].srt or flglnk -- Sortierschlüssel
if fli[val].bdr == 1 then flagborder = '|border' or '' end -- Bildrand
end
--[[ setzt den Bildaufruf zusammen
dabei werden Größenangaben aus der Liste berücksichtigt und ggf. gem WIDTH neu berechnet.
Zuerst mögliche Sortierung auswerten --]]
if sort then sort = '<span style="display:none;">' .. sortclean(sort) .. '</span>' else sort = '' end
-- Berechnungen
zoom = round(pwidt/width, 2)
divi = round(h/w,3)
Breite = round(hstd/divi*zoom, 2)-- irrelevant, da Höhe eingegeben wird (x123px)
margt= wstd*zoom-hstd*zoom/h*w
--marg=(wstd*zoom-Breite)/2
marg=margt/2
hightreal = hstd * zoom -- Errechnete Höhe bei WIDTH-Angabe
local file = '[[File:' .. flgpic .. '|x' .. hightreal .. 'px|link=' .. flglnk .. flagborder .. ']]'
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 = margt
elseif o == 'R' then -- rechtsbündig
rightmrg = 0; leftmrg = margt
elseif o == 'N' then --
rightmrg = 0; leftmrg = 0
else
leftmrg = marg
rightmrg = marg
end
--return sort .. '<span style="margin:0px ' .. rightmrg .. 'px 0px '.. leftmrg ..'px;' .. nowrap .. '">' .. file .. '</span>'
return '<span style="margin:0px ' .. rightmrg .. 'px 0px '.. leftmrg ..'px;' .. nowrap .. '">' .. file .. '</span>'
end
function mw(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 -- mv(v)
function p.fx(frame)
--[[ Hilfsroutine um die alten Versionen mit 'Vorlage:XYZ' bis 'Vorlage:ABC' auszuwerten
Dort muss der Eintrag stehen:
<onlyinclude>{{#invoke:Benutzer:Gadacz/Flagge|fx|{{SUBPAGENAME}}}}</onlyinclude>
<noinclude>{{Dokumentation}}</noinclude>
'fx' ist obligatorisch!! XYZ ist durch den ISO 3-Letter-code des Landes zu ersetzen.
Parameter werden vom Aufruf der Vorlage im Lemma übernommen.
Dennoch wird hier per for .. in .. do abgefragt, um ggf. auch von dieser Vorlage Parameter abzufragen.
DER PUNKT MUSS NOCH HEFTIG ÜBERARBEITET WERDEN!
--]]
for key, val in pairs(frame.args) do
key=tu(key) -- verkürzt auf einen Großbuchstaben
-- 1. Parameter oder [S]taat= oder [O]rganisation=
if key == "1" or key=="F" or key=="I" or key=="O" then val = cbk(val) end -- if key
end -- for key
r = p.f(frame)
return r
end
function p.f(frame)
frame = frame:getParent()
-- erst mal die übergebenen Parameter aufrufen
for key, val in pairs(frame.args) do
key=tu(key) -- hier auf einen Großbuchstaben verkürzen
if key == "1" then
if val == '#' then orient = val --end -- if val
else splitval(val) end -- if val
elseif key == "F" or key=='I' or key == 'O' then --- [F]lagge, [I]]SO, [O]ganisation
splitval(val)-- Tabellenzeile zerlegen/Werte zuweisen
elseif key == 'T' then ctrorg = val -- Text oder # oder ggf. fremdtext (L) oder beide (B)
elseif key == 'P' or key == 'W' then logopx = tonumber(val) -- pixel bzw. WIDTH=
elseif key == "2" or key == 'L' then lnk = val -- link abweichend von 1
elseif key == 'Z' or key == 'T' then lnk = val; fmt = val -- 'Ziel' verändertes Linkziel, auch Linktext-Anzeige
elseif key == 'B' or key == 'M' then orient = mw(val) -- Flaggenmargin oder wrap bzw. Umbruch ermöglichen
end -- if key ...
--end -- for key ...
end
if sort then sort = '<span style="display:none;">' .. sortclean(sort) .. '</span>' else sort = '' end
bild = fpic(orient, val, logopx)
if orient == '#' then return sort .. bild end
if nowrap ~= '' then textlink = nbsp(textlink) end
return sort .. bild .. ' [['..textlink ..']]'
end -- function p.f(frame)
--------------------------
function splitter(v) -- weist die Werte aus der Liste zu
if erg then erg=erg .. '<br>Splitte:' .. v end
val = cbk(v) -- Bindestriche durch '_' ersetzen
if erg then erg=erg .. "<br>Splitter:" .. val end
if not fli[val] then val='ZZZ' end
if fli[val] then
ff=fli[val]
if erg then erg=erg .. "<br>in fli:val:" end
ctrorg= fli[val].ctry or nil; textlink = flglnk -- Flaggenlink
flglnk = fli[val].ctry or nil; textlink = flglnk -- Flaggenlink
flgpic = fli[val].flg or flag -- Bilddatei
sort = fli[val].srt or flglnk -- Sortierschlüssel
if fli[val].bdr == 1 then flagborder = '|border' or '' end -- Bildrand
end
if erg then erg=erg .. "<br>Gelesen:" .. ctrorg .. ' und ' .. flgpic end
return ff
end
function p.test(frame)
local flglnk=""
local flgpic=nil
local hh = {}
--splitter(val)
--[[ mal sehen, was kommt --]]
local a=frame:getParent():getTitle() -- daher kommt der Aufruf
local val= string.gsub(a, "(%C+):(%C+)", "%2") --ISO extrahieren
erg="<br>Ergebnis: aus " ..val .."<br>"
hh=splitter(val) -- warum will das nicht?
--erg=erg .. '<br>flglnk=' .. fli[val].ctry
erg=erg .. '<br>flglnk=' .. hh.ctry
--[[frame = frame:getParent()
for key, val1 in pairs(frame.args) do
erg=erg .. 'K=' .. key .. ' V=' .. val1 .. "<br>"
end -- for key--]]
--return erg .. flglnk
p['I'] = 'DEU'
local r = p.f(frame)
return r .. erg
end
-- https://de.wikipedia.org/wiki/Hilfe:Lua/Modul_im_Wiki#frame:getTitle()
--------------------------
return p