Zum Inhalt springen

Modul:Benutzer:Kpfiwa/Flagge

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 25. September 2019 um 07:15 Uhr durch Kpfiwa (Diskussion | Beiträge) (Änderung 192567715 von Gadacz rückgängig gemacht;). Sie kann sich erheblich von der aktuellen Version unterscheiden.
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 '&nbsp;' ersetzt.
	--]]
	return string.gsub(k, " ", "&nbsp;")
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 .. '&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 = 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 .. '&nbsp;[['..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