User:Lilyuserin/Lua/Modul:Dok

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
local p = {} -- p stands for package

local ruler      = '<hr style="background-color:#b3b7ff; clear:both; height:.7ex; margin:1em 0;" />'
local template   = mw.site.namespaces.Template.name .. ':'
local code_style = 'font-family:&quot;Consolas&quot;, monospace;'

local anzeige  = '<div style="background-color: #aaa;width:90%; border-radius: 1em; box-shadow: 0.1em 0.1em 0.5em rgba(0,0,0,0.75);;padding:0.5em;"><div style="background-color: #fff;padding:1em; border-radius: 0.5em;"><span style="' .. code_style .. ' white-space:pre-wrap">'
local anzeige_ = '</span></div></div>'

function p.doc(frame)
	-- dieser Modul ersetzt die Vorlage documentation
	-- und ist abwärtskompatibel, d.h. alte bestehende Dokumentationsseiten werden eingebunden
	-- wenn die Dokumentationsunterseite existiert, wird sie eingebunden
	-- wenn nicht, wird ein Hinweis mit entsprechender Input-Box erzeugt
	
	local doc     = frame.args.doc or 'doc' --- Möglichkeit die Dokumentationsunterseite anders zu benennen
	local preload = frame.args.preload or template .. 'Documentation/preload-doc'
	local vorlage = frame.args.vorlage or mw.title.getCurrentTitle().rootText
	local cat     = frame.args.cat or frame.args.kat or frame.args.kategorie or 'Vorlagen'
	local nocat   = frame.args.nocat or frame.args.nokat or frame.args.keinekat
	local hidden  = not(frame.args.show or frame.args.zeigen) -- Vorlage ist  verborgen
	
	local _vorlage = template .. vorlage
	local dok      = vorlage .. '/' .. doc   -- Name ohne Namespace
	local _doc     = template .. dok         -- mit Namespaceprefix
	
	local _, mycat, result = '', '', ''
	-- wenn die zu dokumentierende Vorlage nicht existiert, dann Programm beenden
	local dievorlage = p.gibts(vorlage)
	if not dievorlage then return "Die Vorlage " .. vorlage .. " existiert nicht" end
	
	local verborgen = (hidden and '<div>Die Vorlage <span style="' .. code_style .. ' background-color:yellow;padding:0 0.5em">' .. vorlage .. '</span> ist nur auf eingebundenen Seiten voll sichtbar und auf dieser Seite versteckt.</div>' ) or ''

	local duhast = 'Du hast die Vorlagendokumentation mit dem Befehl <span style="' .. code_style .. '">{{#invoke:Dok|doc|...}}</span> eingebunden und willst die Dokumentation von der Unterseite <span style="' .. code_style .. '">' .. dok .. '</span> einbinden. Über mögliche Parameter und ihre Verwendung kannst du [[Modul:Dok/Doku| in der Dokumentation zum aufgerufenen Modul <i>Dok</i> nachlesen.]]'
	
	local diedokumentationsunterseite = '<div class="messagebox" style="margin-top:1em; clear: both; border: 2px dotted #666666; padding: 0.6em; background-color: #ccffff; text-align: center; ">Die Dokumentationsunterseite <span style="' .. code_style .. '">{{[[' .. _doc .. '|' .. dok..']]}}</span> ist nicht vorhanden.</div>'
	
	local damitdie = 'Damit die Dokumentation wie vorgesehen funktioniert, ist es erforderlich, dass du für deine Vorlage <span style="' .. code_style .. '">{{[[' .. _vorlage .. '|' .. vorlage .. ']]}}</span> die Unterseite <span style="' .. code_style .. '">{{[[' .. _doc .. '|' .. dok..']]}}</span> anlegst.\nDas kannst du mit der Eingabebox unterhalb dieses Text durchführen, dadurch wird eine vorausgefüllte Seite basierend auf der Seite <span style="' .. code_style .. '">{{[[' .. preload .. ']]}}</span> erzeugt. Eine leere Seite kannst du mit dem (vermutlich) roten Link anlegen.\n\n'
	
	local input = '<div style="float:left" class="neu"><inputbox>\ntype=create\nbreak=no\nwidth=40em\nbuttonlabel=Dokumentationsunterseite anlegen\ndefault=' .. _doc .. '\npreload=' .. preload .. '\n</inputbox></div><div style="clear:both;"></div>'
	local inputbox = frame:preprocess('\n\n' .. input)
	local subpages = frame:preprocess('\n==Eine Liste der bereits vorhandenen Unterseiten==\n{{:Special:PrefixIndex/Template:' .. vorlage .. '/}}')

    local docu_info = '{| class="plainlinks" id="Dokumentation.Info" style="border-collapse:collapse; margin:2px 0;"\n' .. '| class="noviewer" style="padding:5px; vertical-align:top; width:40px;" | [[Datei:Info-Icon.png|30px]]\n' .. '| style="padding:0; width:100%;" |<ul>' .. '{{Special:PrefixIndex/Template:' .. vorlage .. '/}}'
    local dokgibts = p.gibts(dok)
	if dokgibts then -- Unterseite doc gibts
		local doku, layout, bearbeiten
		local linkliste = frame:preprocess('[{{fullurl:Spezial:Linkliste/Template:' .. vorlage .. '|hideredirs=1&hidelinks=1}} Verwendungen]') .. ' dieser Vorlage'
		local Unterseiten = frame:preprocess('[[Special:Prefixindex/' .. _vorlage .. '/|Liste der Unterseiten]]')
		doku = frame:expandTemplate{ title = _doc, args = {} }
		layout = p.layout(frame)
		bearbeiten = p.bearbeiten(_vorlage)
		
		-- Link zu Verwendungen der Vorlage und Unterseiten (Parameter zum Einbinden vorsehen?)
		local docu_info = frame:preprocess('<references />') .. ruler .. '\n{| class="plainlinks" id="Dokumentation.Info" style="border-collapse:collapse; margin:2px 0;"\n' .. '| class="noviewer" style="padding:5px; vertical-align:top; width:40px;" | [[Datei:Info-Icon.png|30px]]\n' .. '| style="padding:0; width:100%;" |<ul><li>' .. Unterseiten .. '</li><li>Diese Dokumentation befindet sich [[' .. _doc .. '|auf einer eingebundenen Unterseite]] <span style="font-size:85%; margin-left:1em;">&#91;[' .. tostring(mw.uri.fullUrl( _doc, 'action=edit')) .. ' Bearbeiten]&#93;</span>.</li><li>' .. linkliste .. '</li></ul>\n|}'		
		result = bearbeiten .. verborgen .. ruler .. layout .. doku .. docu_info
	else
		local mytitel = frame:preprocess('\n==Vorlageninhalt==\n')
		local ShowMe = p.wrap(p.Show(dievorlage))
		result = duhast .. diedokumentationsunterseite .. damitdie .. inputbox .. mytitel .. ShowMe .. subpages
	end -- Unterseite doc gibts
	
	-- Kategorisieren
	if not nocat then -- die Vorlage soll kategorisiert werden
		mycat = '[[category:' .. cat ..']]'
	end
    return result .. mycat
end

function p.bearbeiten(vorlage)
	
	-- dieser Modul erzeugt ein Kästchen mit punktiertem Rahmen
	-- mit Links zu verschiedenen Anzeigemöglichkeiten der Vorlage, bearbeiten, Versionsgeschichte etc.
	
	local frame = mw.getCurrentFrame()
	local _vorlage = vorlage
	
	local divspan = '<div style="margin: 0.5em;border: 2px dotted #666666; padding: 0.5em;display:inline-block"><span class="mw-editsection plainlinks" style="padding:0em 1em 0em 0em;" >'
	local edit    = mw.uri.fullUrl( _vorlage, 'action=edit' )
	local history = mw.uri.fullUrl( _vorlage, 'action=history' )
	local purge   = mw.uri.fullUrl( _vorlage, 'action=purge' )
	local qqx     = mw.uri.fullUrl( _vorlage, 'uselang=qqx' )
	local info    = mw.uri.fullUrl( _vorlage, 'uselang=info' )
	
	local result = '[' .. tostring(edit) .. ' Bearbeiten] · [' .. tostring(history) .. ' Versionen] · [' .. tostring(purge) .. ' Cache leeren] · [' .. tostring(qqx) .. ' Messages] · [' .. tostring(info) .. ' Seiteninformation]'
	result = divspan .. result .. '</span></div>\n'
	return result 
end

function p.layout(frame)

	-- dieser Modul erzeugt das blaue Hinweiskästchen mit der Überschrift "Vorlagendokumentation"
	-- dem Hinweisicon File:Template-info.png
	-- und den Links zum Bearbeiten der Dokumentationsunterseite
	
	local frame = mw.getCurrentFrame()
	local vorlage = frame.args.vorlage or mw.title.getCurrentTitle().rootText
	local doc = frame.args.doc or 'doc' --- Möglichkeit die Dokumentationsunterseite umzubenennen
	
	local _vorlage = template .. vorlage
	local dok = vorlage .. '/' .. doc   -- Name ohne Namespace
	local _doc = template .. dok        -- mit Namespaceprefix
	
	local divspan = '<div style="margin:1em; clear: both; border: 2px dotted #666666; padding: 0.6em; background-color:#ccffff;"><div style="padding-bottom:3px; border-bottom:1px solid #aaa; margin-bottom:1em;"><span style="font-size:150%">[[File:Template-info.png|50px]] Vorlagendokumentation</span><span class="mw-editsection plainlinks">'
	
	local edit    = mw.uri.fullUrl( _doc, 'action=edit' )
	local history = mw.uri.fullUrl( _doc, 'action=history' )
	local purge   = mw.uri.fullUrl( _doc, 'action=purge' )
	local info    = mw.uri.fullUrl( _doc, 'action=info' )
	
	local result = ' [' .. tostring(edit) .. ' Bearbeiten]&nbsp;·&nbsp;[' .. tostring(history) .. ' Versionen]&nbsp;·&nbsp;[' .. tostring(purge) .. ' Cache leeren]&nbsp;·&nbsp;[' .. tostring(info) .. ' Seiteninformation]'
	result = divspan .. result .. '</span></div>\n\n'
	
	local small = "''<small>Diese [[Module:Dok/Doku|Vorlagendokumentation]] wird von der Seite [[" .. _doc .. "]] eingebunden.</small>''</div>"
	return result .. small

end

function p.ptab(frame)
  -- erstellen der Parametertabelle einer Vorlage
  -- einziger Unterschied zum Unterprogramm: das 2. Ergebnis wird verworfen

  local _
  _ = p.tabelle(frame)
  return _

end

function p.dokuseite(frame)
   -- dieser Modul wird in die Dokumentationsunterseite eingebunden
   -- aber nicht in die Vorlage inkludiert
   -- erzeugt einen Link zur Vorlage und ein Bearbeiten-Kästchen

   local _vorlage = frame.args.vorlage or mw.title.getCurrentTitle().rootText
   local vorlage = 'Template:' .. _vorlage
   local dok = frame.args.dok or 'doc'
   local _dok = vorlage .. '/' .. dok

   local rohhtml = '<table style="border-style:solid; margin-bottom:2px; margin-top:2px; border-color:MediumSlateBlue"><tr><td>[[File:Info-Icon.png|30px]]</td><td style="width: 100%;">Diese Seite ist die Dokumentations-Unterseite der [[' .. vorlage .. '|<b>Vorlage ' .. _vorlage .. '</b>]]</td></tr></table>'

   local divspan = '<div style="margin-bottom: 0.5em;border: 2px dotted #666666; padding: 0.5em;display:inline-block"><span class="mw-editsection plainlinks" style="padding:0em 1em 0em 0em;" >'
   local edit    = mw.uri.fullUrl( _dok,    'action=edit' )
   local history = mw.uri.fullUrl( _dok,    'action=history' )
   local purge   = mw.uri.fullUrl( _dok,    'action=purge' )
   local qqx     = mw.uri.fullUrl( _dok,    'uselang=qqx' )
   local info    = mw.uri.fullUrl( _dok,    'action=info' )
   local editv   = mw.uri.fullUrl( vorlage, 'action=edit' )
   local infov   = mw.uri.fullUrl( vorlage, 'action=info' )

   local result = '[' .. tostring(edit) .. ' Bearbeiten] · [' .. tostring(history) .. ' Versionen] · [' .. tostring(purge) .. ' Cache leeren] · [' .. tostring(qqx) .. ' Messages] · [' .. tostring(info) .. ' Seiteninformation] · [' .. tostring(editv) .. ' Vorlage bearbeiten] · [' .. tostring(infov) .. ' Seiteninformation Vorlage]'
   result = divspan .. result .. '</span></div>\n'

   return result .. rohhtml .. frame:preprocess('__NOTOC__')
end

function p.doku(frame)
	
	-- dieser Modul konstruiert die Dokumentationsunterseite vorlage/doc

	-- Parameter mit Voreinstellungen
	local count    = frame.args.count or 0 
	local vorlage  = frame.args.vorlage or mw.title.getCurrentTitle().rootText
	local erzeugt  = frame.args.text or "erzeugt etwas Tolles, sonst gäbe es sie nicht."
	local rubrik   = frame.args.rubrik or "AlleListen"
	local trnzn    = string.gsub(frame.args.trennzeichen or ',;','%p', '%%%0')  -- Trennzeichenliste für die Verwendungsbeispiele
	local klappbar = YesNo(frame.args.klappbar, true)
	local geklappt = YesNo(frame.args.geklappt, false)
	local leeranw  = YesNo(frame.args.anw0, true)  -- anw0=no: kein Anwendungsbeispiel ohne Parametervorgaben
	
	local expand   = YesNo(frame.args.expand, true) -- soll Vorlageninhalt standardmäßig expandiert werden
	local render   = YesNo(frame.args.render, true) -- soll Vorlageninhalt standardmäßig gerendert werden

	-- Variablen für Formatierung
	local div_blue = '<div style="width:100%;margin-top:1em; clear: both; border: 2px solid blue; padding: 0.6em">'
	local div_inlineblock = '<div><div style="display:inline-block;background:#acf;color:black;padding: 0.1em 0.8em;width:auto">'
	local div_dotted = '</div></div><div style="width:95%;margin-top:1em; clear: both; border: 2px dotted #666666; padding: 0.6em">'
	local ergibt_gerendert = div_inlineblock .. 'ergibt gerendert:' .. div_dotted
	local ergibt_expandiert = div_inlineblock .. 'ergibt expandiert:' .. div_dotted

	-- zusammengesetzte Texte
	local tl = '<span style="' .. code_style .. '">{{[[Vorlage:' .. vorlage .. '|' .. vorlage .. ']]' .. '}}</span> '
	local diese_vorlage = '\nDie Vorlage ' .. tl .. erzeugt
	local _vorlage = '{{' .. vorlage -- Vorlage mit geschweiften Klammern zu Beginn
	local _vorlage_ = _vorlage .. '}}' -- Vorlage von geschweiften Klammern umschlossen
	
	-- lokale Parameter
	local vorlagenliste, i, template,ShowMe = ''
	local parametertabelle, muster, anw0, kopiervorlage = '', '', '', ''
	local expanded, rendered
	
	-- wenn die zu dokumentierende Vorlage nicht existiert, dann Programm beenden
	local dievorlage = p.gibts(vorlage)
	if not dievorlage then return "Die Vorlage " .. vorlage .. " existiert nicht" end
	ShowMe = frame:preprocess('\n==Code==\n') .. p.wrap(p.Show(dievorlage)) -- Vorlageninhalt anzeigen
	if p.gibts(rubrik) then vorlagenliste = '<div>' .. frame:expandTemplate{ title = rubrik, args = { } } .. '</div>' end
	
	--erster Abschnitt, Beschreibung der Funktion der Vorlage
	local vorlagen_intro = diese_vorlage .. vorlagenliste

	--Parameterliste abarbeiten
	parametertabelle, kopiervorlage = p.tabelle()
	parametertabelle = frame:preprocess('\n==Parameter==\n') .. parametertabelle
	
	kopiervorlage  = frame:preprocess('\n==Kopiervorlage==\n<span style="' .. code_style .. '">') .. _vorlage .. kopiervorlage .. "}}</span>" -- Kopiervorlage zur Dokumentationsanwendung mit Auflistung aller Parameter

	-- Vorlagenanwendung ohne Parameter
	-- wenn expand0=false und render0=false dann nicht
	local lexpand = YesNo(frame.args.expand0, true)
	local lrender = YesNo(frame.args.render0, true)
	if leeranw then  -- Anwendung ohne Parameter
		anw0 = frame:preprocess('\n==Anwendung==\n') .. p.anwendung(_vorlage_, lrender, lexpand, klappbar, geklappt)
	else
		anw0 = ''
	end

	-- Anwendungsbeispiele
	-- alle Parameterwerte mit Beistrich oder Strichpunkt getrennt
	-- wie im Vorlagenaufruf, nur mit einem anderen Trennzeichen
	-- mit raw⧼n⧽ kann die Anwendung im Rohformart eingegeben werden
	-- geschwungene Klammern müssen maskiert werden, sonst wird die Vorlage vor dem Lua-Aufruf transkludiert
	-- öffnende Klammern mit vonangestelltem Backslah: \{ 
	-- schließende Klammern mit nachgestelltem Slash: }/
	-- Pipezeichen müssen als {{{!}}} oder ! geschrieben werden
	
	for i=1,10 do -- mehr als 10 Anwendungsbeispiele werden kaum sinnvoll sein
		 local u, liste, ergibt, anwendung = frame.args["aw" .. i], '', '', '', ''
		 local diese_anwendung
		 if u and u~="" then -- Anwendungsbeispiel mit Index i gefunden
			local raw  = frame.args['raw' .. i] -- die i-te Anwendung im Rohformat ausführen
			local lexpand = YesNo(frame.args['expand' .. i], expand) -- Voreinstellung für Expandieren ändern
			local lrender = YesNo(frame.args['render' .. i], render) -- Voreinstellung für Rendern ändern
			local lklappbar = YesNo(frame.args['klappbar' .. i], klappbar) -- Voreinstellung für Klappbar ändern
			local lgeklappt = YesNo(frame.args['geklappt' .. i], geklappt) -- Voreinstellung für Eingeklappt ändern

			if raw then
				local _
				_ = u:gsub('\\%{','%{')
				_ = _:gsub('}/','%}')
				diese_anwendung = _:gsub('!','|')
			else
				liste = '|' .. string.gsub(u, '[' .. trnzn .. ']','|') .. '}}'  -- Trennzeichen in senkrechte Striche umwandeln, default ist ',' oder ';', als Pattern %,%;
					diese_anwendung = _vorlage .. liste
			end
			anwendung = p.anwendung(diese_anwendung, lrender, lexpand, lklappbar, lgeklappt)
			muster = muster .. anwendung
		 end -- u and u~=""
	end -- for i=1,10 do 

	return vorlagen_intro .. parametertabelle .. kopiervorlage .. anw0 .. muster .. ShowMe .. frame:preprocess('__NOTOC__')

end

function p.anwendung(vorlage, xender, xxpand, xklappbar, xgeklappt)
	-- dieser Modul wertet die Vorlage "vorlage" aus
	-- der Parameter vorlage enthält den kompletten Aufruftext inklusiver sämtlicher Parameter
	-- wie er in einer Wikiseite normalerweise auftritt
	-- z.B. {{vorlagenname|parameter1=wert1|parameter2=wert2|...}}
	-- das Ergebnis der ausgewerteten Vorlage wird in der lokalen Variablen "processed" gespeichert
	-- anschließend werden alle Wikicode-Zeichen mittels mw.text.nowiki in HTML-Entitäten umgewandelt und in der Variablen "expanded" gespeichert
	-- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.text.nowiki
	-- folgende Zeichen: '"', '&', "'", '<', '=', '>', '[', ']', '{', '|', '}'
	-- weitere Ersetzungen siehe Manual
	-- render und expand steuern, ob das Ergebnis der Vorlagenauswertung als expandierter Wikitext und als Vorlageneinbindung angezeigt werden soll
	-- klappbar und geklappt erzeugen einklappbare Abschnitte
	-- Rückgabewert: ausgewertete Vorlage: 
	local frame = mw.getCurrentFrame()
	local processed, class = frame:preprocess(vorlage), '>'
	
	local expanded, gerendert, _ = '', '', ''
	
	if xklappbar or xgeklappt then
		if xklappbar then class = ' class ="mw-collapsible">' end
		if xgeklappt then class = ' class ="mw-collapsible mw-collapsed">' end
	end

 	-- Variablen für die Formatierung
	local div_blue = '<div style="width:100%;margin-top:1em; clear: both; border: 2px solid blue; padding: 0.6em"><span style="' .. code_style .. '">' .. vorlage .. '</span>'
	local div_inlineblock = '<div><div style="display:inline-block;background:#acf;color:black;padding: 0.1em 0.8em;width:auto">'
	local div_dotted = '<div style="width:95%;margin-top:1em; clear: both; border: 2px dotted #666666; padding: 0.6em"'
	local ergibt_gerendert = 'gerendert: </div></div>' .. div_dotted .. '>'
	local ergibt_expandiert = div_inlineblock .. 'ergibt expandiert: </div></div>' .. div_dotted .. class

	if not xxpand then
		 ergibt_gerendert= 'ergibt ' .. ergibt_gerendert
	end
	ergibt_gerendert= div_inlineblock .. ergibt_gerendert
	
	expanded = '<span style="' .. code_style .. ' white-space: pre-wrap;">' .. mw.text.nowiki(processed) .. '</span></div>'
	gerendert = processed .. '</div>'
	
	if xxpand then _ = ergibt_expandiert .. expanded end
	if xender then _ = _ .. ergibt_gerendert .. gerendert end

	return div_blue .. _ .. '</div>' --'ergibt gerendert:' .. ergibt_gerendert  
end

function p.tabelle(frame)
	-- dieser Modul erzeugt eine Tabelle mit den Parameterwerten
	-- zu jedem Parameter sollte ein Beschreibungstext angegeben werden
	-- es können beliebig viele Parameter eingetragen werden: count
	-- als zweiter Rückgabewert wird eine Kopiervorlage mit einer Liste aller vorhandenen Parameter übermittelt
	-- weiters kann die Breite der Tabelle sowie der Spalten geändert werden
	
	local pframe, xxx, parm_table = mw.getCurrentFrame(), '', '' --:getParent()
	local count = tonumber(pframe.args.count) or 0
	local tabwidth  = pframe.args.tabwidth  -- ändern der Breiteneinstellungen
	local descwidth = pframe.args.descwidth
	local namewidth = pframe.args.parmwidth
	local defwidth  = pframe.args.defwidth
	local mandwidth = pframe.args.mandwidth
	
	-- Konstante für Formatierung
	local table_header = '<table style="width:80%;margin-left: 0;border: 0px;border-bottom: 1px solid #666;border-collapse: collapse;text-align: left;padding: 0.5em 0 0 0;box-shadow: 4px 4px 4px #ccc;"><caption style="background-color:#666; border-radius: 1em 1em 0 0;color:#666;font-family: serif;font-size: 0.4em;border:1px solid #666;padding: 0.5em 0 0 0;>x</caption><tr style="background-color: #666;color: #fff;font-size:1.2em;font-family: serif;border:1px solid #666e;padding: 0.5em 0 0 0;"><th style="width:14%;padding-left:0.5em">Name</th><th style="width:50%;" colspan="2">Beschreibung</th><th style="width:25%">Standard</th><th style="width:16%">Status</th></tr>'
	local table_end ='</table>'
	
	-- Änderungen der Tabellenbreite für die Parameterliste
	if tabwidth  then table_header = table_header:gsub('width:80%%', 'yidth:' .. p.string2pattern(tabwidth),1) end
	if descwidth then table_header = table_header:gsub('width:50%%', 'yidth:' .. p.string2pattern(descwidth),1) end
	if namewidth then table_header = table_header:gsub('width:14%%', 'yidth:' .. p.string2pattern(namewidth),1) end
	if defwidth  then table_header = table_header:gsub('width:25%%', 'yidth:' .. p.string2pattern(defwidth),1) end
	if mandwidth then table_header = table_header:gsub('width:16%%', 'yidth:' .. p.string2pattern(mandwidth),1) end
	table_header = table_header:gsub('yidth:', 'width:')
	
	--Parameterliste abarbeiten
	for i = 1,count do 
		local _, u, j, x, desc, def, mand, fort
		j = tostring(i)
		x = pframe.args["p" .. j]
		if x and x ~= '' then -- es gibt einen Eintrag pi
			desc = pframe.args["t" .. j] or pframe.args["desc" .. j] or 'Beschreibung fehlt' -- Parameterbeschreibung
			def  = pframe.args["d" .. j]  or pframe.args["def" .. j] or 'leer'               -- Standardeinstellung
			mand = pframe.args["md" .. j]  or pframe.args["mt" .. j]                         -- verpflichtende Eingabe ja/nein
			fort = pframe.args["f" .. j] or pframe.args["fort" .. j]  -- Fortsetzungszeile der Beschreibung
			gort = pframe.args["g" .. j] or pframe.args["gort" .. j]  -- Fortsetzungszeile der Beschreibung
			zeile = p.zeile(x, desc, def, mand, fort, gort)
			parm_table = parm_table .. zeile
			xxx = xxx .. '|' .. x .. '=<br>'
		end
	end -- for i = 1,count do

	if count == 0 or count == "0" then -- Abschnitt Parametertabelle fertigstellen
		parm_table ='<div style=\"font-weight:bold\">keine</div>'
	else
		parm_table = table_header .. parm_table .. table_end
	end
	
	return parm_table, xxx
end

function p.gibts(name, namespace)
  local name = name
  local space = namespace or 'template'
  local titel = mw.title.new(space .. ":" .. name)

  if titel.exists then return titel end
  return false
end

function p.Show(titel)
	-- titel: muss eine Wiki-Seite sein
	-- diese Funktion liefert den Inhalt der Seite zurück, wobei alle Sonderzeichen in HTML-Entitäten umgewandelt werden
	-- sodass nur der Rohinhalt angezeigt wird, aber keine Inhalte geparst werden
	local titel = titel
	if titel.exists then
		--return mw.text.nowiki(mw.text.killMarkers(titel:getContent()))
		return mw.text.nowiki(titel:getContent())
	else
		return
	end
end

function p.string2pattern(str)
	return string.gsub(str, "%%", "%%%%")
end

function p.zeile(pname, beschreibung, default, optional,fort,gort)
  -- erzeugt eine Tabellenzeile für die Parameterliste

  local _ = ""
  local pname = pname
  local beschreibung = beschreibung
  local default = default or "leer"
  local optional = optional
  
  if optional == nil or optional=="" then optional="optional" else optional="erforderlich" end

  local teil1 = [[<tr style="background-image: linear-gradient(#f9f9f9, #e3e3e3); border:none; border-left: 1px solid #666; border-right: 1px solid #666;">
<td style="font-family: monospace;font-size:1.2em;padding-left:0.5em; border:none;">]]
  local teil2 = '</td><td colspan="2" style="border:none;">'
  local teil3 = '</td><td style="border:none;"><span style="color:#777; font-variant:small-caps">'
  local teil4 = '</span></td><td style="border:none;">'
  local teil5 = '</td></tr>'

  _ = teil1 .. pname .. teil2 .. beschreibung .. teil3 .. default .. teil4 .. optional .. teil5
  if fort and fort ~="" then -- Fortsetzungszeile
    _ = _ .. teil1 .. teil2 .. fort .. teil3 .. teil4 .. teil5
  end
  if gort and gort ~="" then -- 2. Fortsetzungszeile
    _ = _ .. teil1 .. teil2 .. gort .. teil3 .. teil4 .. teil5
  end
  return _
end

function p.showme(frame)
	local vorlage = frame.args.vorlage or (mw.title.getCurrentTitle().nsText .. ':' .. mw.title.getCurrentTitle().text)
	local _
	_ = frame:preprocess(anzeige .. vorlage .. anzeige_)
	return _
end

function p.wrap(s)
	return anzeige .. tostring(s) .. anzeige_
end

function YesNo( wert, default)
	-- gibt wahr zurück wenn Eingabe irgendwie ja ist
	-- ansonsten falsch
	
	-- wenn  wert kein String ist, dann  wert ::= falsch
	-- wenn  wert einen Wert enthält, wird er in Kleinbuchstaben umgewandelt

	 wert = type( wert) == 'string' and  wert:lower() or  wert
	if  wert == nil then -- kein Eingabeparameter 1: stellt auf default
		return default
	elseif  wert == true 
		or  wert == 'yes' or  wert == 'ja' or  wert == 'true'
		or  wert == 'y'   or  wert == 'j'  or  wert == 'wahr'
		or  wert == 't'   or  wert == 'si'
		or  wert == 'on'  or  wert == 'jo'
		or tonumber( wert) == 1
	then
		return true
	elseif  wert == false
		or  wert == 'no'  or  wert == 'nein' or  wert == 'false'
		or  wert == 'n'   or  wert == 'nix'  or  wert == 'falsch'
		or  wert == 'f'   or  wert == 'nada'
		or  wert == 'off' or  wert == 'not'
		or  wert == 'niente'
		or  wert == 'nicht'
		or  wert == 'nichts'
		or  wert == 'nothing'
		or  wert == 'non'
		or  wert == 'nit'
		or  wert == 'ned'
		or tonumber( wert) == 0
	then
		return false
	else
		return default
	end
end

return p