<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.wiidatabase.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3ADateTime%2Fsort</id>
	<title>Modul:DateTime/sort - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.wiidatabase.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3ADateTime%2Fsort"/>
	<link rel="alternate" type="text/html" href="https://wiki.wiidatabase.de/index.php?title=Modul:DateTime/sort&amp;action=history"/>
	<updated>2026-05-06T20:11:08Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in WiiDatabase Wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.wiidatabase.de/index.php?title=Modul:DateTime/sort&amp;diff=6485&amp;oldid=prev</id>
		<title>ICON: Die Seite wurde neu angelegt: „--[=[ 2015-08-05 Date and time utilities: Sort ]=]    -- local globals local DateTime  = false local Invalid   = &quot;-199999999999999&quot; local Templates = { } local…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.wiidatabase.de/index.php?title=Modul:DateTime/sort&amp;diff=6485&amp;oldid=prev"/>
		<updated>2018-07-11T17:19:04Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „--[=[ 2015-08-05 Date and time utilities: Sort ]=]    -- local globals local DateTime  = false local Invalid   = &amp;quot;-199999999999999&amp;quot; local Templates = { } local…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[=[ 2015-08-05&lt;br /&gt;
Date and time utilities: Sort&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- local globals&lt;br /&gt;
local DateTime  = false&lt;br /&gt;
local Invalid   = &amp;quot;-199999999999999&amp;quot;&lt;br /&gt;
local Templates = { }&lt;br /&gt;
local World     = { slang       = &amp;quot;en&amp;quot;,&lt;br /&gt;
                    sortPrefix  = { },&lt;br /&gt;
                    sortSep     = 46 }&lt;br /&gt;
World.sortPrefix.en  = {&lt;br /&gt;
    { &amp;quot;before&amp;quot;,       3 },&lt;br /&gt;
    { &amp;quot;begin&amp;quot;,        4 },&lt;br /&gt;
    { &amp;quot;begin of&amp;quot;,     4 },&lt;br /&gt;
    { &amp;quot;beginning&amp;quot;,    4 },&lt;br /&gt;
    { &amp;quot;beginning of&amp;quot;, 4 },&lt;br /&gt;
    { &amp;quot;since&amp;quot;,        6 },&lt;br /&gt;
    { &amp;quot;until&amp;quot;,        7 },&lt;br /&gt;
    { &amp;quot;end of&amp;quot;,       8 },&lt;br /&gt;
    { &amp;quot;after&amp;quot;,        9 },&lt;br /&gt;
    { &amp;quot;about&amp;quot;,        false }&lt;br /&gt;
}&lt;br /&gt;
local Span0 = &amp;quot;&amp;lt;span style=&amp;#039;visibility:hidden;&amp;#039;&amp;gt;0&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fault( alert )&lt;br /&gt;
    -- Format error message by class=error&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     alert  -- string, with error message&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     string, with decorated error message&lt;br /&gt;
    return string.format( &amp;quot;&amp;lt;span class=\&amp;quot;error\&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;quot;, alert )&lt;br /&gt;
end -- fault()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function favorite( arg )&lt;br /&gt;
    -- Test boolean template argument&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     arg  -- string, trimmed, with switch, or nil&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     boolean, true iff requested&lt;br /&gt;
    local r = false&lt;br /&gt;
    if arg then&lt;br /&gt;
        if #arg &amp;gt; 0 then&lt;br /&gt;
            r = ( arg ~= &amp;quot;0&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- favorite()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function feed( alien )&lt;br /&gt;
    -- Localize, if present&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     alien  -- string, with language code, or nil&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     table with sortPrefix, iff inital call&lt;br /&gt;
    local r = false&lt;br /&gt;
    if World.localized then&lt;br /&gt;
        r = World.sortPrefix.en&lt;br /&gt;
    else&lt;br /&gt;
        local lucky, data = pcall( mw.loadData, &amp;quot;Module:DateTime/local&amp;quot; )&lt;br /&gt;
        if lucky then&lt;br /&gt;
            if alien then&lt;br /&gt;
                World.slang = alien&lt;br /&gt;
            elseif data.slang then&lt;br /&gt;
                World.slang = data.slang&lt;br /&gt;
            end&lt;br /&gt;
            if data.sortPrefix and data.sortPrefix[ World.slang ] then&lt;br /&gt;
                r = data.sortPrefix[ World.slang ]&lt;br /&gt;
            end&lt;br /&gt;
            if type(data.sortSep) == &amp;quot;number&amp;quot; then&lt;br /&gt;
                World.sortSep = data.sortSep&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if not r then&lt;br /&gt;
            r = World.sortPrefix.en&lt;br /&gt;
        end&lt;br /&gt;
        World.localized = true&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- feed()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fetch( assign )&lt;br /&gt;
    -- Retrieve instance&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     DateTime prototype, or false&lt;br /&gt;
    -- Throws:&lt;br /&gt;
    --     error, if main module unavailable&lt;br /&gt;
    local l, r = pcall( require, &amp;quot;Module:DateTime&amp;quot; )&lt;br /&gt;
    if l then&lt;br /&gt;
        r = r.DateTime()( assign )&lt;br /&gt;
    else&lt;br /&gt;
        error( fault( &amp;quot;Module:DateTime&amp;quot; ) )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fetch()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fiat()&lt;br /&gt;
    -- Create sortkey from DateTime object&lt;br /&gt;
end -- fiat()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function field( assign, amenable, args )&lt;br /&gt;
    -- Combine data-sort-value, cell attributes and displayed data&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     assign    -- string, sortkey&lt;br /&gt;
    --     amenable  -- string, displayed content&lt;br /&gt;
    --     args      -- table, possible attributes&lt;br /&gt;
    --                         -- align&lt;br /&gt;
    --                         -- class&lt;br /&gt;
    --                         -- id&lt;br /&gt;
    --                         -- style&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     string with cell attributes and content&lt;br /&gt;
    local start = string.format( &amp;quot;data-sort-value=&amp;#039;%s&amp;#039;&amp;quot;, assign )&lt;br /&gt;
    local style&lt;br /&gt;
    local stick&lt;br /&gt;
    if args.align then&lt;br /&gt;
        local expand = { c = &amp;quot;center&amp;quot;,&lt;br /&gt;
                         l = &amp;quot;left&amp;quot;,&lt;br /&gt;
                         r = &amp;quot;right&amp;quot;,&lt;br /&gt;
                         center = &amp;quot;center&amp;quot;,&lt;br /&gt;
                         left   = &amp;quot;left&amp;quot;,&lt;br /&gt;
                         right  = &amp;quot;right&amp;quot; }&lt;br /&gt;
        stick = expand[ args.align ]&lt;br /&gt;
        if stick then&lt;br /&gt;
            string.format( &amp;quot;text-align:%s&amp;quot;, stick )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if args.style then&lt;br /&gt;
        style = args.style&lt;br /&gt;
        if stick then&lt;br /&gt;
            style = string.format( &amp;quot;%s;%s&amp;quot;, style, stick )&lt;br /&gt;
        end&lt;br /&gt;
    elseif stick then&lt;br /&gt;
        style = stick&lt;br /&gt;
    end&lt;br /&gt;
    if style then&lt;br /&gt;
        start = string.format( &amp;quot;%s style=&amp;#039;%s&amp;#039;&amp;quot;, start, style )&lt;br /&gt;
    end&lt;br /&gt;
    if args.class then&lt;br /&gt;
        start = string.format( &amp;quot;%s class=&amp;#039;%s&amp;#039;&amp;quot;, start, args.class )&lt;br /&gt;
    end&lt;br /&gt;
    if args.id then&lt;br /&gt;
        start = string.format( &amp;quot;%s id=&amp;#039;%s&amp;#039;&amp;quot;, start, args.id )&lt;br /&gt;
    end&lt;br /&gt;
    return string.format( &amp;quot;%s|%s&amp;quot;, start, amenable )&lt;br /&gt;
end -- field()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function figure( appoint, assign, align )&lt;br /&gt;
    -- Create sortkey number from DateTime object&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     appoint  -- table; valid DateTime object&lt;br /&gt;
    --     assign   -- digit, if adapting, or false&lt;br /&gt;
    --     align    -- true: leading zeros until 8 digits if positive&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     string with number, or false&lt;br /&gt;
    local r&lt;br /&gt;
    local dom   = appoint.dom&lt;br /&gt;
    local month = appoint.month&lt;br /&gt;
    local minor = 0&lt;br /&gt;
    local start = false&lt;br /&gt;
    if month then&lt;br /&gt;
        if assign == 3 and not dom then&lt;br /&gt;
            month = month - 1&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        if (assign == 8 or assign == 9) and not dom then&lt;br /&gt;
            month = 99&lt;br /&gt;
        else&lt;br /&gt;
            month = 0&lt;br /&gt;
            minor = 5&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if dom then&lt;br /&gt;
        if assign == 3 or assign == 4 then&lt;br /&gt;
            dom = dom - 1&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        if assign == 8 or assign == 9 then&lt;br /&gt;
            dom = 99&lt;br /&gt;
        else&lt;br /&gt;
            dom   = 0&lt;br /&gt;
            minor = 5&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    r = month * 100  +  dom&lt;br /&gt;
    if appoint.year then&lt;br /&gt;
        r = appoint.year * 10000  +  r&lt;br /&gt;
        if align  and  appoint.year &amp;lt; 1000 and not appoint.bc then&lt;br /&gt;
            if appoint.year &amp;lt; 100 then&lt;br /&gt;
                if appoint.year &amp;lt; 10 then&lt;br /&gt;
                    start = &amp;quot;000&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                    start = &amp;quot;00&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                start = &amp;quot;0&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    elseif align then&lt;br /&gt;
        if appoint.month  and  month &amp;lt; 10  and  month &amp;gt; 0 then&lt;br /&gt;
            start = &amp;quot;00000&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            start = &amp;quot;0000&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if appoint.bc then&lt;br /&gt;
        start = &amp;quot;-&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    r = tostring( r )&lt;br /&gt;
    if start then&lt;br /&gt;
        r = start .. r&lt;br /&gt;
    end&lt;br /&gt;
    if assign then&lt;br /&gt;
        minor = assign&lt;br /&gt;
    end&lt;br /&gt;
    if appoint.hour then&lt;br /&gt;
        feed()&lt;br /&gt;
        minor = minor  +  100000 * appoint.hour&lt;br /&gt;
        if appoint.min then&lt;br /&gt;
            minor = minor  +  1000 * appoint.min&lt;br /&gt;
            if appoint.sec then&lt;br /&gt;
                minor = minor  +  10 * appoint.sec&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        r = string.format( &amp;quot;%s%c%07d&amp;quot;,&lt;br /&gt;
                           r, World.sortSep, minor )&lt;br /&gt;
    elseif minor &amp;gt; 0 then&lt;br /&gt;
        feed()&lt;br /&gt;
        r = string.format( &amp;quot;%s%c%d&amp;quot;,&lt;br /&gt;
                           r, World.sortSep, minor )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- figure()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function flag( ahead, append )&lt;br /&gt;
    -- Combine invisible sortkey with displayed data&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     ahead   -- string, sortkey&lt;br /&gt;
    --     append  -- string, displayed content&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     string with cell content&lt;br /&gt;
    local s = &amp;quot;&amp;lt;span style=&amp;#039;display:none&amp;#039; class=&amp;#039;sortkey&amp;#039;&amp;gt;%s&amp;lt;/span&amp;gt;%s&amp;quot;&lt;br /&gt;
    return string.format( s, ahead, append )&lt;br /&gt;
end -- flag()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function focus( analyse, assign )&lt;br /&gt;
    -- Retrieve numeric sort value from date string&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     analyse  -- string, with date; time may be appended&lt;br /&gt;
    --     assign   -- digit, if adapting, or false&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     string with number, or false&lt;br /&gt;
    local r = fetch( analyse )&lt;br /&gt;
    if r then&lt;br /&gt;
        r = figure( r, assign, true )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- focus()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fore( analyse, alien )&lt;br /&gt;
    -- Retrieve numeric sort value from probably prefixed string&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     analyse  -- string, trimmed, for dating, letter at beginning&lt;br /&gt;
    --     alien    -- string, with language code, or nil&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     string with number, or false&lt;br /&gt;
    local prefix = feed( alien )&lt;br /&gt;
    local sort   = analyse:gsub( &amp;quot;&amp;amp;nbsp;&amp;quot;, &amp;quot; &amp;quot; )&lt;br /&gt;
                          :gsub( &amp;quot;&amp;amp;#160;&amp;quot;, &amp;quot; &amp;quot; )&lt;br /&gt;
                          :gsub( &amp;quot;&amp;amp;#32;&amp;quot;, &amp;quot; &amp;quot; )&lt;br /&gt;
    local move   = false&lt;br /&gt;
    if prefix then&lt;br /&gt;
        local lift   = mw.ustring.match( analyse, &amp;quot;^%u&amp;quot; )&lt;br /&gt;
        local n, scan&lt;br /&gt;
        for k, v in pairs( prefix ) do&lt;br /&gt;
            scan = v[ 1 ]&lt;br /&gt;
            if lift then&lt;br /&gt;
                scan = mw.ustring.upper( mw.ustring.sub( scan, 1, 1 ) )&lt;br /&gt;
                       .. mw.ustring.sub( scan, 2 )&lt;br /&gt;
            end&lt;br /&gt;
            n = mw.ustring.len( scan )&lt;br /&gt;
            if mw.ustring.sub( sort, 1, n ) == scan then&lt;br /&gt;
                sort = mw.text.trim( mw.ustring.sub( sort,  n + 1 ) )&lt;br /&gt;
                move = v[ 2 ]&lt;br /&gt;
                break -- for k, v&lt;br /&gt;
            end&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
    end&lt;br /&gt;
    return focus( sort, move )&lt;br /&gt;
end -- fore()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fruit( analyse, alien )&lt;br /&gt;
    -- Retrieve numeric sort value&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     analyse  -- string, trimmed, for dating&lt;br /&gt;
    --     alien    -- string, with language code, or nil&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     string with number&lt;br /&gt;
    local stamp = analyse:gsub( &amp;quot;{{0}}&amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
    local k     = mw.ustring.codepoint( stamp, 1, 1 )&lt;br /&gt;
    local r     = false&lt;br /&gt;
    if not k then    -- analyse is empty&lt;br /&gt;
        k     = 48&lt;br /&gt;
        stamp = &amp;quot;now&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if k == 45 then    -- ASCII hyphen minus&lt;br /&gt;
        if stamp:match( &amp;quot;^%-%d+$&amp;quot; ) then&lt;br /&gt;
            r = stamp .. &amp;quot;0000&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    elseif k &amp;gt;= 48  and  k &amp;lt;= 57 then    -- ASCII digit&lt;br /&gt;
        r = focus( stamp, false )&lt;br /&gt;
    elseif mw.ustring.match( stamp, &amp;quot;^%a&amp;quot; ) then    -- any letter&lt;br /&gt;
        r = fore( stamp, alien )&lt;br /&gt;
    end&lt;br /&gt;
    if type( r ) == &amp;quot;number&amp;quot; then&lt;br /&gt;
        r = tostring( r )&lt;br /&gt;
    elseif not r then&lt;br /&gt;
        r = Invalid&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fruit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Templates.SD = function ( args, advanced )&lt;br /&gt;
    -- Support Template:SD&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --    args     -- table, template parameters; each string or nil&lt;br /&gt;
    --                       1      -- formatted date&lt;br /&gt;
    --                       align  -- c l r&lt;br /&gt;
    --                       class&lt;br /&gt;
    --                       id&lt;br /&gt;
    --                       style&lt;br /&gt;
    --                       data-sort-type&lt;br /&gt;
    --    advanced  -- table, invoke parameters&lt;br /&gt;
    --                       cat  -- category&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     string, as template result; leading cell attributes&lt;br /&gt;
    local show = args[ 1 ]  or  &amp;quot;&amp;quot;&lt;br /&gt;
    local data = fetch( show )&lt;br /&gt;
    local sort&lt;br /&gt;
    if data then&lt;br /&gt;
        sort = args[ &amp;quot;data-sort-type&amp;quot; ]  or  &amp;quot;text&amp;quot;&lt;br /&gt;
        if sort == &amp;quot;text&amp;quot; then&lt;br /&gt;
            sort = figure( data, false, true )&lt;br /&gt;
        elseif sort == &amp;quot;number&amp;quot; then&lt;br /&gt;
            sort = figure( data, false, false )&lt;br /&gt;
        elseif sort == &amp;quot;isoDate&amp;quot; then&lt;br /&gt;
            sort = data:format( &amp;quot;ISO&amp;quot; )&lt;br /&gt;
        elseif sort == &amp;quot;date&amp;quot; then&lt;br /&gt;
            sort = data:format( &amp;quot;data-sort-type:date&amp;quot; )&lt;br /&gt;
        else&lt;br /&gt;
            sort = figure( data, false, true )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        sort = Invalid&lt;br /&gt;
        show = show .. fault( &amp;quot;(?!)&amp;quot; )&lt;br /&gt;
        if advanced.cat then&lt;br /&gt;
            show = string.format( &amp;quot;%s[[Category:%s]]&amp;quot;,&lt;br /&gt;
                                  show, advanced.cat )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return field( sort, show, args )&lt;br /&gt;
end -- Templates.SD()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function dts_dtsx( assigned, allow, append, appoint, alone )&lt;br /&gt;
    -- Output of Templates:dts Templates:dtsx&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --    assigned  -- table, date object&lt;br /&gt;
    --    allow     -- any: permit break before year&lt;br /&gt;
    --    append    -- string with additional sorting information, or nil&lt;br /&gt;
    --    appoint   -- string with additional text to be shown, or nil&lt;br /&gt;
    --    alone     -- permit hour without minute&lt;br /&gt;
    local opts = { london = true }&lt;br /&gt;
    local show, sort, spec&lt;br /&gt;
    if favorite( allow ) then&lt;br /&gt;
        spec = &amp;quot;T._Mon4 JJJJ hh:mm:ss&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        spec = &amp;quot;T._Mon4_JJJJ hh:mm:ss&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if alone then&lt;br /&gt;
        opts.lonely = true&lt;br /&gt;
    end&lt;br /&gt;
    show = assigned:format( spec, opts )&lt;br /&gt;
    if assigned.dom then&lt;br /&gt;
        if assigned.dom &amp;lt; 10 then&lt;br /&gt;
            show = Span0 .. show&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if appoint then&lt;br /&gt;
        show = string.format( &amp;quot;%s&amp;amp;#160;%s&amp;quot;, show, appoint )&lt;br /&gt;
    end&lt;br /&gt;
    sort = figure( assigned, false, true )&lt;br /&gt;
    if append then&lt;br /&gt;
        sort = string.format( &amp;quot;%s %s&amp;quot;, sort, append )&lt;br /&gt;
    end&lt;br /&gt;
    return  flag( sort, show )&lt;br /&gt;
end -- dts_dtsx()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Templates.dts = function ( args )&lt;br /&gt;
    -- Support Template:dts&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --    args   -- table, template parameters; each string or nil&lt;br /&gt;
    --                     1  -- dom&lt;br /&gt;
    --                     2  -- month, name, abbreviated name or number&lt;br /&gt;
    --                     3  -- year, since 1&lt;br /&gt;
    --                     4  -- time hh:mm:ss&lt;br /&gt;
    --                     u  -- any: permit break before year&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     string, as template result; leading sortkey&lt;br /&gt;
    local r    = args[ 4 ]&lt;br /&gt;
    local live = r&lt;br /&gt;
    local data&lt;br /&gt;
    if not r then&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    data = fetch( r )&lt;br /&gt;
    if data then&lt;br /&gt;
        if args[ 1 ] then&lt;br /&gt;
            data.dom = tonumber( args[ 1 ] )&lt;br /&gt;
            live     = true&lt;br /&gt;
        end&lt;br /&gt;
        r = args[ 2 ]&lt;br /&gt;
        if r then&lt;br /&gt;
            r = mw.text.trim( r )&lt;br /&gt;
            if r:match( &amp;quot;^%d+$&amp;quot; ) then&lt;br /&gt;
                data.month = tonumber( r )&lt;br /&gt;
                live       = true&lt;br /&gt;
            else&lt;br /&gt;
                data.lang = &amp;quot;de&amp;quot;&lt;br /&gt;
                r         = data:figure( r )&lt;br /&gt;
                if r then&lt;br /&gt;
                    live = true&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        r = args[ 3 ]&lt;br /&gt;
        if r and r:match( &amp;quot;^%s*-?%d+%s*$&amp;quot; ) then&lt;br /&gt;
            r = tonumber( r )&lt;br /&gt;
            if r &amp;lt; 0 then&lt;br /&gt;
                data.bc = true&lt;br /&gt;
                r       = - r&lt;br /&gt;
            end&lt;br /&gt;
            data.year = r&lt;br /&gt;
            live      = true&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        live = false&lt;br /&gt;
    end&lt;br /&gt;
    if live then&lt;br /&gt;
        r = dts_dtsx( data, args.u )&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 -- Templates.dts()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Templates.dtsx = function ( args )&lt;br /&gt;
    -- Support Template:dtsx&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --    args   -- table, template parameters; each string or nil&lt;br /&gt;
    --                     1      -- dom&lt;br /&gt;
    --                     2      -- month, number&lt;br /&gt;
    --                     3      -- year, since 1&lt;br /&gt;
    --                     4      -- hours&lt;br /&gt;
    --                     5      -- minutes&lt;br /&gt;
    --                     6      -- seconds&lt;br /&gt;
    --                     extra  -- additional sorting information&lt;br /&gt;
    --                     u      -- any: permit break before year&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     string, as template result; leading sortkey&lt;br /&gt;
    local data = fetch( false )&lt;br /&gt;
    local r    = args[ 2 ]&lt;br /&gt;
    local lonely&lt;br /&gt;
    local suffix&lt;br /&gt;
    if r then&lt;br /&gt;
        if r:match( &amp;quot;^%s*%d+%s*$&amp;quot; ) then&lt;br /&gt;
            data.month = tonumber( r )&lt;br /&gt;
            live       = true&lt;br /&gt;
            r          = args[ 1 ]&lt;br /&gt;
            if r and r:match( &amp;quot;^%s*%d+%s*$&amp;quot; ) then&lt;br /&gt;
                data.dom = tonumber( r )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        r = args[ 3 ]&lt;br /&gt;
        if r and r:match( &amp;quot;^%s*%-?%d+%s*$&amp;quot; ) then&lt;br /&gt;
            r = tonumber( r )&lt;br /&gt;
            if r &amp;lt; 0 then&lt;br /&gt;
                data.bc = true&lt;br /&gt;
                r       = - r&lt;br /&gt;
            end&lt;br /&gt;
            data.year = r&lt;br /&gt;
            live      = true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    r = args[ 4 ]&lt;br /&gt;
    if r then&lt;br /&gt;
        if r:match( &amp;quot;^%s*%d+%s*$&amp;quot; ) then&lt;br /&gt;
            data.hour = tonumber( r )&lt;br /&gt;
            suffix    = &amp;quot;Uhr&amp;quot;&lt;br /&gt;
            live      = true&lt;br /&gt;
            r         = args[ 5 ]&lt;br /&gt;
            if r and r:match( &amp;quot;^%s*%d+%s*$&amp;quot; ) then&lt;br /&gt;
                data.min = tonumber( r )&lt;br /&gt;
                r = args[ 6 ]&lt;br /&gt;
                if r and r:match( &amp;quot;^%s*%d+%s*$&amp;quot; ) then&lt;br /&gt;
                    data.sec = tonumber( r )&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                lonely = true&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if live then&lt;br /&gt;
        r = dts_dtsx( data, args.u, args.extra, suffix, lonely )&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 -- Templates.dtsx()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Templates.SortDate = function ( args )&lt;br /&gt;
    -- Support Template:dts&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --    args   -- table, template parameters; string or nil&lt;br /&gt;
    --                     1          -- ISO-date, BC with leading hyphen&lt;br /&gt;
    --                     2          -- F  -- full month name&lt;br /&gt;
    --                                   M  -- 3-letter-abbr month&lt;br /&gt;
    --                                   S  -- 4 letter or abbr month&lt;br /&gt;
    --                     2 or 3     -- nbsp  -- no line break at year&lt;br /&gt;
    --                                   sp    -- permit break at year&lt;br /&gt;
    --                     2, 3 or 4  -- link date&lt;br /&gt;
    --                     AT         -- Austrian, if not empty&lt;br /&gt;
    --                     davor      -- leading string displayed&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     string, as template result; leading sortkey&lt;br /&gt;
    local show  = args[ 1 ]&lt;br /&gt;
    local sort  = Invalid&lt;br /&gt;
    local start = args.davor&lt;br /&gt;
    if show then&lt;br /&gt;
        show = mw.text.trim( show )&lt;br /&gt;
        if show ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            local data  = fetch( false )&lt;br /&gt;
            local live  = false&lt;br /&gt;
            local y, m, d&lt;br /&gt;
            if ( mw.ustring.codepoint( show, 1, 1 ) == 45 ) then&lt;br /&gt;
                show = show:sub( 2 )&lt;br /&gt;
                data.bc = true&lt;br /&gt;
            end&lt;br /&gt;
            y, m, d = show:match( &amp;quot;^(%-?%d+)%-(%d+)%-(%d+)$&amp;quot; )&lt;br /&gt;
            if y then&lt;br /&gt;
                m = tonumber( m )&lt;br /&gt;
                d = tonumber( d )&lt;br /&gt;
                if m &amp;gt; 0 then&lt;br /&gt;
                   data.month = m&lt;br /&gt;
                   live       = true&lt;br /&gt;
                end&lt;br /&gt;
                if d &amp;gt; 0 then&lt;br /&gt;
                   data.dom = d&lt;br /&gt;
                   live     = true&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                y = show:match( &amp;quot;^(%-?%d+)$&amp;quot; )&lt;br /&gt;
            end&lt;br /&gt;
            if y then&lt;br /&gt;
                y = tonumber( y )&lt;br /&gt;
                if y &amp;lt; 0 then&lt;br /&gt;
                    data.bc = true&lt;br /&gt;
                    y       = - y&lt;br /&gt;
                end&lt;br /&gt;
                if y &amp;gt; 0 then&lt;br /&gt;
                   data.year = y&lt;br /&gt;
                   live      = true&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if live then&lt;br /&gt;
                local key  = 2&lt;br /&gt;
                local got  = args[ key ]&lt;br /&gt;
                local mode = 0&lt;br /&gt;
                local lines, link&lt;br /&gt;
                if got then&lt;br /&gt;
                    if got == &amp;quot;M&amp;quot; then&lt;br /&gt;
                        mode = 3&lt;br /&gt;
                    elseif got == &amp;quot;S&amp;quot; then&lt;br /&gt;
                        mode = 4&lt;br /&gt;
                    elseif got ~= &amp;quot;F&amp;quot; then&lt;br /&gt;
                        got = false&lt;br /&gt;
                    end&lt;br /&gt;
                    if got then&lt;br /&gt;
                        key = key + 1&lt;br /&gt;
                    end&lt;br /&gt;
                    got = args[ key ]&lt;br /&gt;
                    if got then&lt;br /&gt;
                        if got == &amp;quot;sp&amp;quot; then&lt;br /&gt;
                            lines = true&lt;br /&gt;
                        elseif got ~= &amp;quot;nbsp&amp;quot; then&lt;br /&gt;
                            got = false&lt;br /&gt;
                        end&lt;br /&gt;
                        if got then&lt;br /&gt;
                            key = key + 1&lt;br /&gt;
                        end&lt;br /&gt;
                        link = ( args[ key ] == &amp;quot;link&amp;quot; )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                if data.month then&lt;br /&gt;
                    local lAT1  = ( data.month == 1 and&lt;br /&gt;
                                    favorite( args.AT ) )&lt;br /&gt;
                    local score = data:full()&lt;br /&gt;
                    if mode == 0 then&lt;br /&gt;
                        if lAT1 then&lt;br /&gt;
                            show = &amp;quot;Jänner&amp;quot;&lt;br /&gt;
                        else&lt;br /&gt;
                            show = score&lt;br /&gt;
                        end&lt;br /&gt;
                    elseif mw.ustring.len( score ) &amp;gt; mode then&lt;br /&gt;
                        if lAT1 then&lt;br /&gt;
                            show = &amp;quot;Jän.&amp;quot;&lt;br /&gt;
                        else&lt;br /&gt;
                            show = data:first()&lt;br /&gt;
                        end&lt;br /&gt;
                    else&lt;br /&gt;
                        show = score&lt;br /&gt;
                        mode = 0&lt;br /&gt;
                    end&lt;br /&gt;
                    if data.dom then&lt;br /&gt;
                        local lazy = ( link  and mode == 0 )&lt;br /&gt;
                        show = string.format( &amp;quot;%d.&amp;amp;#160;%s&amp;quot;,&lt;br /&gt;
                                              data.dom, show )&lt;br /&gt;
                        if link then&lt;br /&gt;
                            if lazy then&lt;br /&gt;
                                show = string.format( &amp;quot;[[%s]]&amp;quot;, show )&lt;br /&gt;
                            else&lt;br /&gt;
                                show = string.format( &amp;quot;[[%d. %s|%s]]&amp;quot;,&lt;br /&gt;
                                                      data.dom, score,&lt;br /&gt;
                                                      show )&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                        if data.dom &amp;lt; 10 then&lt;br /&gt;
                            show = Span0 .. show&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                    if data.year then&lt;br /&gt;
                        if lines then&lt;br /&gt;
                            show = show .. &amp;quot; &amp;quot;&lt;br /&gt;
                        else&lt;br /&gt;
                            show = show .. &amp;quot;&amp;amp;#160;&amp;quot;&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                else&lt;br /&gt;
                    show = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if data.year then&lt;br /&gt;
                    local s = tostring( data.year )&lt;br /&gt;
                    if link then&lt;br /&gt;
                        show = string.format( &amp;quot;%s[[%s]]&amp;quot;, show, s )&lt;br /&gt;
                    else&lt;br /&gt;
                        show = show .. s&lt;br /&gt;
                    end&lt;br /&gt;
                    if data.bc then&lt;br /&gt;
                        show = show .. &amp;quot;&amp;amp;#160;v.&amp;amp;#8239;Chr.&amp;quot;&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
                sort = figure( data, false, true )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        show = &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if start then&lt;br /&gt;
        if #start &amp;gt; 0 then&lt;br /&gt;
            if #show &amp;gt; 0 then&lt;br /&gt;
                show = &amp;quot; &amp;quot; .. show&lt;br /&gt;
            end&lt;br /&gt;
            show = start .. show&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return flag( sort, show )&lt;br /&gt;
end -- Templates.SortDate()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Export&lt;br /&gt;
local p = { }&lt;br /&gt;
&lt;br /&gt;
function p.f( frame )&lt;br /&gt;
    local l, r = pcall( fruit,&lt;br /&gt;
                        mw.text.trim( frame.args[ 1 ] or &amp;quot;&amp;quot; ),&lt;br /&gt;
                        mw.text.trim( frame.args[ 2 ] or &amp;quot;de&amp;quot; ) )&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.f&lt;br /&gt;
&lt;br /&gt;
function p.fruit( analyse, alien )&lt;br /&gt;
    local l, r = pcall( fruit, analyse, alien )&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.fruit&lt;br /&gt;
&lt;br /&gt;
function p.template( frame )&lt;br /&gt;
    local r&lt;br /&gt;
    local fun = frame.args[ 1 ]&lt;br /&gt;
    if fun and Templates[ fun ] then&lt;br /&gt;
        local l&lt;br /&gt;
        l, r = pcall( Templates[ fun ],&lt;br /&gt;
                      frame:getParent().args,&lt;br /&gt;
                      frame.args )&lt;br /&gt;
    else&lt;br /&gt;
        r = &amp;quot;invalid template&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.template&lt;br /&gt;
&lt;br /&gt;
function p.test( apply, args, adjust )&lt;br /&gt;
    local r&lt;br /&gt;
    if apply and Templates[ apply ] then&lt;br /&gt;
        local l&lt;br /&gt;
        l, r = pcall( Templates[ apply ], args, adjust )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.test&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>ICON</name></author>
	</entry>
</feed>