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 '&nbsp;' ersetzt => NOWRAP außer bei v=1 (und mehr)
	if tblx == 0 then k = k:gsub(" ", "&nbsp;") end
	return k
end -- function nbsp
function M.nbsp(k) --Hier werden Leerzeichen durch '&nbsp;' ersetzt => NOWRAP außer bei v=1 (und mehr)
	return nbsp(k)
end -- function nbsp

function M.nopi(k) --Hier werden Pipezeichen durch '&nbsp;' ersetzt => NOWRAP
	return k:gsub("|", "&nbsp;")
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*&nbsp;%s*', '&nbsp;') -- überflüssige Leerzeichenkombinationen auf 1 nbsp reduzieren
	r = r:gsub('&#8239;<', '<') --REFs
	r = r:gsub('^%s+', '') -- Space am Zeilenbeginn
	r = r:gsub('span>&nbsp;', '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)," ", "&#8239;") .. string.sub (k, i+1) 
	else return "&#8239;" -- evtl. wäre '&thinsp;' 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 -- .. '&nbsp;'
	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 &lt;br&nbsp;/&gt;
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.

  1. 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:
  2. 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.
  3. 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.
  4. 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.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.