
![]() | Dieses Modul wird auf vielen Seiten benutzt, und Änderungen werden projektweit sofort wahrgenommen. Bitte teste Änderungen vorher im /Sandkasten oder in deinem Benutzernamensraum. Die getestete Änderung sollte dann in einem einzigen Edit auf dieser Seite eingefügt werden. Bitte diskutiere Änderungen zuerst auf der Diskussionsseite bevor du sie implementierst. |
![]() | Dieses Modul ist getestet und für den projektweiten Gebrauch geeignet. Es kann in Vorlagen benutzt und auf Hilfeseiten erläutert werden. Entwicklungen an dem Modul sollten auf Citation/Test und die Anwendung auf der Spielwiese getestet werden, da wiederholte Trial-and-Error-Edits die Resourcen stark belasten können. |
Verwendung
Das Modul stellt gemeinsame Funktionen für das Modul:Citation zur Verfügung.
Versionsbezeichnung auf Wikidata: 2024-06-08
Funktionen
function cu.isSet( param )
liefert true
, wenn die Zeichenkette param
einen nicht-leeren Wert enthält.
function cu.round( num, decimalPlaces )
liefert die auf decimalPlaces
Stellen gerundete Zahl num
zurück.
function cu.getNumber( s )
konvertiert eine Zeichenkette in eine Zahl unter Berücksichtigung des in Modul:Citation/i18n spezifizierten Dezimalzeichens ci.texts.decimalPoint
. Wenn in der Zeichenkette [sic!]
enthalten ist, wird 0 zurückgegeben. Damit wird verhindert, dass eine Zahlenangabe als zu groß und fehlerhaft gekennzeichnet wird.
function cu.addErrorMsg( msg )
fügt eine Fehlermeldung in die intern vorgehaltene Fehlertabelle errorMsgs
ein.
function cu.getErrorMsgs()
liefert eine Zeichenkette mit allen in der Fehlertabelle errorMsgs
enthaltenen Fehlermeldungen – jede aber nur einmal – zurück.
function cu.getFirst( s, delimiter )
liefert das erste Element einer mit dem Trenner delimiter
unterteilten Zeichenkette zurück.
function cu.inArray( tab, val )
liefert true
zurück, wenn das Element val
in der Tabelle tab
enthalten ist.
function cu.getKey( t, list )
liefert das key
-Element aus der Tabelle list
, die Parameternamen in Übersetzung enthält.
function cu.getArgValue( list, param, args )
liefert einen einzelne Wert aus der Parametertabelle args
für den Parameter param
zurück. Die Tabelle list
wir für die Übersetzung der Parameternamen benötigt.
function cu.parameterCleanup( s )
liefert eine bereinigte Zeichenkette zurück, aus der Steuerzeichen, verschiedene Block-Tags (div, p, br) entfernt und XML- bzw. SGML-Zeichenreferenzen ausgetauscht wurden.
function cu.cleanupPageNumbers( pages )
liefert eine Zeichenkette zurück, in der verschiedene Striche durch den Bindestrich ersetzt wurden.
function cu.coinsCleanup( s )
liefert eine Zeichenkette, in der verschiedene Steuerzeichen, span-Tags, Wiki-Syntax (hauptsächlich Links) entfernt wurden.
function cu.finalCleanup( s )
liefert eine Zeichenkette, in der aufeinander folgende Interpunktionszeichen entfernt wurden.
function cu.makeLink( url, text )
liefert einen Link in Wiki-Syntax.
function cu.encodeHandle( handle )
liefert den URI-encodeten Wert des Parameters handle
.
function cu.getDate( aDate, aFormat, errorMsg )
liefert eine formatierte Datumsangabe aus aDate
mit dem Format aFormat
. Bei fehlerhafter Wandlung wird die Fehlermeldung errorMsg
in die interne Fehlertabelle geschrieben.
function cu.hasExtension( url, ext )
liefert true
, wenn die Internetadresse url
die Dateierweiterung ext
besitzt.
function cu.insertItem( tab, s, formatStr )
fügt die formatierte Zeichenkette s
in die Tabelle tab
ein, wenn sie nicht leer ist.
function cu.insertItem2( tab, s1, s2, formatStr )
fügt eine formatierte Zeichenkette aus den Teilzeichenketten s1
und s2
in die Tabelle tab
ein, wenn sie beide nicht leer sind.
function cu.formatItem( s, formatStr )
liefert die formatierte Zeichenkette s
, wenn sie nicht leer ist.
function cu.formatItem2( s1, s2, formatStr )
liefert eine formatierte Zeichenkette aus den Teilzeichenketten s1
und s2
, wenn sie beide nicht leer sind.
function cu.templateStyles( frame )
stellt die templatestyles
für die Vorlagen bereit, die das Modul Modul:Citation
benutzen.
function cu.getNbnCheckDigit( urn )
liefert die Prüfziffer für urn:nbn
-Identifikatoren der Länder at
, ch
, de
und fi
.
function cu.check_UrnNbn( urn )
prüft, ob die urn
über die korrekte Prüfziffer verfügt.
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:
- Citation
- Modul benötigt das Modul Citation/utilities – Wartungskategorie, in der nochmals alle Module gelistet sind, die von diesem Modul abhängig sind.
- Die obige Dokumentation wurde aus der Seite Modul:Citation/utilities/Doku eingefügt. (bearbeiten | Versionsgeschichte) Die Kategorien für dieses Modul sollten in der Dokumentation eingetragen werden. Die Interwiki-Links sollten auf Wikidata eingepflegt werden.
- Liste der Unterseiten
-- documentation local citationUtilities = { suite = 'Citation', sub = 'utilities', serial = '2024-06-08' } -- module variable and administration local cu = { moduleInterface = citationUtilities } -- module import -- require( 'strict' ) local ci = require( 'Module:Citation/i18n' ) -- global variable local errorMsgs = {} -- helper functions function cu.isSet( param ) return param and param ~= ''; end -- math function round function cu.round( num, decimalPlaces ) local mult = 10^( decimalPlaces or 0 ) return math.floor( num * mult + 0.5 ) / mult end -- converts string to number function cu.getNumber( s ) if not cu.isSet( s ) then return 0 end if s:find( '[sic!]', 1, true ) then return 0 end local kb = s:gsub( ci.texts.decimalPoint, '%.' ) return tonumber( kb ) or 0 end -- adds error message to array function cu.addErrorMsg( msg ) table.insert( errorMsgs, msg ) end -- make complete message from message array function cu.getErrorMsgs() -- remove duplicates for i = #errorMsgs, 1, -1 do for j = 1, #errorMsgs - 1, 1 do if errorMsgs[ i ] == errorMsgs[ j ] then table.remove( errorMsgs, i ) break end end end local result = table.concat( errorMsgs, ' ' ) if result ~= '' then result = result .. ' ' end return result end -- get first item of a delimiter-separated list function cu.getFirst( s, delimiter ) local at = s:find( delimiter ) if at then s = mw.text.trim( s:sub( 1, at - 1 ) ) end return s end -- check if table contains the value function cu.inArray( tab, val ) if type( tab ) == 'string' then return tab == val end for index, value in ipairs( tab ) do if value == val then return true end end return false end -- convert values t from list if translated function cu.getKey( t, list ) local result = '' for key, tab in pairs( list ) do if cu.inArray( tab, t ) then result = key break end end return result end -- returns a single value from frame argument table function cu.getArgValue( list, param, args ) local value = '' if list[ param ] then for k, v in ipairs( list[ param ] ) do if cu.isSet( args[ v ] ) then value = args[ v ] break end end end return value end -- string cleanup function cu.parameterCleanup( s ) if not cu.isSet( s ) then return s -- nil or '' should be kept end local orig = s -- replace control characters s = s:gsub( '[\009\010\013]', ' ' ) -- horizontal tab, line feed, carriage return s = s:gsub( '[%z%c]', '' ) -- control characters -- remove tags s = mw.ustring.gsub( s, '</*br[^/>]*/*>', '' ) -- <br> tag s = mw.ustring.gsub( s, '</*p[^/>]*/*>', '' ) -- <p> tag s = mw.ustring.gsub( s, '</*div[^/>]*/*>', '' ) -- <div> tag if orig ~= s then cu.addErrorMsg( ci.texts.wrongChars ) end -- replace character references and entities s = mw.text.decode( s, true ) -- replace characters s = mw.ustring.gsub( s, '%.%.%.', '…' ) s = mw.ustring.gsub( s, '%.%.', '‥' ) return s:gsub( '%s%s+', ' ' ) -- multiple spaces end -- remove illegal chars from pages parameters function cu.cleanupPageNumbers( pages ) if not cu.isSet( pages ) then return '' end -- replace dashes with hyphens return mw.ustring.gsub( '' .. pages, '[–‒—]', '-' ); end -- string cleanup before COinS creation function cu.coinsCleanup( s ) if not cu.isSet( s ) then return '' end -- replace characters s = s:gsub( '\226\128\138', ' ' ); -- hair space s = mw.ustring.gsub( s, '[\226\128\141\226\128\139\194\173]', '' ); -- zero-width joiner, zero-width space, soft hyphen -- remove characters: soft hyphen, LTR mark, RTL mark for i, value in ipairs( { '', '', '' } ) do s = mw.ustring.gsub( s, value, '' ) end -- replace Wiki syntax s = s:gsub( "''+", '' ) -- multiple apostrophes s = mw.ustring.gsub( s, '</*span[^/>]*/*>', '' ) -- span tags s = mw.ustring.gsub( s, '%[%[[^%[%]]*|([^%[%]]*)%]%]', '%1' ) -- MediaWiki links s = mw.ustring.gsub( s, '%[%[([^%[%]]*)%]%]', '%1' ) s = mw.ustring.gsub( s, '%[%a*:?//[^ ]+%s+([^%]]+)%]', '%1' ) -- web links s = mw.ustring.gsub( s, '%[mailto:[^ ]+%s+([^%]]+)%]', '%1' ) s = mw.ustring.gsub( s, '%[%a*:?//([^%]]+)%]', '%1' ) s = mw.ustring.gsub( s, '%[mailto:([^%]]+)%]', '%1' ) return s:gsub( '%s%s+', ' ' ) -- multiple spaces end -- remove adjoining punctuation marks etc. function cu.finalCleanup( s ) s = s:gsub( '%.+%.', '.' ):gsub( '%s%s+', ' ' ):gsub( '([,;:])(%s%.+)', '.' ) for _, replacement in ipairs( ci.replacements ) do s = mw.ustring.gsub( s, replacement.s, replacement.r ) end s = s:gsub( '#b#', '.' ) -- restore bibcode return s end function cu.makeLink( url, text ) return mw.ustring.format( '[%s %s]', url, text ) end function cu.getDate( aDate, aFormat, errorMsg ) local function formatDate( aDate, aFormat ) return mw.getContentLanguage():formatDate( aFormat, aDate, true ) end if aFormat == 'R' then return aDate end if aDate ~='' then local success, t = pcall( formatDate, aDate, aFormat ) if success then return t else cu.addErrorMsg( errorMsg ) return '' end else return '' end end -- check if url contains the file extension ext function cu.hasExtension( url, ext ) ext = '%.' .. ext url = url:uupper() return url:match( ext .. '$' ) or url:match( ext .. '[%?#]' ) or url:match( ext .. '#' ); -- # is # end function cu.getExtension( url ) if not cu.isSet( url ) then return false end for i, value in ipairs( { 'PDF', 'DOC', 'DOCX', 'RTF', 'ODT', 'PPT', 'PPTX', 'XLS', 'XLSX' } ) do if cu.hasExtension( url, value ) then return value end end return false end function cu.insertItem( tab, s, formatStr ) if cu.isSet( s ) then if formatStr then table.insert( tab, mw.ustring.format( formatStr, s ) ) else table.insert( tab, s ) end end end function cu.insertItem2( tab, s1, s2, formatStr ) if cu.isSet( s1 ) and cu.isSet( s2 ) then if formatStr then table.insert( tab, mw.ustring.format( formatStr, s1, s2 ) ) else table.insert( tab, s1 ) table.insert( tab, s2 ) end end end function cu.formatItem( s, formatStr ) if cu.isSet( s ) then if formatStr then return mw.ustring.format( formatStr, s ) else return s end else return '' end end function cu.formatItem2( s1, s2, formatStr ) if cu.isSet( s1 ) and cu.isSet( s2 ) then if formatStr then return mw.ustring.format( formatStr, s1, s2 ) else return s1 .. ' ' .. s2 end else return '' end end function cu.templateStyles( frame ) return frame:extensionTag( 'templatestyles', '', { src = ci.styleSrc } ); end -- Check digit estimation for countries at, ch, de, and fi -- See: https://github.com/bohnelang/URN-Pruefziffer -- Description of the algorithm: http://www.pruefziffernberechnung.de/U/URN.shtml function cu.getNbnCheckDigit( urn ) -- two-digits codes for ascii characters starting from - == '-' local code='3947450102030405060708094117############1814191516212223242542262713282931123233113435363738########43' local sum = 0 local pos = 1 local digit1, digit2, x urn = urn:upper():sub( 1, -2 ) -- remove last character for i = 1, urn:len() do x = 2 * ( urn:byte( i ) - 45 ); -- - == '-' digit1 = tonumber( code:sub( x + 1, x + 1 ) ); digit2 = tonumber( code:sub( x + 2, x + 2 ) ); if digit1 == 0 then sum = sum + digit2 * pos pos = pos + 1 else sum = sum + digit1 * pos + digit2 * ( pos + 1 ) pos = pos + 2 end end return tostring( math.floor( sum / digit2 ) % 10 ); end function cu.check_UrnNbn( urn ) urn = urn:gsub( '/fragment/.+$', '' ) -- remove fragment return urn:sub( -1 ) == cu.getNbnCheckDigit( urn ) end return cu