Modul:Benutzer:Kpfiwa/scripts
Die Dokumentation für dieses Modul kann unter Modul:Benutzer:Kpfiwa/scripts/Doku erstellt werden
local M = {}
local flagborder = ''
local fli = {}; local werte={}
local hstd = 12 -- Logohöhe default -- ist via h=??? beeinflussbar
local lang = mw.getContentLanguage():getCode()
local logowidth = 20 -- die historische Weitenangabe
local messagePrefix = "lua-module-Flagge-"
local p = {}
local width = 20 -- nominelle Standartbreite bei 12 hstd
local wstd = 99 -- theoretische Vorgabe für Signet, wird ggf. überschrieben mit wstdF oder wstdW
local wstdF = 31 -- mit Rand, gemessen an Katar (28) Iran hatte aber schon 3:1, müsste hier also ~51 sein
local wstdW = 14 -- für Wappen mit Rand, gemessen an 12x12, also quadratisch
local listlang= "Modul:Sprachen"
-- local listlang = "Modul:Benutzer:Gadacz/Sprachen"
local pl={'l','f','lf','w','h','b','o','lt','q','a','p','s'}
local tblx, dd, dl1, dl2, dt1, dt2, tdm = 0, 0, '', '', '', ''
local tblxw = 100
local ksp, sp = ', ', ' '
local ref = string.format("%c%c%c", 127, 39, 34) -- um <ref zu erkennen
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
function M.tu(a,z) return tu(a,z) end -- da mehrfachaufruf intern
function M.trim(s) -- entfernt überflüssige führende und/oder anhängende Leerzeichen
return s:match "^%s*(.-)%s*$"
end
function M.emph(lt, was) -- Emphasis, Schriftauszeichnung für Linktext gem. Vorlagen-Parameter 'd= ...' (Dekoration)
local ende, css = '',''
if not was or #was < 1 then return lt or '' end -- undekorierte Rückgabe des Linktextes
if #was <= 6 then -- was größer ist, wird eine direkt eingegebene css-Anweisung sein
was = string.upper(was)
for e in string.gmatch(was, ".") do -- teilen falls mehrere Parameter
if e == 'F' or e == 'B' then css = css .. "font-weight:bold;"
elseif e == 'K' or e == 'I' then css = css .. "font-style:italic;"
elseif e == 'U' then css = css .. "text-decoration:underline;"
elseif e == 'V' then css = css .. "text-transform:uppercase;"
elseif e == 'C' then css = css .. "font-variant:small-caps;"
elseif e == 'G' then css = css .. "letter-spacing:0.3em;"
end -- if e
end -- for e
else -- if #e
was = string.gsub(was,"['%\"]+",'') -- evtl. Anführungszeichen rasieren
css = string.gsub(was,"[%w]+%s*=%s*",'') -- falls versehentlich mit 'string=' eingeleitet wurde
end -- if #e
-- print(#was,css,was)
if #css > 1 then css = '<span style="' .. css .. '">'; ende = "</span>" end
return css .. lt .. ende
end
function M.loli(v) --
local lang = mw.getContentLanguage():getCode()
local Liste = "Modul:Flagge/Flaglist_" .. lang .. '_' .. tu(v)
return mw.loadData(Liste)
end
local function nbsp(k) --Hier werden Leerzeichen durch ' ' ersetzt => NOWRAP außer bei v=1 (und mehr)
if tblx == 0 then k = k:gsub(" ", " ") end
return k
end -- function nbsp
function M.nbsp(k) --Hier werden Leerzeichen durch ' ' ersetzt => NOWRAP außer bei v=1 (und mehr)
return nbsp(k)
end -- function nbsp
function M.nopi(k) --Hier werden Pipezeichen durch ' ' ersetzt => NOWRAP
return k:gsub("|", " ")
end -- function nbsp
function M.putze(r)
r = r:gsub(',%s*,%s*,*',', ') -- Mehrfachkomma reduzieren
r = r:gsub('[%.%?!,]+%s*$','') -- Satzzeichen am Zeilenende streichen
r = r:gsub('%s+([,%.;:!%?\'\"])', '%1') -- überflüssige Leerzeichen vor Satzzeichen löschen
r = r:gsub('%s* %s*', ' ') -- überflüssige Leerzeichenkombinationen auf 1 nbsp reduzieren
r = r:gsub(' <', '<') --REFs
r = r:gsub('^%s+', '') -- Space am Zeilenbeginn
r = r:gsub('span> ', 'span>') -- Space am Zeilenbeginn nach Sortiereintrag ( ) . % + - * ? [ ^ $
return r
end -- putze
local function nnbsp(k,i) --[[ Hier wird statt ' ' ein schmales, geschütztes
Leerzeichen => NOWRAP eingefügt bzw. (wenn k) ersetzt ' ' ]]
if k then
i = i or 15 --[[ falls ohne i dann nur die SPACE innerhalb der 15 Zeichen
ersetzen, um sehr langen Texten (siehe GBR) Umbruch zu ermöglichen ]]
return string.gsub(string.sub(k, 1, i)," ", " ") .. string.sub (k, i+1)
else return " " -- evtl. wäre ' ' besser
end -- if k
end -- function nnbsp
function M.nnbsp(k,i) --
return nnbsp(k,i)
end -- function M.nnbsp
function M.sortclean(k)
-- In der Liste stören im Lemma vorhandene Sonder-/Satzzeichen bei der Sortierung. Daher radikal putzen
return k:gsub("%A+", "")
end
local 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 -- round
function M.round(val,decimal) -- css will bei zu vielen Nachkommastellen streiken
return round(val,decimal)
end -- M.round
function M.fpic(o,werte,logowidth,flglnk) -- setzt die Grafik mit entsprechenden Links zusammen
local noflag = 'Flag_of_None.svg'
if nopic then return end
local fl = tonumber(flglnk)
local h, w
local nowrap = 'white-space:nowrap;'
local f = werte.f or noflag-- Grafik/Flagge
if werte.h and werte.w then --falls es Größeneintrag gibt, ...
h = werte.h; w = werte.w -- Höhe, Breite
else -- ... sonst via FileMedia.get... Das ist aber 'teurer'!
local FileMedia = require("Module:FileMedia")
FileMedia = FileMedia.FileMedia()
h = FileMedia.getHeight(f) -- Höhe
w = FileMedia.getWidth(f) -- Breite
end
if wstd == 99 then wstd= w + 2 end -- Anpassung für Signet
flgpic = f -- Bilddatei (File: ..) -- statt Datei: da 'international'
if fl == 1 then flglnk = '|link=' .. (werte.lf or flgpic) -- Flaggenlink
elseif fl == 2 then flglnk = '|link=' .. werte.l or linkziel -- Link der Flagge auf Land
elseif fl == 0 then flglnk = ''
else flglnk = '|link=' .. linkziel or flgpic
end -- if tonumber(flglnk)
if werte.b == 1 then flagborder = '|border' or '' end -- Bildrand 'international'
--[[ setzt den Bildaufruf zusammen
dabei werden Größenangaben aus der Liste berücksichtigt und ggf. gem WIDTH neu berechnet.
Ein Problem bleibt bei Listen/Tabellen, die z.B. historische Flagge vom Iran enthalten, da dort 3:1 --]]
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
if margins < 0 then margins = 0 end -- Versuch, überbreite Flaggen wie die alte Iran und UNESCO stümperhaft auszugleichen
margin_half = margins/2
local file = '[[File:' .. flgpic .. '|x' .. hightreal .. 'px' .. flglnk .. flagborder .. '|class="noviewer nomobile"]]'
if o == 'C' then return file -- .. ' '
elseif o == 'W' then -- Zeilenumbruch (wrap) erlaubt, Flagge an Text
rightmrg, leftmrg, nowrap = 0, 0, ''
elseif o == 'L' then -- linksbündig
rightmrg, leftmrg = margins, 0
elseif o == 'R' then -- rechtsbündig
rightmrg, leftmrg = 0, margins
elseif o == 'N' then --
rightmrg, leftmrg = 0, 0
else
leftmrg, rightmrg = margin_half, margin_half
end -- if o
return '<span style="margin:0px ' .. rightmrg .. 'px 0px ' .. leftmrg .. 'px;' .. nowrap .. '">' .. file .. '</span>', nowrap
end
local function nonum(key) -- filtert Parameter-Nummern wie 1 oder "1" raus
if type(tonumber(key)) ~= "number" then return true end
end
function M.nonum(key)
return nonum(key)
end
function M.is_in(tab, val)
for index, value in ipairs(tab) do
if value == val then return true end
end
return false
end
function M.orf(v)
v = tu(v)
local t = {'L', 'R', 'N', 'W', 'C', '#'}
--[[ 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
C: wie # aber ohne Lerräume --]]
for index, value in ipairs(t) do
if value == v then
return v
end -- if value
end -- for ...
return false
end -- orf (v)
local function split(s) -- Trennt kombinierte Spracheingaben wie აფხაზეთი|Apchaseti
local erg = {}; local trenner='|'
local starte = 1
local sps, spe = s:find('|',1)
while sps do
table.insert(erg,s:sub(starte,sps-1))
starte = spe+1
sps, spe = s:find(trenner,starte)
end -- while sps
table.insert(erg,s:sub(starte))
if erg then
r1 = nnbsp(erg[1]) or ''; r0 = r1
if erg[2] then r2 = " ''" .. nnbsp(erg[2]) .. "''"
r0 = r1 .. " ''" .. r2 .. "''"
end -- if erg[2]
end -- if erg
return r0, r1, (r2 or '')
end -- function split
function M.split(s) return split(s) end
local function ssl(lkz,r,val) -- wird nur für dewiki gebraucht, da Vorlage:lang zu viel Mist baut
local ret = ', '; local geladen={}
if tblx > 0 then ret = ',<br>' end -- muss cr statt Space einbringen
local schreibrichtung = ' dir="ltr" '; local nenne ='?'
if type(tonumber(lkz)) ~= "number" then
if #r > 1 and dd ~= 1 then ret = ', ' end
geladen = mw.loadData(listlang)
v0, v1, v2 = split(val) -- v0 wird hier nicht gebraucht
local sprach = geladen[lkz]
if sprach.n then -- einfach Lemma übernehmen
nenne=sprach.n
else
nenne = sprach.l or ''
nenne, anz = string.gsub(nenne,"%s+%(Sprache%)", "")
if anz < 1 then
nenne, anz = string.gsub(nenne,"e%sSprache[n]*", "")
if anz >0 then nenne = string.lower(nenne) end
end -- if anz
end -- if sprach.n
if sprach.d and tu(sprach.d,3) == "RTL" then schreibrichtung = ' dir="rtl" ' end
--[=[ ret = ret .. '<span style="white-space:nowrap">[[' .. sprach.l .. '|'
.. nenne .. ']] <bdo' .. schreibrichtung .. ' lang="' .. lkz .. '">'
.. v1 .. '</bdo></span> ' .. nnbsp(v2,20)
--]=]
ret = ret .. '[[' .. sprach.l .. '|'
.. nenne .. ']] <bdo' .. schreibrichtung .. ' lang="' .. lkz .. '">'
.. v1 .. '</bdo> ' .. nnbsp(v2,15)
end -- if type
return ret
end
function M.ssl(lkz,r,val) return ssl(lkz,r,val) end
function M.tail(v,n) -- bastelt das "Schwänzle" zusammen (falls es entsprechende Listeneinträge gibt)
local r=', '
linktext = linktext or v
n = tonumber(n)
if n <= 0 then n=math.abs(n); nopic=1 end
if (type(v) == "table") then
for lkz, value in pairs(v) do
if lkz == 1 and n == 2 then return r .. split(value)
elseif n == 3 or n == 4 then r = r .. ssl(lkz,r,value)
elseif n == 5 then
if nonum(lkz) then
r = r .. ssl(lkz,r,value)
else r = r .. ', ' .. split(value)
end -- if nonum(lkz)
else
if lkz==1 then linktext = split(value) end -- default
end -- elseif n == 5
end -- for
else
if n == 1 then linktext = v; r='' end
end -- (type(v))
return r
end -- function tail (v,n)
function M.linkex(txt) --[[löst Links auf, da die sich überscneiden können, wenn der Text zum Linktext wird
warum eine Kombi bei den regex nicht funktioniert, bleibt mir schleierhaft --]]
local ret, anz = string.gsub(txt, '<ref>[^%<.]*</ref>', '') -- strip HTMLs mit eingschlossenem Text (hier <ref>, könnte man zu <div>, <span> .... erweitern)
ret, anz = string.gsub(ret, '(%[[%l%.]%S*%s', '') -- strip ‚[http... NAME]‘ → ‚NAME]‘
ret, anz = string.gsub(ret, '%[%[.*|', '') --strip [[Lemma|Wort]] → ‚WORT]]‘
ret, anz = string.gsub(ret, '%[', '') -- strip verbleibende ‚[‘
ret, anz = string.gsub(ret, ']', '') -- strip alle verbleibenden ‚]‘
return ret
end
function M.valkombi(fl,val)
local tbl = {}
if not fl[val] then return {Ergebnis="<span class=\"error\">Falsche Eingabe</span>"} end
local valp = fl[val].p or string.sub(val, 1, 3) -- Feststellung, ob ein "Mastereintrag" existiert. valp für parenteintrag via
if not fl[valp] then valp = string.sub(val, 1, 3) end -- könnte sich ja ein Fehler eingeschlichen haben
if not fl[valp] then -- z.B. wenn Vorlage = GB-SCO, dann bringt 'GB-' nix
valp = fl[val].p or val
end
for nix, key in ipairs(pl) do
tbl[key] = fl[val][key] or (fl[valp][key] or nil)
--[[ sammelt die Listeneinträge bei Priorität
1. Flaggenkey (z.B. ARB-1977)
2. Listeneintrag p='Sonstwas'
3. verkürzter 'Master-Eintrag' ARB --]]
end -- for nix, key
return tbl
end -- valkombi
function M.exhtml(a)
return string.gsub(a, '%s+/>', '>') -- Lua-Murks korrigieren, macht aus XHTML <br /> ein <br />
end --exhtml
function M.a2h(v) -- nur zu Testzwecken via x=...
local u="'''U=''' " .. mw.text.unstrip( v)
local erg="'''A='''" .. v .. "''' X='''"
local ergd="'''D=''' "
for i=1, #v do
zwerg= string.byte(v, i)
erg= erg .. string.format("0x%x ", zwerg)
ergd= ergd .. string.format("%d; ", zwerg)
end
return erg .. "<br>" .. ergd .. "<br>" .. u
end
return M
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.