Dokumentation für das Modul Check2[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

Das Modul Check stellt Funktionen zur Parameterprüfung und Fehlerausgabe bereit. Im Gegensatz zum Partnermodul Check ignoriert dieses Modul Groß- und Kleinschreibung. Dieses Modul sollte künftig nur noch verwendet werden.

Verwendung

Um die Funktionen innerhalb eines Lua-Moduls nutzen zu können, wird es muss es zu Beginn eingebunden werden dies erreicht man mit folgendem Befehl:

local check = require('Modul:Check2') 

Funktionen

_error

function Check._error ( error_str, modul ) 

Die Funktion dient der Ausgabe eines Fehlers. Sie wird von den Prüfroutinen benutzt, kann aber auch direkt aufgerufen werden, um eine Fehlerausschrift zu generieren. Allen Fehlermeldungen wird folgender Text vorangestellt: Fehler im Modul Modulname:

  • |error_str= – beinhaltet den auszugebenden Fehlertext.
  • |modul= – gibt den Namen des aufrufenden Moduls an. Damit wird im Artikeltext direkt auf das betroffene Modul verlinkt.

Die Funktion gibt als Zeichenkette die kompletten Fehlerausschirft inklusive Fehlerkategorien zurück. Sie berücksichtigt dabei die folgenden allgemein gültigen Parameter.

  • |ignore_errors= auf 1 oder true gesetzt, werden die Ausgabe der Fehlermeldungen der Funktionen unterdrückt. Standardmäßig werden die Fehler angezeigt.
  • |no_category= auf 1 oder true gesetzt, werden die Artikel bei Fehlermeldungen des Moduls einer Fehlerkategorie zugeordnet. Standardmäßig werden Fehlermeldungen in die Kategorie Fehlerberichte des Moduls xxx eingefügt. Wurden unbekannte Parameter verwendet, landen die Artikel zusätzlich in der Kategorie Vorlagen mit unbekannten Parametern.
  • |error_category= gibt den Namen einer Fehlerkategorie an, in der der Artikel bei auftretenden Fehlern einsortiert wird. Standardmäßig ist das Fehlerberichte des Moduls xxx.

Der Paramter, der bei der Einbindung der Vorlage benutzt wird, hat dabei Vorrang. So kann man bestimmte Funktionalitäten für den generellen Gebrauch der Vorlage aktivieren (über invoke) und im Einzelfall im Artikel abschalten (bei der Verwendung der Vorlage).

_testParams

function Check._testParams ( templateArgs, params, modul ) 

Die Funktion überprüft, ob alle bei Modulaufruf übergebenen Parameter gültig sind. Akzeptiert werden folgende Parameter

  • Die in der Variable params übergebene Parameterliste. Sie steht in einem Submodul, sinnvoller mit dem Namen Modul:Modulname/Params
  • Nicht per Name spezifizierte Parameter. Beispiel: {{Vorlagenname|par1|par2}}
  • Die drei allgemein gültigen Parameter:
    • |ignore_errors=
    • |no_category=
    • |error_category=

Folgende Parameter verlangt die Funktion

  • |args= – Enthält die bei Vorlagenaufruf übergebenen Parameter (Nicht die innerhalb der Vorlage an das Modul übergebenen).
  • |funcParams= – Die Liste der zulässigen Parameter.
  • |modul= – Der Name des Lua Moduls. Er dient der Verlinkung in der Fehlerausschrift.

Die zulässigen Parameter werden im Regelfall in ein Submodul ausgelagert. In der Parameterliste wird jedem Parameter noch ein Wert zugewiesen. Dieser wird von der Funktion nicht ausgewertet. Er kann aber verwendet werden, um nicht vorhandene Parameter mit Standardwerten zu belegen. Beispiel:

params = { 	funktionsname1 = { 		parameter1 = 'standardwert1', 		parameter2 = 'standardwert2' 	}, 	funktionsname2 = { 		parameter1 = 'standardwert1', 		parameter2 = 'standardwert2', 		parameter3 = 'standardwert3' 	} } return params 

Zur Verwendung der Funktion wird sie einfach der finalen Inhaltsübergabe am Ende einer Modulfunktion vorangestellt. Sie prüft dann die Parameter und erzeugt bei Bedarf eine entsprechende Fehlermeldung, dass unbekannte Parameter verwendet wurden.

function Beispielfunktion ( frame )    -- Hier holt man sich aus dem Submodul die Liste mit den zulässigen Parametern    params = mw.loadData('Modul:Modulname/Params')    funcParams = params['Funktionsname']    args = frame:getParent().args     -- ... jetzt macht die Funktion ihre Arbeit...      -- Der Aufruf der Prüffunktion wird nun der Ausgabe vorangestellt.    return check._testParams ( args, funcParams, 'Modulname' ) .. Ausgabe     -- Hat man in seinem Modul weiter Fehlerausgaben gesammelt setzt man alle drei Ausgaben zusammen:    return errorStr .. check._testParams ( args, funcParams, 'Modulname' ) .. Ausgabe end 

_testFile

function Check._testFile ( file, modul ) 

Die Funktion überprüft, ob die Angabe einer Datei die richtige Syntax im Wiki-Markup ausweist. Ist dies nicht der Fall, werden entsprechende Fehlermeldungen ausgegeben. So könen bei der Generierung des Artikeltextes leere Tags und Codeschnipsel vermieden werden. Wenn du diese Prüfroutine nutzt, mache sie in deinem Modul abschaltber. Werden Dateien über Subvorlagen eingebunden, stehen unter Umständen nicht immer die eckigen Klammern am Anfang und Ende. Dann könnten so Fehlermeldungen fälschlicherweise entstehen. Folgende Prüfungen werden durchgeführt:

  • Am Anfang müssen zwei eckige Klammer stehen: [[
  • Am Ende müssen zwei eckige Klammer stehen: ]]

Folgende Parameter werden benötigt:

  • |file= – Übergebene Datei.
  • |modul= – Der Name des Lua Moduls. Er dient der Verlinkung in der Fehlerausschrift.

Die Funktion gibt eine Zeichenkette mit der Fehlerausschrift zurück. Ist diese leer, ist die Dateiangabe in Ordnung. So kann die Funktion verwendet werden. Im Beispiel wird gleichzeitig die optionale Deaktivierung berücksichtigt:

function Beispielfunktion ( frame )     -- ... Programmcode ...        -- Einer Variable wird das Ergebnis der Prüfung übergeben    local fileCheck = check._testFile ( image, 'Quickbar' )     -- Zeichenkette leer oder Prüfung abgeschaltet?    if ( fileCheck == '' ) or ( noFileCheck == 'yes' ) then        -- Bild wird zur Ausgabe gebracht       display = display .. 'Bildausgabe'    else       -- Erzeugung eines Fehlers       errorStr = errorStr .. fileCheck    end     -- ... weiter im Programm ...  end 

Verwendung in anderen Modulen

Dieses Modul ist notwendig für die Ausführung folgender Module. Bei Anpassungen sollte die Funktionstüchtigkeit der folgenden Module geprüft werden. Benutze dazu auch diese Tracking-Kategorie um Fehler zu finden, die sich dann auf Artikel auswirken:

Hinweise
local Check = {}  function Check._error( error_str, modul )    local frame = mw.getCurrentFrame()    local localArgs = frame.args    local templateArgs = frame:getParent().args        -- Allgemeine Parameter auswerten    if templateArgs['ignore_errors'] == nil        then           if localArgs['ignore_errors'] == nil then templateArgs['ignore_errors'] = '0' else templateArgs['ignore_errors'] = localArgs['ignore_errors'] end    end    if templateArgs['ignore_errors'] == '1' or templateArgs['ignore_errors'] == 'true' then return '' end     if templateArgs['no_category'] == nil        then           if localArgs['no_category'] == nil then templateArgs['no_category'] = '0' else templateArgs['no_category'] = localArgs['no_category'] end    end     if templateArgs['error_category'] == nil        then           if localArgs['error_category'] == nil           then templateArgs['error_category'] = '[[Kategorie:Fehlerberichte des Moduls ' .. modul .. ']]'           else templateArgs['error_category'] = '[[Kategorie:' .. localArgs['error_category'] .. ']]' end       else templateArgs['error_category'] = '[[Kategorie:' .. templateArgs['error_category'] .. ']]'    end     -- Fehler generieren    local error_str = '<strong class="error WV-Check-Error">Fehler im Modul [[Modul:' .. modul .. '|' .. modul .. ']]: ' .. error_str .. '</strong>';    if templateArgs['ignore_errors'] == '1' or templateArgs['ignore_errors'] == 'true' then error_str = '' end        -- Kategorie generieren    if templateArgs['no_category'] == '0' or templateArgs['ignore_errors'] == 'false' then error_str = templateArgs['error_category'] .. error_str end      return error_str; end  function Check._testParams ( templateArgs, params, modul )     	-- Argumente des invoke-Aufrufs holen 	local frame = mw.getCurrentFrame() 	local localArgs = frame.args  	local localArgsNew = {} 	local templateArgsNew = {} 	 	for key,value in pairs ( localArgs ) do 		localArgsNew[mw.ustring.lower(tostring(key))] = value 	end 	for key,value in pairs ( templateArgs ) do 		templateArgsNew[mw.ustring.lower(tostring(key))] = value 	end 	localArgs = localArgsNew 	templateArgs = templateArgsNew  	-- Variablen für Parameterauswertung 	local errorMsg = 'Unbekannte(r) Parameter: ' 	local errorCat = '[[Kategorie:Vorlagen mit unbekannten Parametern]]' 	local errorOccured = false 	 	-- generell erlaubte Parameter 	local paramsWhitelist = { ignore_errors = 'ignore_errors', no_category = 'no_category', error_category = 'error_category' }        -- Test ob unbekannte Parameter übergeben wurden (Tippfehler)    -- 0-9 werden auch stillschweigend akzeptiert    -- allgemeine Parameter werden auch akzeptiert    for k, v in pairs(templateArgs) do       if  ( not ( ( params[k] ~= nil ) or ( paramsWhitelist[k] ~= nil ) ) ) and ( string.match ( k, '^%d*$' ) == nil )       then           errorMsg = errorMsg .. '<span style="font-weight: bold; font-style:italic">' .. k .. '</span> (über Vorlage), '          errorOccured = true       end    end        for k, v in pairs(localArgs) do       if  ( not ( ( params[k] ~= nil ) or ( paramsWhitelist[k] ~= nil ) ) ) and ( string.match ( k, '^%d*$' ) == nil )       then           errorMsg = errorMsg .. '<span style="font-weight: bold; font-style:italic">' .. k .. '</span> (über invoke), '          errorOccured = true       end    end     -- Parameter für Fehlerbehandlung auswerten    if templateArgs['ignore_errors'] == nil       then        if localArgs['ignore_errors'] == nil then templateArgs['ignore_errors'] = '0' else templateArgs['ignore_errors'] = localArgs['ignore_errors'] end    end    if templateArgs['no_category'] == nil       then        if localArgs['no_category'] == nil then templateArgs['no_category'] = '0' else templateArgs['no_category'] = localArgs['no_category'] end    end        if errorOccured and ( templateArgs['ignore_errors'] == '0' or templateArgs['ignore_errors'] == 'false' )       then           errorMsg = Check._error ( string.sub ( errorMsg, 1 , string.len ( errorMsg ) - 2 ), modul )          if templateArgs['no_category'] == '0' or templateArgs['no_category'] == 'false' then errorMsg = errorMsg .. '[[Kategorie:Vorlagen mit unbekannten Parametern]]' end       else           errorMsg = ''    end        return errorMsg end  function Check._isParamUsed ( templateArgs, paramName )     	-- Argumente des invoke-Aufrufs holen 	local frame = mw.getCurrentFrame() 	local localArgs = frame.args 	 	local localArgsNew = {} 	local templateArgsNew = {}  	-- alles klein schreiben 	for key,value in pairs ( localArgs ) do 		localArgsNew[mw.ustring.lower(tostring(key))] = value 	end 	for key,value in pairs ( templateArgs ) do 		templateArgsNew[mw.ustring.lower(tostring(key))] = value 	end 	localArgs = localArgsNew 	templateArgs = templateArgsNew     	-- Test ein Parameter benutzt wurde 	for k, v in pairs(templateArgs) do 		if  ( k == paramName ) then return true end 	end 	    	for k, v in pairs(localArgs) do 		if  ( k == paramName ) then return true end 	end        return false end  function Check._testFile ( file, modul )        local errorMsg = ''        --eckige Klammern vergessen    if ( string.match ( file, '^%[%[%a' ) == nil ) then       errorMsg = Check._error ( 'führende eckige Klammern bei der Dateieinbindung vergessen' , modul )    end    if ( string.match ( file, '%]%]$' ) == nil ) then       errorMsg = errorMsg .. Check._error ( 'abschließende eckige Klammern bei der Dateieinbindung vergessen' , modul )    end        return errorMsg end  return Check