Modul:Citation/utilities: Unterschied zwischen den Versionen

K
51 Versionen von wikivoyage:Modul:Citation/utilities importiert
(replace character references and entities)
K (51 Versionen von wikivoyage:Modul:Citation/utilities importiert)
 
(22 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
-- documentation
-- documentation
local citation = {
local citationUtilities = {
suite  = 'Citation',
suite  = 'Citation',
sub    = 'utilities',  
sub    = 'utilities',  
serial = '2020-04-17',
serial = '2022-10-21'
}
}


-- module variable
-- module variable and administration
local cu = {}
local cu = {
moduleInterface = citationUtilities
}


-- module import
-- module import
-- require( 'strict' )
local ci = require( 'Module:Citation/i18n' )
local ci = require( 'Module:Citation/i18n' )


Zeile 45: Zeile 48:
-- make complete message from message array
-- make complete message from message array
function cu.getErrorMsgs()
function cu.getErrorMsgs()
local i, j, result
-- remove duplicates
-- remove duplicates
for i = #errorMsgs, 1, -1 do
for i = #errorMsgs, 1, -1 do
Zeile 56: Zeile 58:
end
end


result = table.concat( errorMsgs, ' ' )
local result = table.concat( errorMsgs, ' ' )
if result ~= '' then
if result ~= '' then
result = result .. ' '
result = result .. ' '
Zeile 78: Zeile 80:
end
end


local index, value
for index, value in ipairs( tab ) do
for index, value in ipairs( tab ) do
if value == val then
if value == val then
Zeile 90: Zeile 91:
-- convert values t from list if translated
-- convert values t from list if translated
function cu.getKey( t, list )
function cu.getKey( t, list )
     local result = '', key, tab
     local result = ''
     for key, tab in pairs( list ) do
     for key, tab in pairs( list ) do
         if cu.inArray( tab, t ) then
         if cu.inArray( tab, t ) then
Zeile 102: Zeile 103:
-- returns a single value from frame argument table
-- returns a single value from frame argument table
function cu.getArgValue( list, param, args )
function cu.getArgValue( list, param, args )
value = '', k, v
local value = ''
if list[ param ] then
if list[ param ] then
for k, v in ipairs( list[ param ] ) do
for k, v in ipairs( list[ param ] ) do
Zeile 163: Zeile 164:
-- zero-width joiner, zero-width space, soft hyphen
-- zero-width joiner, zero-width space, soft hyphen


local i, value
-- remove characters: soft hyphen, LTR mark, RTL mark
-- remove characters: soft hyphen, LTR mark, RTL mark
for i, value in ipairs( { '­', '‎', '‏' } ) do
for i, value in ipairs( { '­', '‎', '‏' } ) do
Zeile 182: Zeile 182:
end
end


-- remove adjoining punctuation marks
-- remove adjoining punctuation marks etc.
function cu.finalCleanup( s )
function cu.finalCleanup( s )
s = mw.ustring.gsub( s, '%.+%.', '.' )
s = s:gsub( '%.+%.', '.' ):gsub( '%s%s+', ' ' ):gsub( '([,;:])(%s%.+)', '.' )
s = mw.ustring.gsub( s, '([!%?…‥])%s*%.+', '%1' )
for _, replacement in ipairs( ci.replacements ) do
s = mw.ustring.gsub( s, "([!%?…‥]'')%s*%.+", '%1' )
s = mw.ustring.gsub( s, replacement.s, replacement.r )
return mw.ustring.gsub( s, '([,;:])(%s%.+)', '.' )
end
s = s:gsub( '#b#', '.' ) -- restore bibcode
return s
end
end


function cu.makeLink( url, text )
function cu.makeLink( url, text )
return mw.ustring.format( '[%s %s]', url, text )
return mw.ustring.format( '[%s %s]', url, text )
end
function cu.makeDoiLink( doi )
doi = mw.ustring.gsub( doi, 'https?://doi.org/', '' )
doi = doi:gsub( '%[', '%%5B' )
doi = doi:gsub( '%]', '%%5D' )
return cu.makeLink( 'https://doi.org/' .. mw.uri.encode( doi ), doi )
end
end


Zeile 204: Zeile 199:
local function formatDate( aDate, aFormat )
local function formatDate( aDate, aFormat )
return mw.getContentLanguage():formatDate( aFormat, aDate, true )
return mw.getContentLanguage():formatDate( aFormat, aDate, true )
end
if aFormat == 'R' then
return aDate
end
end


if aDate ~='' then
if aDate ~='' then
local success, t;
local success, t = pcall( formatDate, aDate, aFormat )
success, t = pcall( formatDate, aDate, aFormat )
if success then
if success then
return t
return t
Zeile 275: Zeile 273:
return ''
return ''
end
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
end


return cu
return cu