<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-CH">
	<id>https://www.muri-gries.ch/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3AVorlage%3AarXiv</id>
	<title>Modul:Vorlage:arXiv - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.muri-gries.ch/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3AVorlage%3AarXiv"/>
	<link rel="alternate" type="text/html" href="https://www.muri-gries.ch/mediawiki/index.php?title=Modul:Vorlage:arXiv&amp;action=history"/>
	<updated>2026-04-20T00:31:29Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Muri</subtitle>
	<generator>MediaWiki 1.35.0</generator>
	<entry>
		<id>https://www.muri-gries.ch/mediawiki/index.php?title=Modul:Vorlage:arXiv&amp;diff=52726&amp;oldid=prev</id>
		<title>Beda: 1 Version importiert</title>
		<link rel="alternate" type="text/html" href="https://www.muri-gries.ch/mediawiki/index.php?title=Modul:Vorlage:arXiv&amp;diff=52726&amp;oldid=prev"/>
		<updated>2021-03-22T14:44:15Z</updated>

		<summary type="html">&lt;p&gt;1 Version importiert&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de-CH&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 22. März 2021, 14:44 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de-CH&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Beda</name></author>
	</entry>
	<entry>
		<id>https://www.muri-gries.ch/mediawiki/index.php?title=Modul:Vorlage:arXiv&amp;diff=52725&amp;oldid=prev</id>
		<title>de&gt;PerfektesChaos: 2019-05-16</title>
		<link rel="alternate" type="text/html" href="https://www.muri-gries.ch/mediawiki/index.php?title=Modul:Vorlage:arXiv&amp;diff=52725&amp;oldid=prev"/>
		<updated>2019-05-16T08:41:24Z</updated>

		<summary type="html">&lt;p&gt;2019-05-16&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;arXiv&amp;quot;,&lt;br /&gt;
                 serial = &amp;quot;2019-05-16&amp;quot;,&lt;br /&gt;
                 item   = 0 }&lt;br /&gt;
--[=[&lt;br /&gt;
Template:arXiv&lt;br /&gt;
and other issues dealing with arXiv 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_arXiv&amp;quot;,&lt;br /&gt;
    errClasses  = false,&lt;br /&gt;
    errHide     = false,&lt;br /&gt;
    errNS       = false,&lt;br /&gt;
    errConflict = { en = &amp;quot;Conflict in multiple parameters&amp;quot;,&lt;br /&gt;
                    de = &amp;quot;Konflikt durch überbestimmte Parameter&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;
    errMissing  = { en = &amp;quot;Missing ID&amp;quot;,&lt;br /&gt;
                    de = &amp;quot;ID fehlt&amp;quot; },&lt;br /&gt;
    errModule   = { en = &amp;quot;Library module missing:&amp;quot;,&lt;br /&gt;
                    de = &amp;quot;Bibliotheksmodul 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 = false&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 entry = Config[ apply ]&lt;br /&gt;
    local r&lt;br /&gt;
    if entry then&lt;br /&gt;
        -- TODO: page language&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 = tostring( mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                             :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                             :wikitext( string.format( &amp;quot;????.%s.????&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;
&lt;br /&gt;
local function fault( alert, about, frame )&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;
    --     frame  -- object&lt;br /&gt;
    -- Returns message with markup&lt;br /&gt;
    local scope = Config.errClass&lt;br /&gt;
    local story = factory( alert )&lt;br /&gt;
    local lucky, TemplUtl = pcall( require, &amp;quot;Module:TemplUtl&amp;quot; )&lt;br /&gt;
    local r, scope, style&lt;br /&gt;
    if type( TemplUtl ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        TemplUtl = TemplUtl.TemplUtl()&lt;br /&gt;
    end&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 Config.errClasses then&lt;br /&gt;
        if scope then&lt;br /&gt;
            scope = string.format( &amp;quot;%s %s&amp;quot;,&lt;br /&gt;
                                   scope, Config.errClasses )&lt;br /&gt;
        else&lt;br /&gt;
            scope = Config.errClasses&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if about then&lt;br /&gt;
        story = string.format( &amp;quot;%s %s&amp;quot;, story, about )&lt;br /&gt;
    end&lt;br /&gt;
    if type( TemplUtl ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        r = TemplUtl.failure( story,&lt;br /&gt;
                              not Config.errHide,&lt;br /&gt;
                              scope,&lt;br /&gt;
                              frame )&lt;br /&gt;
    else&lt;br /&gt;
        r = tostring( mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                             :addClass( scope )&lt;br /&gt;
                             :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                             :wikitext( story ) )&lt;br /&gt;
    end&lt;br /&gt;
    if Config.errCat then&lt;br /&gt;
        if Config.errNS then&lt;br /&gt;
            local st = type( Config.errNS )&lt;br /&gt;
            local ns&lt;br /&gt;
            if not Config.title then&lt;br /&gt;
                Config.title = mw.title.getCurrentTitle()&lt;br /&gt;
            end&lt;br /&gt;
            ns = Config.title.namespace&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 ( ask )&lt;br /&gt;
    -- Retrieve versioning and check for compliance&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- string, with required version or &amp;quot;wikidata&amp;quot;, or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns  string with appropriate version, or false&lt;br /&gt;
    local since = ask&lt;br /&gt;
    local r&lt;br /&gt;
    if since == &amp;quot;wikidata&amp;quot; then&lt;br /&gt;
        local item = Export.item&lt;br /&gt;
        since = false&lt;br /&gt;
        if type( item ) == &amp;quot;number&amp;quot;  and  item &amp;gt; 0 then&lt;br /&gt;
            local entity = mw.wikibase.getEntity( string.format( &amp;quot;Q%d&amp;quot;,&lt;br /&gt;
                                                                 item ) )&lt;br /&gt;
            if type( entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                local vsn = entity:formatPropertyValues( &amp;quot;P348&amp;quot; )&lt;br /&gt;
                if type( vsn ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                   type( vsn.value ) == &amp;quot;string&amp;quot; and&lt;br /&gt;
                   vsn.value ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    r = vsn.value&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not r then&lt;br /&gt;
        if not since  or  since &amp;lt;= Export.serial then&lt;br /&gt;
            r = Export.serial&lt;br /&gt;
        else&lt;br /&gt;
            r = false&lt;br /&gt;
        end&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.fair = function ( arXiv )&lt;br /&gt;
    -- Analyze code, create URL&lt;br /&gt;
    --     arXiv  -- string, with arXiv ID&lt;br /&gt;
    -- Returns table&lt;br /&gt;
    --     .url&lt;br /&gt;
    --     .site      URL of repository&lt;br /&gt;
    --     .scope     thematic archive until 2007&lt;br /&gt;
    --     .since     yymm&lt;br /&gt;
    --     .serial    n&lt;br /&gt;
    --     .sequence  version number&lt;br /&gt;
    --     .signature identifier within scope&lt;br /&gt;
    --     .legacy    true: before 2007-04-01&lt;br /&gt;
    --     .legal     true: fine&lt;br /&gt;
    local r = { arXiv = arXiv,&lt;br /&gt;
                site  = &amp;quot;https://arxiv.org/abs/&amp;quot;,&lt;br /&gt;
                url   = &amp;quot;https://arxiv.org/abs/&amp;quot; .. arXiv }&lt;br /&gt;
    local parts&lt;br /&gt;
    r.legal = arXiv:match( &amp;quot;^[-.0-9v]+$&amp;quot; )&lt;br /&gt;
    if r.legal then&lt;br /&gt;
        r.serial = arXiv&lt;br /&gt;
    else&lt;br /&gt;
        parts = mw.text.split( arXiv, &amp;quot;/&amp;quot;, true )&lt;br /&gt;
        if #parts == 2  and  parts[ 2 ] ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            r.scope  = parts[ 1 ]&lt;br /&gt;
            r.serial = parts[ 2 ]&lt;br /&gt;
            parts = mw.text.split( r.scope, &amp;quot;.&amp;quot;, true )&lt;br /&gt;
            if #parts &amp;lt;= 2 then&lt;br /&gt;
                local p = mw.text.split( parts[ 1 ], &amp;quot;-&amp;quot;, true )&lt;br /&gt;
                if #p &amp;lt;= 2 then&lt;br /&gt;
                    r.legal = p[ 1 ]:match( &amp;quot;^%l+$&amp;quot; )&lt;br /&gt;
                    if r.legal  and  #p == 2 then&lt;br /&gt;
                        r.legal = p[ 2 ]:match( &amp;quot;^%l+$&amp;quot; )&lt;br /&gt;
                    end&lt;br /&gt;
                    if r.legal  and  #parts == 2 then&lt;br /&gt;
                        r.legal = parts[ 2 ]:match( &amp;quot;^%l+$&amp;quot; )   or&lt;br /&gt;
                                  parts[ 2 ]:match( &amp;quot;^%u%u$&amp;quot; )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if r.legal and r.serial then&lt;br /&gt;
        parts = mw.text.split( r.serial, &amp;quot;v&amp;quot;, true )&lt;br /&gt;
        if #parts &amp;gt; 1 then&lt;br /&gt;
            r.serial   = parts[ 1 ]&lt;br /&gt;
            r.sequence = parts[ 2 ]&lt;br /&gt;
            r.legal    = ( #parts == 2   and&lt;br /&gt;
                           r.sequence:match( &amp;quot;^[1-9]%d*$&amp;quot; ) )&lt;br /&gt;
        end&lt;br /&gt;
        if r.legal then&lt;br /&gt;
            local split = &amp;quot;^([0129]%d)([01]%d)[.]?(%d+)$&amp;quot;&lt;br /&gt;
            local j, m, n = r.serial:match( split )&lt;br /&gt;
            r.legal = n&lt;br /&gt;
            if r.legal then&lt;br /&gt;
                r.since  = j .. m&lt;br /&gt;
                r.serial = n&lt;br /&gt;
                m        = tonumber( m )&lt;br /&gt;
                r.legal  = ( m &amp;lt;= 12 )&lt;br /&gt;
                if r.legal then&lt;br /&gt;
                    j = tonumber( j )&lt;br /&gt;
                    if j &amp;lt; 90 then&lt;br /&gt;
                        r.legal = ( j &amp;lt;= tonumber( os.date( &amp;quot;%y&amp;quot; ) ) )&lt;br /&gt;
                    end&lt;br /&gt;
                    if r.legal then&lt;br /&gt;
                        local k = 5&lt;br /&gt;
                        local scheme&lt;br /&gt;
                        r.legacy = ( j &amp;gt; 90   or&lt;br /&gt;
                                     j &amp;lt; 7    or&lt;br /&gt;
                                     ( j == 7  and  m &amp;lt; 4 ) )&lt;br /&gt;
                        if r.legacy then&lt;br /&gt;
                            k = 3&lt;br /&gt;
                        elseif j &amp;lt; 15 then&lt;br /&gt;
                            k = 4&lt;br /&gt;
                        end&lt;br /&gt;
                        n        = tonumber( n )&lt;br /&gt;
                        scheme   = string.format( &amp;quot;%%0%dd&amp;quot;, k )&lt;br /&gt;
                        r.serial = string.format( scheme, n )&lt;br /&gt;
                        r.legal  = ( r.serial:len() == k )&lt;br /&gt;
                        if r.legacy  and  not r.scope then&lt;br /&gt;
                            r.legal = false&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if r.legal then&lt;br /&gt;
        r.signature = r.since&lt;br /&gt;
        if not r.legacy then&lt;br /&gt;
            r.signature = r.signature .. &amp;quot;.&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        r.signature = r.signature .. r.serial&lt;br /&gt;
        if r.sequence then&lt;br /&gt;
            r.signature = string.format( &amp;quot;%sv%s&amp;quot;,&lt;br /&gt;
                                         r.signature, r.sequence )&lt;br /&gt;
        end&lt;br /&gt;
        if r.legacy then&lt;br /&gt;
            r.signature = string.format( &amp;quot;%s/%s&amp;quot;, r.scope, r.signature )&lt;br /&gt;
        end&lt;br /&gt;
        r.url = r.signature&lt;br /&gt;
    else&lt;br /&gt;
        r.signature = arXiv&lt;br /&gt;
        r.url       = r.signature&lt;br /&gt;
    end&lt;br /&gt;
    r.url = r.site .. r.url&lt;br /&gt;
    return r&lt;br /&gt;
end -- Export.fair()&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;
            Config[ 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 ( arXiv )&lt;br /&gt;
    -- Format template request&lt;br /&gt;
    --     arXiv  -- table, with result of analysis&lt;br /&gt;
    -- May be influenced by Config.mode (0: standard appearance).&lt;br /&gt;
    -- Returns appropriate string&lt;br /&gt;
    local r&lt;br /&gt;
    if type( arXiv ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local show&lt;br /&gt;
        if Config.mode == 0  or  true then&lt;br /&gt;
            if arXiv.scope   and  not arXiv.legacy then&lt;br /&gt;
                show = string.format( &amp;quot;%s&amp;amp;#160;&amp;amp;#91;%s&amp;amp;#93;&amp;quot;,&lt;br /&gt;
                                      arXiv.signature, arXiv.scope )&lt;br /&gt;
            else&lt;br /&gt;
                show = arXiv.signature&lt;br /&gt;
            end&lt;br /&gt;
            r    = string.format( &amp;quot;[%s %s]&amp;quot;, arXiv.url, show )&lt;br /&gt;
            show = &amp;quot;arxiv&amp;quot;&lt;br /&gt;
            if Config.showArticle then&lt;br /&gt;
                local title = mw.title.new( Config.showArticle )&lt;br /&gt;
                if not Config.title then&lt;br /&gt;
                    Config.title = mw.title.getCurrentTitle()&lt;br /&gt;
                end&lt;br /&gt;
                if not mw.title.equals( title, Config.title ) then&lt;br /&gt;
                    show = string.format( &amp;quot;[[%s|arxiv]]&amp;quot;,&lt;br /&gt;
                                          Config.showArticle )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            r = string.format( &amp;quot;%s:%s&amp;quot;, show, r )&lt;br /&gt;
        end&lt;br /&gt;
        if not arXiv.legal then&lt;br /&gt;
            r = string.format( &amp;quot;%s %s &amp;#039;&amp;#039;%s&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
                               r,&lt;br /&gt;
                               fault( &amp;quot;errInvalid&amp;quot;, false, frame ),&lt;br /&gt;
                               arXiv.arXiv )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = &amp;quot;Module:Template:arXiv::format() no table arg&amp;quot;&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, frame )&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;
    --     frame  -- object, or nil&lt;br /&gt;
    -- Returns appropriate string, or table if argsF.mode = false&lt;br /&gt;
    local r&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 &amp;lt;= 2 ) then&lt;br /&gt;
                    r[ k ] = mw.text.trim( v )&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 k == &amp;quot;id&amp;quot;  or&lt;br /&gt;
                   k == &amp;quot;archive&amp;quot; then&lt;br /&gt;
                    r[ k ] = v&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;#039;&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;#039; in Template:arXiv&amp;quot;,&lt;br /&gt;
                               table.concat( unknown, &amp;quot; &amp;quot; ) )&lt;br /&gt;
            r = fault( &amp;quot;errUnkown&amp;quot;, r, frame )&lt;br /&gt;
        elseif ( r[ 1 ] and r.archive )  or&lt;br /&gt;
               ( r[ 2 ] and r.id )   then&lt;br /&gt;
            r = fault( &amp;quot;errConflict&amp;quot;,&lt;br /&gt;
                       &amp;quot;1= ./. archive= | 2= ./. id=&amp;quot;,&lt;br /&gt;
                       frame )&lt;br /&gt;
        else&lt;br /&gt;
            r[ 1 ] = ( r[ 1 ] or r.archive )&lt;br /&gt;
            r[ 2 ] = ( r[ 2 ] or r.id )&lt;br /&gt;
            if r[ 1 ] == &amp;quot;&amp;quot; then&lt;br /&gt;
                r[ 1 ] = false&lt;br /&gt;
            end&lt;br /&gt;
            if r[ 2 ] == &amp;quot;&amp;quot; then&lt;br /&gt;
                r[ 2 ] = false&lt;br /&gt;
            end&lt;br /&gt;
            if r[ 1 ] and r[ 2 ] then&lt;br /&gt;
                r[ 1 ] = string.format( &amp;quot;%s/%s&amp;quot;, r[ 1 ], r[ 2 ] )&lt;br /&gt;
            elseif not r[ 1 ] then&lt;br /&gt;
                if r[ 2 ] then&lt;br /&gt;
                    r[ 1 ] = r[ 2 ]&lt;br /&gt;
                else&lt;br /&gt;
                    r = fault( &amp;quot;errMissing&amp;quot;, false, frame )&lt;br /&gt;
                end&lt;br /&gt;
            end&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.fair( r[ 1 ] )&lt;br /&gt;
        if Config.mode then&lt;br /&gt;
            r = Export.format( r )&lt;br /&gt;
        end&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, frame )&lt;br /&gt;
    if not lucky then&lt;br /&gt;
        r = tostring( mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                             :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
                             :wikitext( string.format( &amp;quot;%s * %s&amp;quot;,&lt;br /&gt;
                                                       frame:getTitle(),&lt;br /&gt;
                                                       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;
    -- Versioning interface&lt;br /&gt;
    local s = type( frame )&lt;br /&gt;
    local since&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        since = frame.args[ 1 ]&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        since = frame&lt;br /&gt;
    end&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;
    return Export.failsafe( since )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.arXiv = function ()&lt;br /&gt;
    return Export&lt;br /&gt;
end -- p.arXiv()&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>de&gt;PerfektesChaos</name></author>
	</entry>
</feed>