Benutzer:Kpfiwa/Spielwiese/Modul:Infobox Leuchtfeuer TEST
coord="45° 36′ 0″ N, 29° 53′ 24″ O
"
poka="{{Positionskarte+|Ukraine Oblast Odessa|float=center|width=250|relief=1|border=none|caption=|places=
"
flag="
Deutschland |
--[=[ Leuchtfeuer Version 1 BETA, 2021-08-01 Formatierung der Infobox Leuchtfeuer für 2 Leichttürme am gleichen Ort (Molenfeuer, Richtfeuer etc.) --]=]
p = {}
local lang = mw.getContentLanguage():getCode()
liste = "Modul:Benutzer:Kpfiwa/Infobox Leuchtfeuer/Info_" .. lang -- Modul:Benutzer:Kpfiwa/Infobox Leuchtfeuer/Info de
info = {}
local kopfzeile = {lemma, name, altname}
-- local _TEST = 'LOS\n----
\n' ..flag .. '\n' .. poka ..'\n' .. coord .. '\n{|
local _TEST = 'LOS\n----
\n{| class="wikitable float-right infobox hintergrundfarbe2 toptextcells"\n!Key!!Wert'
infobox = '{| class="wikitable float-right infobox hintergrundfarbe2 toptextcells"' -- Eröffnung der Box
local function fehler(txt) -- Fehlerfall; enthält Fehlermeldung return '' .. (txt or "FEHLER") .. '' end -- function fehler local erg, info = pcall(require, liste) ; fehler('Liste nicht verfügbar')-- hier noch auf Fehler abfragen
--- EVENTUELL ALLE FUNKTIONEN AUSLAGRTN! local function div(xxx) -- Trener ("Listeneinträge"), wenn was an Listen geboten, ggf auch für Bemerkungsblock --Progrmm end
local function finito(xxx) -- Tabellenabschluss , ggf entbehrlich --Progrmm end
local function rem(xxx) -- Bemekungszeile (ggf (I) automatisch --Progrmm end local function row(xxx) -- normale Zeile, ggf. zusammengefasst wenn vr='=' oder vl==vr --Progrmm end local function seamap(xxx) -- berechnen, wird via pos eingefügt. evtl. dort einbringen --Progrmm end
local function sm(xxx) -- Berechnung Semeilen sm2km|1|1 oder ggf abfragen, ob da sm, -- oder km bereits steht, dann 1:1 übernehmen ggf <rem> akzeptieren --Progrmm end
local function top(xxx) -- Rabellenstart, ggf entbehrlich --Progrmm end
local function head(lemma, name, altname) -- Überschrift local erg = '\n!colspan="3" style="text-align:center"|' erg = erg .. name or lemma if altname then
erg = erg .. "
" .. altname
end return erg end -- function haed
local function pic(p1, p2, c1, c2) -- Bild/er local erg = "\n|" if p1 == p2 or p2 == "=" then
erg = erg .. 'colspan="3" style="text-align:center"|
"
if c1 then
erg = erg .. "
" .. c1 -- ohne 2. Bildunterschrift
end
else
erg = erg .. " ||"
if p1 then -- 1. Bild, notfalls leer
erg = erg .. 'style="text-align:center"|
"
if c1 then
erg = erg .. "
" .. c1
end -- 1. Bildunterschrift
end
erg = erg .. "||"
if p2 then -- 2. Bild
erg = erg .. 'style="text-align:center"|
"
if c2 then
erg = erg .. "
" .. c2
end -- 2. Bildunterschrift
end
end
return erg
end -- function pic
local function unique(txt) -- muss mit einzelnen Umlauten sein, da es sonst knirscht wg. UTF-8!! txt = txt:gsub("%s", "") -- alle Leerzeichen weg, somit auch keine doppelten txt = txt:gsub("ö", "OE") txt = txt:gsub("Ö", "OE") -- Umlaute einzeln umbauen, da UTF-8 mitunter Ärger macht txt = txt:gsub("ü", "UE") txt = txt:gsub("Ü", "UE") txt = txt:gsub("ä", "AE") txt = txt:gsub("Ä", "AE") txt = txt:gsub("ß", "SS") txt = txt:gsub("[%_%-%‐%‑%–%—]+", "") -- alle Striche weg, dann gibt es keine Verwechslungen txt = txt:gsub("%++", "1") -- Alle + werden 1, dann kann es nie mit Additions-+ versechselt werden return string.upper(txt) -- Alles auf Versalien, damit ist das ewige Leid bei den Vorlagen behoben. end -- function unique
function pos(latlon, dir) -- einheitliches Format bei Positionen, Positionsberechnung
-- Seamap berechnen, Erstellen der Lagekarte mit beiden Positionen (colspan=2)
local ll, erg, llm, lls, ns, corr, max = {}, 0, 0, 0, 1, 360, 180
--[[ NSOW auswerten, nur WS ist interessant da negativ; shit für Franzosen mit 'Ouest'
evtl über Sprache abwickeln--]]
if dir == "[sSwW]+" or latlon:find("[wsWS]+") then -- für SW (max 90°), oder NE (180°)
corr = 180
max = 90
ns = -1
if latlon:find("[wsWS]+") then
ns = -1
end
end -- if dir
-- vorab alle Eingabefehler ausgleichen
latlon = latlon:gsub("%s", "") -- alle Leerzeichen weg
latlon = latlon:gsub(",", ".") -- Dezimalkomma wird Dezimalpunkt
latlon = latlon:gsub("[%°]+", "/") -- konventionelles Gradzeichen umsetzen:° ist UTF8, deswegen separat
latlon = latlon:gsub('[%\'"]', "/") -- konventionelle Min. umsetzen
latlon = latlon:gsub("//", "/") -- falls Sekunden mit "" angegeben
ll = {string.match(latlon, "(%d+)/([%d%.]*)/*([%d%.]*)/*(%a*)")} -- Grad, min, sec, Richtung aufdröseeln
ell = {string.match(latlon, "(%d+)/([%d%.]*)/*([%d%.]*)")} -- Grad, min, sec aufdröseeln
erg = ll[1] * 1
llm = ll[2] * 1
lls = ll[3] * 1 -- billiger als tonumber
-- Falsche Gradeingaben korrigieren (EW)>180, NS>190
if erg > max then
erg = erg - corr
end
if llm > 60 then
llm = 60
end -- Fehlertoleranz, zuviel ergibt dann 1°
if lls > 60 then
lls = 60
end -- ergibt 1'
erg = ((((lls / 60) + llm) / 60) + erg) * ns -- eigntliche Dezimalumrechnung
return math.floor(erg * 10 ^ 7 + 0.5) / 10 ^ 7 -- gerundet auf max 7 Stellen, as reicht total
end -- function pos(latlon)
local function rows(label, col1, col2) -- eine Tabelenzeile zusammensetzen, ggf. übergehen local row = "" -- verarbeiten; wenn beide gleich oder col2 == '=', dann Wert zentriert einbringen mit colspan=2 if label and (col1 or col2) then row = "|- " .. label .. "||" if col1 == col2 or col2 == "=" then -- evtl '=' noch bereinigen von Doppel-/Folgezeichen row = row .. 'colspan="2" align=center|' .. col1 else row = row .. col1 or "" .. "||" .. col2 or "" end end return row end -- function rows
local function writeval(k, v) -- schreibt Wert in k= KEY "Muttereintrag" vl, bei KEY1 nach vr local v = "vl" local i = string.find(k, "%d", -1) if i then k = (string.sub(k, 1, i - 1)) c = "vr" end info[k][c] = v end -- function writeval
function p.f(frame) info.LEMMA.val = frame.args["seitenname"] -- falls NAME= NIL ist wird der Lemmaname übeernommen if info.NAME.val == NIL then info.NAME.val = info.LEMMA.val -- sollte unter NAME geschrieben wegden, wotd ggf. überschrieben durch para NAME end _TEST = _TEST .. "\n|-\n| kopfzeile[lemma]|| " .. info.NAME.val or "NIXLEMMANAME" local frame = frame:getParent() for key, val in pairs(frame.args) do -- Alle Parameter sammeln und Zeilen zuordnen key = unique(key) -- Umlaute usw. vereinheitlichen, alles Versalien, dann werden Schreibfehler ausgeglichen --{[ das muss über eine Tabelle ablaufen, etwa so if key == info.key then info.vall = val end -- eher ein Wert, typ und letzte 1 (Name1) auswerteen, nach ohne1 schreiben _TEST = _TEST .. "\n|-\n| " .. (key or 0) .. " || " .. (val or "NONIX") -- TESTVERSION end -- for key -- jetzt die Zeilen der Reihenfolge nach in die entsprechende Funktion jagen und an 'infobox ' anhängen, letzter Eintrag = '\n|}\n' -- return 'AAA: ' .. _TEST ..'BBB: ' .. info.NAME.val.. '\n|}' -- ["LAGEHOEHE"] = {label="Höhe Turmbasis: --return 'AAA: ' .. _TEST ..'BBB: ' .. info.BILD.vl .. '\n|}' return _TEST end -- function p.f(frame)
return p