Module:Dok

local p = {} -- p stands for package local t = require('Module:Arguments')

local ruler   = '' --local template = mw.site.namespaces.Template.name .. ':'

local anzeige = '  '

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 a = frame.args             -- direkt per #invoke: übergeben local b = frame:getParent.args -- an die Vorlage übergebene Parameter local ns      = a.ns or b.ns or mw.site.namespaces.Template.name local vorlage = a.vorlage or b.vorlage or mw.title.getCurrentTitle.rootText local template = ns .. ':'  -- Namespace der aufrufenden Vorlage inklusive Doppelpunkt local doc     = a.doc or b.doc or 'doc' --- Möglichkeit die Dokumentationsunterseite anders zu benennen local preload = a.preload or b.preload or 'Template:Dokumentation/preload-doc' local cat     = a.cat or a.kat or a.kategorie or b.cat or b.kat or b.kategorie or 'Vorlagen' local nocat   = a.nocat or a.nokat or a.keinekat or a.ns or b.nocat or b.nokat or b.keinekat or b.ns-- wenn anderer Namensraum, dann nicht kategorisieren local hidden  = not(a.show or a.zeigen or b.show or b.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,ns) --if not dievorlage then return "Die Vorlage " .. vorlage .. " existiert nicht" end local verborgen = (hidden and ' Die Vorlage ' .. vorlage .. ' ist nur auf eingebundenen Seiten voll sichtbar und auf dieser Seite versteckt. ' ) or ''

local duhast = 'Du hast die Vorlagendokumentation mit dem Befehl  eingebunden und willst die Dokumentation von der Unterseite   einbinden. Über mögliche Parameter und ihre Verwendung kannst du in der Dokumentation zum aufgerufenen Modul Dok nachlesen.' local diedokumentationsunterseite = 'Die Dokumentationsunterseite  ist nicht vorhanden. '	local damitdie = 'Damit die Dokumentation wie vorgesehen funktioniert, ist es erforderlich, dass du für deine Vorlage  die Unterseite   anlegst.\nDas kannst du mit der Eingabebox unterhalb dieses Text durchführen, dadurch wird eine vorausgefüllte Seite basierend auf der Seite   erzeugt. Eine leere Seite kannst du mit dem (vermutlich) roten Link anlegen.\n\n' local input = ' ' local inputbox = frame:preprocess('\n\n' .. input) local subpages = frame:preprocess('\n==Eine Liste der bereits vorhandenen Unterseiten==\n')

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;" | \n' .. '| style="padding:0; width:100%;" |' .. ''   local dokgibts = p.gibts(dok,ns) if dokgibts then -- Unterseite doc gibts local doku, layout, bearbeiten local linkliste = frame:preprocess('[ Verwendungen]') .. ' dieser Vorlage' local Unterseiten = frame:preprocess('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(' '

local divspan = ' ' local edit   = mw.uri.fullUrl( _dok,    'action=edit' ) local history = mw.uri.fullUrl( _dok,   'action=history' ) local roh    = mw.uri.fullUrl( _dok,    'action=raw&ctype=text/css' ) 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(roh) .. ' Raw] · [' .. tostring(history) .. ' Versionen] · [' .. tostring(purge) .. ' Cache leeren] · [' .. tostring(qqx) .. ' Messages] · [' .. tostring(info) .. ' Seiteninformation] · [' .. tostring(editv) .. ' Vorlage bearbeiten] · [' .. tostring(infov) .. ' Seiteninformation Vorlage]' result = divspan .. result .. ' \n'

return result .. rohhtml .. ' ' 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 ns      = frame.args.ns or mw.site.namespaces.Template.name 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 = frame.args.klappbar local geklappt = frame.args.geklappt

-- Parameter ohne Voreinstellungen, werden nur schlagend, wenn sie angegeben werden local expand = not frame.args.noexpand -- wenn das Expandieren unterdrückt werden soll, diesen Parameter angeben, Inhalt (derzeit) egal local render = not frame.args.norender  -- wenn das Rendern unterdrückt werden soll, z.B. wegen unerwünschter Kategorisierung -- Variablen für Formatierung local div_blue = ' ' local div_inlineblock = ' ' local div_dotted = ' ' local ergibt_gerendert = div_inlineblock .. 'ergibt angewendet:' .. div_dotted local ergibt_expandiert = div_inlineblock .. 'ergibt als Wikitext expandiert:' .. div_dotted

-- zusammengesetzte Texte if ns == mw.site.namespaces.Template.name then -- Vorlage ohne "Vorlage:" vorlage_ns = vorlage else vorlage_ns = ns .. ':' .. vorlage end local tl = ' ' local diese_vorlage=' \nDie Vorlage ' .. tl .. erzeugt local _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,ns) --if not dievorlage then return "Die Vorlage " .. vorlage .. " existiert nicht" end ShowMe = frame:preprocess('\n==Code==\n') .. p.wrap(p.Inhalt(vorlage,ns)) -- Vorlageninhalt anzeigen if p.gibts(rubrik) then vorlagenliste = ' ' .. frame:expandTemplate{ title = rubrik, args = { } } .. ' ' 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') .. _vorlage .. kopiervorlage .. "}} " -- Kopiervorlage zur Dokumentationsanwendung mit Auflistung aller Parameter

-- Vorlagenanwendung mit Defaulteinstellungen local nurmit = frame.args.omp -- Vorlage nur mit Parameter aufrufen omp=1 if not nurmit then anw0 = frame:preprocess('\n==Anwendung==\n') .. p.anwendung(_vorlage_,render,expand,klappbar, geklappt) end -- Anwendungsbeispiele -- alle Parameterwerte mit Beistrich oder Strichpunkt getrennt -- wie im Vorlagenaufruf, nur mit einem anderen Trennzeichen for i=1,10 do -- mehr als 10 Anwendungsbeispiele werden kaum sinnvoll sein local u, liste, expd, rndr, 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 noexpd = frame.args['noexpand' .. i] local norndr = frame.args['norender' .. i] local expd  = frame.args['expand' .. i] local rndr  = frame.args['render' .. i]			local lrender = render local lexpand = expand if render then -- Indikator zum Ausführen der Vorlage lokal überschreiben if norndr then lrender = false end else if rndr  then lrender = true  end end if expand then -- Indikator zum Expandieren der Vorlage lokal überschreiben if noexpd then lexpand = false end else if expd  then lexpand = true  end end

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

if muster ~=  and anw0 ==  then anw0 = frame:preprocess('\n==Anwendung==\n') end

return vorlagen_intro .. parametertabelle .. kopiervorlage .. anw0 .. muster .. ShowMe --vorlagen_intro .. parm_table .. anw0

end

function p.anwendung(vorlage, xender, xxpand, klappbar, geklappt) -- 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. 	-- 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 klappbar or geklappt then		if klappbar then class= class .. ' class =" mw-collapsible' end if geklappt then class = class .. ' class =" mw-collapsible mw-collapsed' end		class = class .. '">' end

-- Variablen für die Formatierung local div_blue = ' ' local div_inlineblock = ' ' local div_dotted = ''	local ergibt_expandiert = div_inlineblock .. 'ergibt als Wikitext expandiert:' .. ' ' .. div_dotted .. class

if not xxpand then ergibt_gerendert= 'ergibt ' .. ergibt_gerendert end ergibt_gerendert= div_inlineblock .. ergibt_gerendert expanded = ' ' gerendert = processed .. ' '	if xxpand then _ = ergibt_expandiert .. expanded end if xender then _ = _ .. ergibt_gerendert .. gerendert end

return div_blue .. _ .. ' ' --'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 = ' ' -- Ä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["desc" .. j] or pframe.args["t" .. j] or 'Beschreibung fehlt' -- Parameterbeschreibung def = pframe.args["def" .. j] or pframe.args["d" .. j] or 'leer'              -- Standardeinstellung mand = pframe.args["mdt" .. j] or pframe.args["m" .. j]                        -- verpflichtende Eingabe ja/nein fort = pframe.args["fort" .. j] or pframe.args["f" .. j] -- Fortsetzungszeile der Beschreibung gort = pframe.args["gort" .. j] or pframe.args["g" .. j] -- Fortsetzungszeile der Beschreibung zeile = p.zeile(x, desc, def, mand, fort, gort) parm_table = parm_table .. zeile xxx = xxx .. ' |' .. x .. '=' -- doch ein Zeilenumbruch in der Kopiervorlage (=lästig!) end end -- for i = 1,count do

if count == 0 or count == "0" then -- Abschnitt Parametertabelle fertigstellen parm_table ='keine ' else parm_table = table_header .. parm_table .. table_end end return parm_table, xxx end

function p.gibts(name, namespace) local name = t.tidy(name) if not name then return false end 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(titel:getContent) else return end end

function p.Inhalt(titel,ns) -- titel: Titel einer Seite (default: aufrufende Root-Seite) -- ns: Namespace (default: Template) local space    = ns or mw.site.namespaces.Template.name local text     = titel or mw.title.getCurrentTitle.rootText local wseite   = mw.title.new(titel, space)  -- Wikiseite als title-Objekt if wseite.exists then return mw.text.nowiki(wseite: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 = ' local teil3 = '  ' local teil4 = ' ' local teilf = ' ' local teil5 = ' '

_ = teil1 .. pname .. teil2 .. beschreibung .. teil3 .. default .. teil4 .. optional .. teil5 if fort and fort ~="" then -- Fortsetzungszeile _ = _ .. teil1 .. teilf .. fort .. teil5 end if gort and gort ~="" then -- 2. Fortsetzungszeile _ = _ .. teil1 .. teilf .. gort .. 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

return p