
<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.fahrradmonteur.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AVorlage%3Abibcode</id>
	<title>Modul:Vorlage:bibcode - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.fahrradmonteur.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AVorlage%3Abibcode"/>
	<link rel="alternate" type="text/html" href="https://www.fahrradmonteur.de/index.php?title=Modul:Vorlage:bibcode&amp;action=history"/>
	<updated>2026-04-21T13:12:42Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Fahrradmonteur</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://www.fahrradmonteur.de/index.php?title=Modul:Vorlage:bibcode&amp;diff=36479&amp;oldid=prev</id>
		<title>RalfRoletschek: 1 Version importiert: Import aus Wikipedia</title>
		<link rel="alternate" type="text/html" href="https://www.fahrradmonteur.de/index.php?title=Modul:Vorlage:bibcode&amp;diff=36479&amp;oldid=prev"/>
		<updated>2017-10-01T11:55:05Z</updated>

		<summary type="html">&lt;p&gt;1 Version importiert: Import aus Wikipedia&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Export = { suite  = &amp;quot;bibcode&amp;quot;,&lt;br /&gt;
                 serial = &amp;quot;2017-01-15&amp;quot; }&lt;br /&gt;
--[=[&lt;br /&gt;
Template:bibcode&lt;br /&gt;
and other issues dealing with bibcode ID.&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local Config = {&lt;br /&gt;
   self          = Export.suite,&lt;br /&gt;
   errCat        = false,&lt;br /&gt;
   errClass      = &amp;quot;error_bibcode&amp;quot;,&lt;br /&gt;
   errClasses    = false,&lt;br /&gt;
   errHide       = false,&lt;br /&gt;
   errNS         = false,&lt;br /&gt;
   errEncodedURL = { en = &amp;quot;ID with undesirable URL encoding&amp;quot;,&lt;br /&gt;
                     de = &amp;quot;ID mit unerwünschtem [[URL-Encoding]]&amp;quot; },&lt;br /&gt;
   errInvalid    = { en = &amp;quot;Invalid:&amp;quot;,&lt;br /&gt;
                     de = &amp;quot;Ungültig:&amp;quot; },&lt;br /&gt;
   errLength     = { en = &amp;quot;ID with bad length:&amp;quot;,&lt;br /&gt;
                     de = &amp;quot;ID mit ungültiger Länge:&amp;quot; },&lt;br /&gt;
   errMissing    = { en = &amp;quot;Missing ID&amp;quot;,&lt;br /&gt;
                     de = &amp;quot;ID fehlt&amp;quot; },&lt;br /&gt;
   errUnkown     = { en = &amp;quot;Unkown parameter:&amp;quot;,&lt;br /&gt;
                     de = &amp;quot;Parameter unbekannt:&amp;quot; },&lt;br /&gt;
   mode          = 0,&lt;br /&gt;
   showArticle   = &amp;quot;Bibcode&amp;quot;,&lt;br /&gt;
   site          = &amp;quot;http://adsabs.harvard.edu/abs/&amp;quot;,&lt;br /&gt;
   supply        = { en = &amp;quot;full text available&amp;quot;,&lt;br /&gt;
                     de = &amp;quot;Volltext verfügbar&amp;quot; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function factory( apply )&lt;br /&gt;
    -- Localization of messages&lt;br /&gt;
    --     apply  -- string, with message key&lt;br /&gt;
    -- Returns message text; at least english&lt;br /&gt;
    local r&lt;br /&gt;
    entry = Config[ apply ]&lt;br /&gt;
    if entry then&lt;br /&gt;
        r = entry[ mw.language.getContentLanguage():getCode() ]&lt;br /&gt;
        if not r then&lt;br /&gt;
            r = entry.en&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = string.format( &amp;quot;&amp;lt;span class=\&amp;quot;error\&amp;quot;&amp;gt;????.%s.????&amp;lt;/span&amp;gt;&amp;quot;,&lt;br /&gt;
                           apply )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- factory()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function faculty( adjust )&lt;br /&gt;
    -- Test template arg for boolean&lt;br /&gt;
    --     adjust  -- string or nil&lt;br /&gt;
    -- Returns boolean&lt;br /&gt;
    local r = false&lt;br /&gt;
    if adjust then&lt;br /&gt;
        r = mw.text.trim( adjust )&lt;br /&gt;
        if r ~= &amp;quot;&amp;quot;  and  r ~= &amp;quot;0&amp;quot; then&lt;br /&gt;
            r = true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- faculty()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fault( alert, about )&lt;br /&gt;
    -- Format message with class=&amp;quot;error&amp;quot; or similar&lt;br /&gt;
    --     alert  -- string, with message key&lt;br /&gt;
    --     about  -- string, with explanation&lt;br /&gt;
    -- Returns message with markup&lt;br /&gt;
    local story = factory( alert )&lt;br /&gt;
    local r, scope, style&lt;br /&gt;
    if Config.self then&lt;br /&gt;
        story = string.format( &amp;quot;%s * %s&amp;quot;, Config.self, story )&lt;br /&gt;
    end&lt;br /&gt;
    if not Config.frame then&lt;br /&gt;
        Config.frame = mw.getCurrentFrame()&lt;br /&gt;
    end&lt;br /&gt;
    if Config.frame:preprocess( &amp;quot;{{REVISIONID}}&amp;quot; ) == &amp;quot;&amp;quot; then&lt;br /&gt;
        Config.errCat  = false&lt;br /&gt;
        Config.errHide = false&lt;br /&gt;
        scope          = string.format( &amp;quot;%s error&amp;quot;, Config.errClass )&lt;br /&gt;
    else&lt;br /&gt;
        scope = Config.errClass&lt;br /&gt;
    end&lt;br /&gt;
    if Config.errHide then&lt;br /&gt;
        style = &amp;quot;style='display:none'&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        style = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if Config.errClasses then&lt;br /&gt;
        scope = string.format( &amp;quot;%s %s&amp;quot;,&lt;br /&gt;
                               scope, Config.errClasses )&lt;br /&gt;
    end&lt;br /&gt;
    r = string.format( &amp;quot;&amp;lt;span class=\&amp;quot;%s\&amp;quot; %s&amp;gt;%s&amp;lt;/span&amp;gt;&amp;quot;,&lt;br /&gt;
                       scope, style, story )&lt;br /&gt;
    if about then&lt;br /&gt;
        r = string.format( &amp;quot;%s %s&amp;quot;, r, about )&lt;br /&gt;
    end&lt;br /&gt;
    if Config.errCat then&lt;br /&gt;
        if Config.errNS then&lt;br /&gt;
            local ns = mw.title.getCurrentTitle().namespace&lt;br /&gt;
            local st = type( Config.errNS )&lt;br /&gt;
            if st == &amp;quot;string&amp;quot; then&lt;br /&gt;
                local space  = string.format( &amp;quot;.*%%s%d%%s.*&amp;quot;, ns )&lt;br /&gt;
                local spaces = string.format( &amp;quot; %s &amp;quot;, Config.errNS )&lt;br /&gt;
                if spaces:match( space ) then&lt;br /&gt;
                    Config.errNS = false&lt;br /&gt;
                end&lt;br /&gt;
            elseif st == &amp;quot;table&amp;quot; then&lt;br /&gt;
                for i = 1, #Config.errNS do&lt;br /&gt;
                    if Config.errNS[ i ] == ns then&lt;br /&gt;
                        Config.errNS = false&lt;br /&gt;
                        break    -- for i&lt;br /&gt;
                    end&lt;br /&gt;
                end -- for i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if not Config.errNS then&lt;br /&gt;
            r = string.format( &amp;quot;%s[[Category:%s]]&amp;quot;, r, Config.errCat )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fault()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Export.failsafe = function ( attempt )&lt;br /&gt;
    local since = attempt&lt;br /&gt;
    local r&lt;br /&gt;
    if since then&lt;br /&gt;
        since = mw.text.trim( since )&lt;br /&gt;
        if since == &amp;quot;&amp;quot; then&lt;br /&gt;
           since = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if since then&lt;br /&gt;
        if since &amp;gt; Export.serial then&lt;br /&gt;
            r = &amp;quot;&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            r = Export.serial&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = Export.serial&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Export.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Export.features = function ( assign )&lt;br /&gt;
    -- Configure appearance&lt;br /&gt;
    --     assign  -- table, with components&lt;br /&gt;
    if type( assign ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        for k, v in pairs( assign ) do&lt;br /&gt;
            assign[ k ] = v&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
    end&lt;br /&gt;
end -- Export.features()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Export.format = function ( article, all )&lt;br /&gt;
    -- Analyze code, create URL, format&lt;br /&gt;
    --     article  -- string, with bibcode ID&lt;br /&gt;
    --     all      -- full version available&lt;br /&gt;
    --                 true or string with details&lt;br /&gt;
    -- Returns string, with external link or error message&lt;br /&gt;
    local scan   = &amp;quot;^([12][05-9]%d%d)%a[0-9a-zA-Z.&amp;amp;]+%%?$&amp;quot;&lt;br /&gt;
    local serial = article&lt;br /&gt;
    local s = type( article )&lt;br /&gt;
    local legal, less, r&lt;br /&gt;
    if s ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
        -- Work-around; 2016-02 strange things&lt;br /&gt;
        if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
            serial = article[ 1 ]&lt;br /&gt;
        else&lt;br /&gt;
            serial = tostring( serial )&lt;br /&gt;
        end&lt;br /&gt;
        mw.log( &amp;quot;bibcode.format() 2016-02&amp;quot;, s, article )&lt;br /&gt;
    end&lt;br /&gt;
    legal = serial:match( scan )&lt;br /&gt;
    if not legal then&lt;br /&gt;
        less = serial:match( &amp;quot;%%%x%x&amp;quot; )&lt;br /&gt;
        if less then&lt;br /&gt;
            serial = mw.uri.decode( serial )&lt;br /&gt;
            legal  = serial:match( scan )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if legal then&lt;br /&gt;
        legal = ( tonumber( legal ) &amp;lt;= tonumber( os.date( &amp;quot;%Y&amp;quot; ) ) )&lt;br /&gt;
    end&lt;br /&gt;
    if legal then&lt;br /&gt;
        if #serial == 19 then&lt;br /&gt;
            r = string.format( &amp;quot;[%s%s %s]&amp;quot;,&lt;br /&gt;
                               Config.site, serial, serial )&lt;br /&gt;
            if Config.showArticle then&lt;br /&gt;
                r = string.format( &amp;quot;[[%s|bibcode]]:%s&amp;quot;,&lt;br /&gt;
                                   Config.showArticle, r )&lt;br /&gt;
            else&lt;br /&gt;
                r = &amp;quot;bibcode:&amp;quot; .. r&lt;br /&gt;
            end&lt;br /&gt;
            if less then&lt;br /&gt;
                r = string.format( &amp;quot;%s %s&amp;quot;,&lt;br /&gt;
                                   r,  fault( &amp;quot;errEncodedURL&amp;quot; ) )&lt;br /&gt;
            end&lt;br /&gt;
            if all then&lt;br /&gt;
                local suffix = factory( &amp;quot;supply&amp;quot; )&lt;br /&gt;
                if type( all ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                    suffix = string.format( &amp;quot;%s&amp;amp;#160;/ %s&amp;quot;, suffix, all )&lt;br /&gt;
                end&lt;br /&gt;
                r = string.format( &amp;quot;%s (%s)&amp;quot;, r, suffix )&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            r = string.format( &amp;quot;%s ''%s''&amp;quot;,&lt;br /&gt;
                               fault( &amp;quot;errLength&amp;quot; ),  serial )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = string.format( &amp;quot;%s ''%s''&amp;quot;,&lt;br /&gt;
                           fault( &amp;quot;errInvalid&amp;quot; ),  serial )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Export.format()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Export&lt;br /&gt;
local p = { }&lt;br /&gt;
&lt;br /&gt;
p.main = function ( argsF, argsT )&lt;br /&gt;
    -- Invocation&lt;br /&gt;
    --     argsF  -- table, with #invoke parameters, or false&lt;br /&gt;
    --     argsT  -- table, with template parameters&lt;br /&gt;
    -- Returns appropriate string, or table if argsF.mode = false&lt;br /&gt;
    local r, stuff, suffix&lt;br /&gt;
    if argsF then&lt;br /&gt;
        Config.errCat     = argsF.errCat&lt;br /&gt;
        Config.errClasses = argsF.errClasses&lt;br /&gt;
        Config.errHide    = faculty( argsF.errHide )&lt;br /&gt;
        Config.errNS      = argsF.errNS&lt;br /&gt;
        if argsF.mode ~= nil then&lt;br /&gt;
            Config.mode = argsF.mode&lt;br /&gt;
        end&lt;br /&gt;
        if argsF.showArticle ~= nil then&lt;br /&gt;
            if argsF.showArticle == &amp;quot;&amp;quot; then&lt;br /&gt;
                Config.showArticle = false&lt;br /&gt;
            else&lt;br /&gt;
                Config.showArticle = argsF.showArticle&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if type( argsT ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local unknown&lt;br /&gt;
        r = { }&lt;br /&gt;
        for k, v in pairs( argsT ) do&lt;br /&gt;
            s = type( k )&lt;br /&gt;
            if s == &amp;quot;number&amp;quot; then&lt;br /&gt;
                if ( k == 1 ) then&lt;br /&gt;
                    stuff = mw.text.trim( v )&lt;br /&gt;
                    if ( stuff == &amp;quot;&amp;quot; ) then&lt;br /&gt;
                        stuff = false&lt;br /&gt;
                    end&lt;br /&gt;
                    k = false&lt;br /&gt;
                else&lt;br /&gt;
                    k = tostring( k )&lt;br /&gt;
                end&lt;br /&gt;
            elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
                if argsT.full then&lt;br /&gt;
                    if ( argsT.full == &amp;quot;&amp;quot; ) then&lt;br /&gt;
                        suffix = true&lt;br /&gt;
                    else&lt;br /&gt;
                        suffix = argsT.full&lt;br /&gt;
                    end&lt;br /&gt;
                    k = false&lt;br /&gt;
                elseif argsT.demo  or  faculty( argsT.NoCat ) then&lt;br /&gt;
                    Config.errCat  = false&lt;br /&gt;
                    Config.errHide = false&lt;br /&gt;
                    k = false&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if k then&lt;br /&gt;
                if not unknown then&lt;br /&gt;
                    unknown = { }&lt;br /&gt;
                end&lt;br /&gt;
                table.insert( unknown, k )&lt;br /&gt;
            end&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        if unknown then&lt;br /&gt;
            r = string.format( &amp;quot;'&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;' in Template:bibcode&amp;quot;,&lt;br /&gt;
                               table.concat( unknown, &amp;quot; &amp;quot; ) )&lt;br /&gt;
            r = fault( &amp;quot;errUnkown&amp;quot;, r )&lt;br /&gt;
        elseif not stuff then&lt;br /&gt;
            r = fault( &amp;quot;errMissing&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    if type( r ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        r = Export.format( stuff, suffix )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.f = function ( frame )&lt;br /&gt;
    local lucky, r&lt;br /&gt;
    Config.frame = frame&lt;br /&gt;
    lucky, r = pcall( p.main, frame.args, frame:getParent().args )&lt;br /&gt;
    if not lucky then&lt;br /&gt;
        r = string.format( &amp;quot;&amp;lt;span class=\&amp;quot;error\&amp;quot;&amp;gt;%s * %s&amp;lt;/span&amp;gt;&amp;quot;,&lt;br /&gt;
                           frame:getTitle(), r )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.f()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.failsafe = function ( frame )&lt;br /&gt;
    return Export.failsafe( frame.args[ 1 ] )&lt;br /&gt;
end -- p.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.bibcode = function ()&lt;br /&gt;
    return Export&lt;br /&gt;
end -- p.bibcode()&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>RalfRoletschek</name></author>
		
	</entry>
</feed>