<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.helmstedt-wiki.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3ASort</id>
	<title>Modul:Sort - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.helmstedt-wiki.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3ASort"/>
	<link rel="alternate" type="text/html" href="https://www.helmstedt-wiki.de/index.php?title=Modul:Sort&amp;action=history"/>
	<updated>2026-04-10T13:18:12Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Helmstedt-Wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://www.helmstedt-wiki.de/index.php?title=Modul:Sort&amp;diff=23442&amp;oldid=prev</id>
		<title>Admin: AZ: Die Seite wurde neu angelegt: local Sort = { suite  = &quot;Sort&quot;,                serial = &quot;2024-01-01&quot;,                item   = 24205172 } --[=[ Sort ]=]   local Failsafe  = Sort local GlobalMod = Sort    local foreignModule = function ( access, advanced, append, alt, alert )     -- Fetch global module     -- Precondition:     --     access    -- string, with name of base module     --     advanced  -- true, for require(); else mw.l…</title>
		<link rel="alternate" type="text/html" href="https://www.helmstedt-wiki.de/index.php?title=Modul:Sort&amp;diff=23442&amp;oldid=prev"/>
		<updated>2024-06-20T18:33:40Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Hilfe:Zusammenfassung_und_Quellen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Hilfe:Zusammenfassung und Quellen (Seite nicht vorhanden)&quot;&gt;AZ&lt;/a&gt;: Die Seite wurde neu angelegt: local Sort = { suite  = &amp;quot;Sort&amp;quot;,                serial = &amp;quot;2024-01-01&amp;quot;,                item   = 24205172 } --[=[ Sort ]=]   local Failsafe  = Sort local GlobalMod = Sort    local foreignModule = function ( access, advanced, append, alt, alert )     -- Fetch global module     -- Precondition:     --     access    -- string, with name of base module     --     advanced  -- true, for require(); else mw.l…&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Sort = { suite  = &amp;quot;Sort&amp;quot;,&lt;br /&gt;
               serial = &amp;quot;2024-01-01&amp;quot;,&lt;br /&gt;
               item   = 24205172 }&lt;br /&gt;
--[=[&lt;br /&gt;
Sort&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local Failsafe  = Sort&lt;br /&gt;
local GlobalMod = Sort&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local foreignModule = function ( access, advanced, append, alt, alert )&lt;br /&gt;
    -- Fetch global module&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     access    -- string, with name of base module&lt;br /&gt;
    --     advanced  -- true, for require(); else mw.loadData()&lt;br /&gt;
    --     append    -- string, with subpage part, if any; or false&lt;br /&gt;
    --     alt       -- number, of wikidata item of root; or false&lt;br /&gt;
    --     alert     -- true, for throwing error on data problem&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns whatever, probably table&lt;br /&gt;
    -- 2020-01-01&lt;br /&gt;
    local storage = access&lt;br /&gt;
    local finer = function ()&lt;br /&gt;
                      if append then&lt;br /&gt;
                          storage = string.format( &amp;quot;%s/%s&amp;quot;,&lt;br /&gt;
                                                   storage,&lt;br /&gt;
                                                   append )&lt;br /&gt;
                      end&lt;br /&gt;
                  end&lt;br /&gt;
    local fun, lucky, r, suited&lt;br /&gt;
    if advanced then&lt;br /&gt;
        fun = require&lt;br /&gt;
    else&lt;br /&gt;
        fun = mw.loadData&lt;br /&gt;
    end&lt;br /&gt;
    GlobalMod.globalModules = GlobalMod.globalModules or { }&lt;br /&gt;
    suited = GlobalMod.globalModules[ access ]&lt;br /&gt;
    if not suited then&lt;br /&gt;
        finer()&lt;br /&gt;
        lucky, r = pcall( fun,  &amp;quot;Module:&amp;quot; .. storage )&lt;br /&gt;
    end&lt;br /&gt;
    if not lucky then&lt;br /&gt;
        if not suited  and&lt;br /&gt;
           type( alt ) == &amp;quot;number&amp;quot;  and&lt;br /&gt;
           alt &amp;gt; 0 then&lt;br /&gt;
            suited = string.format( &amp;quot;Q%d&amp;quot;, alt )&lt;br /&gt;
            suited = mw.wikibase.getSitelink( suited )&lt;br /&gt;
            GlobalMod.globalModules[ access ] = suited or true&lt;br /&gt;
        end&lt;br /&gt;
        if type( suited ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            storage = suited&lt;br /&gt;
            finer()&lt;br /&gt;
            lucky, r = pcall( fun, storage )&lt;br /&gt;
        end&lt;br /&gt;
        if not lucky and alert then&lt;br /&gt;
            error( &amp;quot;Missing or invalid page: &amp;quot; .. storage )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- foreignModule()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort.lex = function ( adjust, apply, adapt )&lt;br /&gt;
    -- Build ASCII sortkey for text value&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     adjust  -- string to be aligned&lt;br /&gt;
    --     apply   -- string or table, with base&lt;br /&gt;
    --                &amp;quot;latin&amp;quot;&lt;br /&gt;
    --     adapt   -- string or table, with variation, or false&lt;br /&gt;
    --                &amp;quot;DIN5007m2&amp;quot;  -- DIN 5007 mode &amp;quot;2&amp;quot;&lt;br /&gt;
    local r = adjust&lt;br /&gt;
    if adapt  or  not r:match( &amp;quot;^[ -~]*$&amp;quot; ) then&lt;br /&gt;
        local collate, post, pre&lt;br /&gt;
        if apply then&lt;br /&gt;
            collate = apply&lt;br /&gt;
        else&lt;br /&gt;
            collate = &amp;quot;uni&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if type( collate ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            collate = foreignModule( Sort.suite,&lt;br /&gt;
                                     false,&lt;br /&gt;
                                     collate,&lt;br /&gt;
                                     Sort.item )&lt;br /&gt;
        end&lt;br /&gt;
        if adapt  and  type( collate ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            local variants = type( adapt )&lt;br /&gt;
            local n&lt;br /&gt;
            if variants == &amp;quot;string&amp;quot; then&lt;br /&gt;
                variants = mw.text.split( adapt, &amp;quot;%s+&amp;quot; )&lt;br /&gt;
            elseif variants == &amp;quot;table&amp;quot; then&lt;br /&gt;
                variants = adapt&lt;br /&gt;
            else&lt;br /&gt;
                variants = { }&lt;br /&gt;
            end&lt;br /&gt;
            n = #variants&lt;br /&gt;
            if n == 1  and  variants[ 1 ] == &amp;quot;&amp;quot; then&lt;br /&gt;
                n = 0&lt;br /&gt;
            end&lt;br /&gt;
            if n &amp;gt; 0 then&lt;br /&gt;
                local tmp = { }&lt;br /&gt;
                local var&lt;br /&gt;
                for k, v in pairs( collate ) do&lt;br /&gt;
                    tmp[ k ] = v&lt;br /&gt;
                end    -- for k, v&lt;br /&gt;
                collate = tmp&lt;br /&gt;
                for i = 1, n do&lt;br /&gt;
                    tmp = foreignModule( Sort.suite,&lt;br /&gt;
                                         false,&lt;br /&gt;
                                         variants[ i ],&lt;br /&gt;
                                         Sort.item )&lt;br /&gt;
                    if type( tmp ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                        var = tmp.single&lt;br /&gt;
                        if type( var ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
                            -- legacy&lt;br /&gt;
                            var = tmp&lt;br /&gt;
                        end&lt;br /&gt;
                        if type( var ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                            for k, v in pairs( var ) do&lt;br /&gt;
                                collate[ k ] = v&lt;br /&gt;
                            end    -- for k, v&lt;br /&gt;
                        end&lt;br /&gt;
                        var = tmp.pre&lt;br /&gt;
                        if type( var ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                            if type( pre ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
                                pre = { }&lt;br /&gt;
                            end&lt;br /&gt;
                            for k, v in pairs( var ) do&lt;br /&gt;
                                pre[ k ] = v&lt;br /&gt;
                            end    -- for k, v&lt;br /&gt;
                        end&lt;br /&gt;
                        var = tmp.post&lt;br /&gt;
                        if type( var ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                            if type( post ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
                                post = { }&lt;br /&gt;
                            end&lt;br /&gt;
                            for k, v in pairs( var ) do&lt;br /&gt;
                                post[ k ] = v&lt;br /&gt;
                            end    -- for k, v&lt;br /&gt;
                        end&lt;br /&gt;
                    elseif type( tmp ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                        collate = tmp&lt;br /&gt;
                        break    -- for i&lt;br /&gt;
                    else&lt;br /&gt;
                        collate = &amp;quot;Invalid table &amp;quot; .. variants[ i ]&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 type( collate ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            local k, n, s, start&lt;br /&gt;
            if type( pre ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                for k, v in pairs( pre ) do&lt;br /&gt;
                    r = mw.ustring.gsub( r, k, v )&lt;br /&gt;
                end    -- for k, v&lt;br /&gt;
            end&lt;br /&gt;
            n = mw.ustring.len( r )&lt;br /&gt;
            for i = n, 1, -1 do&lt;br /&gt;
                k = mw.ustring.codepoint( r, i, i )&lt;br /&gt;
                if k &amp;lt; 127 then    -- ASCII&lt;br /&gt;
                    s = ( k &amp;lt; 32 )    -- htab newline whitespace&lt;br /&gt;
                    if s then&lt;br /&gt;
                        s = &amp;quot; &amp;quot;&lt;br /&gt;
                    end&lt;br /&gt;
                elseif ( k &amp;gt;= 0x0300  and  k &amp;lt;= 0x0362 )   or&lt;br /&gt;
                       ( k &amp;gt;= 0x1AB0  and  k &amp;lt;= 0x1AFF )   or&lt;br /&gt;
                       ( k &amp;gt;= 0x1DC0  and  k &amp;lt;= 0x1DFF )   or&lt;br /&gt;
                       ( k &amp;gt;= 0xFE20  and  k &amp;lt;= 0xFE2F ) then&lt;br /&gt;
                    -- COMBINING ...&lt;br /&gt;
                    s = &amp;quot;&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                    s = collate[ k ]&lt;br /&gt;
                end&lt;br /&gt;
                if s then&lt;br /&gt;
                    if i &amp;gt; 1 then&lt;br /&gt;
                        s = mw.ustring.sub( r, 1,  i - 1 )  ..  s&lt;br /&gt;
                    end&lt;br /&gt;
                    r = s .. mw.ustring.sub( r,  i + 1 )&lt;br /&gt;
                end&lt;br /&gt;
            end    -- for i--&lt;br /&gt;
            if type( post ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                for k, v in pairs( post ) do&lt;br /&gt;
                    r = mw.ustring.gsub( r, k, v )&lt;br /&gt;
                end    -- for k, v&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            r = &amp;quot;**ERROR** Sort.lex ** Submodule unavailable &amp;quot; .. collate&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    r = r:gsub( &amp;quot;  +&amp;quot;, &amp;quot; &amp;quot; )&lt;br /&gt;
    return r&lt;br /&gt;
end -- Sort.lex()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sort.num = function ( adjust, ad, at, align, absolute )&lt;br /&gt;
    -- Build sortkey for heading numerical value&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     adjust    -- string to be aligned; leading digits / minus&lt;br /&gt;
    --     ad        -- decimal separator; &amp;quot;.&amp;quot; or &amp;quot;,&amp;quot;; defaults to &amp;quot;.&amp;quot;&lt;br /&gt;
    --     at        -- thousands group separator; defaults to none&lt;br /&gt;
    --                  &amp;quot;,&amp;quot;  &amp;quot;.&amp;quot;  &amp;quot;&amp;#039;&amp;quot;&lt;br /&gt;
    --     align     -- number of leading zeros / maximum length&lt;br /&gt;
    --                  defaults to 15&lt;br /&gt;
    --     absolute  -- negative figures by digits; default: by value&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string with sortkey&lt;br /&gt;
    local max    = 15&lt;br /&gt;
    local mid    = 46    -- &amp;quot;.&amp;quot;&lt;br /&gt;
    local min1   = -1    -- none&lt;br /&gt;
    local min2   = -2    -- none&lt;br /&gt;
    local low    = false&lt;br /&gt;
    local last   = false&lt;br /&gt;
    local lead   = true&lt;br /&gt;
    local source = tostring( adjust )&lt;br /&gt;
    local sub    = &amp;quot;.&amp;quot;&lt;br /&gt;
    local suffix = false&lt;br /&gt;
    local n      = mw.ustring.len( source )&lt;br /&gt;
    local r      = &amp;quot;&amp;quot;&lt;br /&gt;
    local c&lt;br /&gt;
    if ad then&lt;br /&gt;
        mid = mw.ustring.codepoint( ad, 1, 1 )&lt;br /&gt;
    end&lt;br /&gt;
    if at then&lt;br /&gt;
        min1, min2 = mw.ustring.codepoint( at, 1, 2 )&lt;br /&gt;
    end&lt;br /&gt;
    if align then&lt;br /&gt;
        max = align&lt;br /&gt;
    end&lt;br /&gt;
    for i = 1, n do&lt;br /&gt;
        c = mw.ustring.codepoint( source, i, i )&lt;br /&gt;
        if c &amp;gt; 32 then    -- not whitespace&lt;br /&gt;
            if c &amp;gt;= 48 and c &amp;lt;= 57 then    -- digits&lt;br /&gt;
                r   = string.format( &amp;quot;%s%c&amp;quot;, r, c )&lt;br /&gt;
                max = max - 1&lt;br /&gt;
            elseif c == min1 or c == min2 then    -- group separator&lt;br /&gt;
            elseif c == mid then    -- decimal separator&lt;br /&gt;
                 for j = i + 1, n do&lt;br /&gt;
                     c = mw.ustring.codepoint( source, j, j )&lt;br /&gt;
                     if c &amp;gt;= 48 and c &amp;lt;= 57 then    -- digits&lt;br /&gt;
                         sub = string.format( &amp;quot;%s%c&amp;quot;, sub, c )&lt;br /&gt;
                     elseif c == min1 or c == min2 then    -- grouping&lt;br /&gt;
                     else&lt;br /&gt;
                         i = j&lt;br /&gt;
                         break    -- for j&lt;br /&gt;
                     end&lt;br /&gt;
                     i = n&lt;br /&gt;
                 end    -- for j&lt;br /&gt;
                 last = true&lt;br /&gt;
            elseif lead then&lt;br /&gt;
                if c == 45 or c == 8722 then    -- minus&lt;br /&gt;
                    low = true&lt;br /&gt;
                elseif c ~= 43 then    -- plus&lt;br /&gt;
                    last = true&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                last = true&lt;br /&gt;
            end&lt;br /&gt;
            lead = false&lt;br /&gt;
        elseif not lead then    -- whitespace not leading&lt;br /&gt;
            last = true&lt;br /&gt;
        end&lt;br /&gt;
        if last then&lt;br /&gt;
            if i &amp;lt; n then&lt;br /&gt;
                suffix = mw.ustring.sub( source, i )&lt;br /&gt;
                if c == 69  or  c == 101 then    -- E e&lt;br /&gt;
                    local s = suffix:match( &amp;quot;^[Ee](-?%d+)&amp;quot; )&lt;br /&gt;
                    if s then&lt;br /&gt;
                        j      = tonumber( s )&lt;br /&gt;
                        sub    = sub:sub( 2 )&lt;br /&gt;
                        suffix = suffix:sub( #s + 2 )&lt;br /&gt;
                        if j &amp;gt; 0 then&lt;br /&gt;
                            if j &amp;gt; #sub then&lt;br /&gt;
                                sub = sub .. string.rep( &amp;quot;0&amp;quot;,  j - #sub )&lt;br /&gt;
                            end&lt;br /&gt;
                            r   = r .. sub:sub( 1, j )&lt;br /&gt;
                            sub = sub:sub( j + 1 )&lt;br /&gt;
                            max = max - j&lt;br /&gt;
                        elseif j &amp;lt; 0 then&lt;br /&gt;
                            j = - j&lt;br /&gt;
                            if j &amp;gt; #r then&lt;br /&gt;
                                r = string.rep( &amp;quot;0&amp;quot;,  j - #r ) .. r&lt;br /&gt;
                            end&lt;br /&gt;
                            sub = r:sub( - j ) .. sub&lt;br /&gt;
                            r   = r:sub( 1,  #r - j )&lt;br /&gt;
                            max = max + j&lt;br /&gt;
                        end&lt;br /&gt;
                        sub = &amp;quot;.&amp;quot; .. sub&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            break    -- for i&lt;br /&gt;
       end&lt;br /&gt;
    end    -- for i&lt;br /&gt;
    if low then&lt;br /&gt;
        if not absolute then   -- complementary value&lt;br /&gt;
            local s    = &amp;quot;.&amp;quot;&lt;br /&gt;
            local cmpl = function ( str, k )&lt;br /&gt;
                             return 57 - str:byte( k )&lt;br /&gt;
                         end&lt;br /&gt;
            for i = 2, #sub do&lt;br /&gt;
                s = string.format( &amp;quot;%s%d&amp;quot;,  s,  cmpl( sub, i ) )&lt;br /&gt;
            end    -- for i&lt;br /&gt;
            for i = #r, 1, -1 do&lt;br /&gt;
                s = string.format( &amp;quot;%d%s&amp;quot;,  cmpl( r, i ),  s )&lt;br /&gt;
            end    -- for i--&lt;br /&gt;
            r = s&lt;br /&gt;
            if max &amp;gt; 0 then&lt;br /&gt;
                r = string.rep( &amp;quot;9&amp;quot;, max )  ..  r&lt;br /&gt;
            end&lt;br /&gt;
            sub = false&lt;br /&gt;
            max = 0&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if sub then&lt;br /&gt;
        r = r .. sub&lt;br /&gt;
    end&lt;br /&gt;
    if max &amp;gt; 0 then&lt;br /&gt;
        r = string.rep( &amp;quot;0&amp;quot;, max )  ..  r&lt;br /&gt;
    end&lt;br /&gt;
    if low then&lt;br /&gt;
        r = &amp;quot;-&amp;quot; .. r&lt;br /&gt;
    end&lt;br /&gt;
    if suffix then&lt;br /&gt;
        r = string.format( &amp;quot;%s %s&amp;quot;, r, suffix )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Sort.num()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failsafe.failsafe = function ( atleast )&lt;br /&gt;
    -- Retrieve versioning and check for compliance&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     atleast  -- string, with required version&lt;br /&gt;
    --                         or wikidata|item|~|@ or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns  string  -- with queried version/item, also if problem&lt;br /&gt;
    --              false   -- if appropriate&lt;br /&gt;
    -- 2020-08-17&lt;br /&gt;
    local since  = atleast&lt;br /&gt;
    local last   = ( since == &amp;quot;~&amp;quot; )&lt;br /&gt;
    local linked = ( since == &amp;quot;@&amp;quot; )&lt;br /&gt;
    local link   = ( since == &amp;quot;item&amp;quot; )&lt;br /&gt;
    local r&lt;br /&gt;
    if last  or  link  or  linked  or  since == &amp;quot;wikidata&amp;quot; then&lt;br /&gt;
        local item = Failsafe.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 suited = string.format( &amp;quot;Q%d&amp;quot;, item )&lt;br /&gt;
            if link then&lt;br /&gt;
                r = suited&lt;br /&gt;
            else&lt;br /&gt;
                local entity = mw.wikibase.getEntity( suited )&lt;br /&gt;
                if type( entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    local seek = Failsafe.serialProperty or &amp;quot;P348&amp;quot;&lt;br /&gt;
                    local vsn  = entity:formatPropertyValues( seek )&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;
                        if last  and  vsn.value == Failsafe.serial then&lt;br /&gt;
                            r = false&lt;br /&gt;
                        elseif linked then&lt;br /&gt;
                            if mw.title.getCurrentTitle().prefixedText&lt;br /&gt;
                               ==  mw.wikibase.getSitelink( suited ) then&lt;br /&gt;
                                r = false&lt;br /&gt;
                            else&lt;br /&gt;
                                r = suited&lt;br /&gt;
                            end&lt;br /&gt;
                        else&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;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if type( r ) == &amp;quot;nil&amp;quot; then&lt;br /&gt;
        if not since  or  since &amp;lt;= Failsafe.serial then&lt;br /&gt;
            r = Failsafe.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 -- Failsafe.failsafe()&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.Tlatin = function ( frame )&lt;br /&gt;
    -- Template::latin&lt;br /&gt;
    --     {{{1}}}&lt;br /&gt;
    -- #invoke&lt;br /&gt;
    --     v  -- variant, omitted or &amp;quot;DIN5007m2&amp;quot;&lt;br /&gt;
    local lucky, r = pcall( Sort.lex,&lt;br /&gt;
                            frame.args[ 1 ]  or&lt;br /&gt;
                            frame:getParent().args[ 1 ]  or&lt;br /&gt;
                            &amp;quot;&amp;quot;,&lt;br /&gt;
                            &amp;quot;latin&amp;quot;,&lt;br /&gt;
                            frame.args.v )&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.Tlatin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.Tn = function ( frame )&lt;br /&gt;
    -- Template::numerical&lt;br /&gt;
    --     {{{1}}}&lt;br /&gt;
    -- #invoke&lt;br /&gt;
    --     d  -- decimal separator; defaults to &amp;quot;.&amp;quot;&lt;br /&gt;
    --     t  -- thousands group separator; defaults to none&lt;br /&gt;
    --     z  -- number of leading zeros / maximum length; defaults to 15&lt;br /&gt;
    --     m  -- negative figures by digits; default: by value&lt;br /&gt;
    local lucky, r = pcall( Sort.num,&lt;br /&gt;
                            frame.args[ 1 ]  or&lt;br /&gt;
                            frame:getParent().args[ 1 ]  or&lt;br /&gt;
                            &amp;quot;&amp;quot;,&lt;br /&gt;
                            frame.args.d,&lt;br /&gt;
                            frame.args.t,&lt;br /&gt;
                            tonumber( frame.args.z ),&lt;br /&gt;
                            frame.args.m == &amp;quot;1&amp;quot; )&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.Tn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.textOrder = function ( frame )&lt;br /&gt;
    -- order text&lt;br /&gt;
    --     {{{1}}}  -- first text&lt;br /&gt;
    --     {{{2}}}  -- second text&lt;br /&gt;
    -- Not empty if {{{1}}} is before {{{2}}}&lt;br /&gt;
    local t1 = frame.args[ 1 ]  or  &amp;quot;&amp;quot;&lt;br /&gt;
    local t2 = frame.args[ 2 ]  or  &amp;quot;&amp;quot;&lt;br /&gt;
    local r&lt;br /&gt;
    if t1 &amp;lt; t2 then&lt;br /&gt;
        r = &amp;quot;1&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        r = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.textOrder&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 Failsafe.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.Sort = function ()&lt;br /&gt;
    return Sort&lt;br /&gt;
end -- p.Sort&lt;br /&gt;
&lt;br /&gt;
setmetatable( p,  { __call = function ( func, ... )&lt;br /&gt;
                                 setmetatable( p, nil )&lt;br /&gt;
                                 return Failsafe&lt;br /&gt;
                             end } )&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>