<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3ASpielerstatistikzeile</id>
	<title>Modul:Spielerstatistikzeile - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3ASpielerstatistikzeile"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Spielerstatistikzeile&amp;action=history"/>
	<updated>2026-06-05T10:50:26Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Spielerstatistikzeile&amp;diff=2926279&amp;oldid=prev</id>
		<title>imported&gt;Doc Taxon: normalized 1/</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Spielerstatistikzeile&amp;diff=2926279&amp;oldid=prev"/>
		<updated>2025-04-05T21:07:29Z</updated>

		<summary type="html">&lt;p&gt;normalized 1/&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local reply = {}&lt;br /&gt;
local debug = {}&lt;br /&gt;
&lt;br /&gt;
local sort_code = {&lt;br /&gt;
    [&amp;#039;-?&amp;#039;] = &amp;#039; data-sort-value=&amp;quot;-0.4&amp;quot;&amp;#039;,&lt;br /&gt;
    [&amp;#039;-0+&amp;#039;] = &amp;#039; data-sort-value=&amp;quot;-0.3&amp;quot;&amp;#039;,&lt;br /&gt;
    [&amp;#039;-&amp;#039;] = &amp;#039; data-sort-value=&amp;quot;-0.2&amp;quot;&amp;#039;,&lt;br /&gt;
    [&amp;#039;-0&amp;#039;] = &amp;#039; data-sort-value=&amp;quot;-0.1&amp;quot;&amp;#039;,&lt;br /&gt;
    [&amp;#039;?&amp;#039;] = &amp;#039; data-sort-value=&amp;quot;0.1&amp;quot;&amp;#039;,&lt;br /&gt;
    [&amp;#039;0+]&amp;#039;] = &amp;#039; data-sort-value=&amp;quot;0.2&amp;quot;&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function dump(t, ...)&lt;br /&gt;
    local args = {...}&lt;br /&gt;
    for _, s in ipairs(args) do&lt;br /&gt;
        table.insert(t, s)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function cell_color_toggle(cell_color)&lt;br /&gt;
    return (cell_color == &amp;#039;&amp;#039; and &amp;#039;class=&amp;quot;hintergrundfarbe-basis&amp;quot;&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function sumstring(value)&lt;br /&gt;
    -- Receives a string containing a sum in the form:&lt;br /&gt;
    -- a1 + a2 + a3 + ... + an, where each addend is a positive or negative number&lt;br /&gt;
    -- and returns the total sum.&lt;br /&gt;
    local addendums = mw.text.split(value, &amp;#039;+&amp;#039;, true)&lt;br /&gt;
    local sum = 0&lt;br /&gt;
    for _, addendum in ipairs(addendums) do&lt;br /&gt;
        _, _, a = string.find(addendum, &amp;#039;^(-?%d+)&amp;#039;)&lt;br /&gt;
        if a then sum = sum + tonumber(a) end&lt;br /&gt;
    end&lt;br /&gt;
    return sum&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =================================================================&lt;br /&gt;
-- Class for accumulating sums&lt;br /&gt;
-- =================================================================&lt;br /&gt;
local Sum = {}&lt;br /&gt;
Sum.__index = Sum&lt;br /&gt;
&lt;br /&gt;
function Sum.new(is_reti, sum)&lt;br /&gt;
    return setmetatable({&lt;br /&gt;
        N = 0,&lt;br /&gt;
        n_interrogativi = 0,&lt;br /&gt;
        n_trattini = 0,&lt;br /&gt;
        is_reti = is_reti or false,&lt;br /&gt;
        n_interrogativi_minus = 0,&lt;br /&gt;
        n_zero_minus = 0,&lt;br /&gt;
        n_zero_plus = 0,&lt;br /&gt;
        n_zero_plus_minus = 0,&lt;br /&gt;
        do_sum = (sum == nil) or false,&lt;br /&gt;
        sum = sum or 0,&lt;br /&gt;
        end_plus = &amp;#039;&amp;#039;&lt;br /&gt;
     }, Sum)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Sum:status()&lt;br /&gt;
    local sum_result&lt;br /&gt;
    if self.do_sum then&lt;br /&gt;
        sum_result = tonumber(self.sum)&lt;br /&gt;
    else&lt;br /&gt;
        sum_result = self.sum&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat({&lt;br /&gt;
        &amp;#039;N: &amp;#039; .. tostring(self.N),&lt;br /&gt;
        &amp;#039;n_interrogativi: &amp;#039; .. tostring(self.n_interrogativi),&lt;br /&gt;
        &amp;#039;n_trattini: &amp;#039; .. tostring(self.n_trattini),&lt;br /&gt;
        &amp;#039;is_reti: &amp;#039; .. tostring(self.is_reti),&lt;br /&gt;
        &amp;#039;n_interrogativi_minus: &amp;#039; .. tostring(self.n_interrogativi_minus),&lt;br /&gt;
        &amp;#039;n_zero_minus: &amp;#039; .. tostring(self.n_zero_minus),&lt;br /&gt;
        &amp;#039;n_zero_plus:&amp;#039; .. tostring(self.n_zero_plus),&lt;br /&gt;
        &amp;#039;n_zero_plus_minus: &amp;#039; .. tostring(self.n_zero_plus_minus),&lt;br /&gt;
        &amp;#039;do_sum: &amp;#039; .. tostring(self.do_sum),&lt;br /&gt;
        &amp;#039;sum: &amp;#039; .. sum_result,&lt;br /&gt;
        &amp;#039;end_plus: &amp;#039; .. tostring(self.end_plus)&lt;br /&gt;
        }, &amp;#039;&amp;lt;br /&amp;gt;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Sum.__tostring(self)&lt;br /&gt;
    if self.n_trattini == self.N then&lt;br /&gt;
        return &amp;#039;-&amp;#039; .. self.end_plus&lt;br /&gt;
    elseif self.n_interrogativi == self.N then&lt;br /&gt;
        return &amp;#039;?&amp;#039; .. self.end_plus&lt;br /&gt;
    elseif self.n_interrogativi_minus == self.N then&lt;br /&gt;
        return &amp;#039;-?&amp;#039; .. self.end_plus&lt;br /&gt;
    elseif self.n_trattini + self.n_zero_minus == self.N then&lt;br /&gt;
        return &amp;#039;-0&amp;#039; .. self.end_plus&lt;br /&gt;
    elseif (self.n_trattini + self.n_zero_minus + self.n_zero_plus + self.n_interrogativi_minus) == self.N then&lt;br /&gt;
        return &amp;#039;-0+&amp;#039;&lt;br /&gt;
    elseif self.do_sum then&lt;br /&gt;
        if self.n_interrogativi &amp;gt; 0 or self.n_interrogativi_minus &amp;gt; 0 then self.end_plus = &amp;#039;+&amp;#039; end&lt;br /&gt;
        return tostring(self.sum) .. self.end_plus&lt;br /&gt;
    else&lt;br /&gt;
        return self.sum&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Sum:add(value)&lt;br /&gt;
    self.N = self.N + 1&lt;br /&gt;
    if string.match(value, &amp;quot;%+$&amp;quot;) then self.end_plus = &amp;#039;+&amp;#039; end&lt;br /&gt;
    if self.is_reti then&lt;br /&gt;
        if value == &amp;#039;?&amp;#039; then&lt;br /&gt;
            self.n_interrogativi = self.n_interrogativi +1&lt;br /&gt;
            return&lt;br /&gt;
        elseif value == &amp;#039;-?&amp;#039; then&lt;br /&gt;
             self.n_interrogativi_minus =  self.n_interrogativi_minus + 1&lt;br /&gt;
        elseif value == &amp;#039;-&amp;#039; then&lt;br /&gt;
            self.n_trattini = self.n_trattini + 1&lt;br /&gt;
            return&lt;br /&gt;
        elseif value == &amp;#039;-0&amp;#039; then&lt;br /&gt;
            self.n_zero_minus = self.n_zero_minus + 1&lt;br /&gt;
            return&lt;br /&gt;
        elseif value == &amp;#039;-0+&amp;#039; then&lt;br /&gt;
            self.n_zero_plus = self.n_zero_plus + 1&lt;br /&gt;
            return&lt;br /&gt;
        end&lt;br /&gt;
    elseif value == &amp;#039;-&amp;#039; then&lt;br /&gt;
        self.n_trattini = self.n_trattini + 1&lt;br /&gt;
        return&lt;br /&gt;
    elseif value == &amp;#039;?&amp;#039; then&lt;br /&gt;
        self.n_interrogativi = self.n_interrogativi + 1&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
    if self.do_sum then&lt;br /&gt;
        self.sum = self.sum + (tonumber(value) or sumstring(value))&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
setmetatable(Sum, { __call = function(_, ...) return Sum.new(...) end })&lt;br /&gt;
-- =================================================================&lt;br /&gt;
-- End of class declaration for sum&lt;br /&gt;
-- =================================================================&lt;br /&gt;
&lt;br /&gt;
function p.sommastat(frame)&lt;br /&gt;
    -- If called via #invoke, use the arguments passed to the invoking template.&lt;br /&gt;
    -- Otherwise, for testing purposes, assume that the arguments are passed directly.&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        origArgs = frame:getParent().args&lt;br /&gt;
    else&lt;br /&gt;
        origArgs = frame.args&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function nil_if_blank(s)&lt;br /&gt;
        if s and s == &amp;#039;&amp;#039; then return nil end&lt;br /&gt;
        return s&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local skip_amm_esp = (origArgs.C == &amp;#039;no&amp;#039;) or false&lt;br /&gt;
    local data_cols = (skip_amm_esp and 2) or 4&lt;br /&gt;
    local pres = nil_if_blank(origArgs.pres)&lt;br /&gt;
    local reti = nil_if_blank(origArgs.reti)&lt;br /&gt;
    local amm = nil_if_blank(origArgs.amm)&lt;br /&gt;
    local esp = nil_if_blank(origArgs.esp)&lt;br /&gt;
    local cell_color = cell_color_toggle(&amp;#039;&amp;#039;)&lt;br /&gt;
    dump(reply, &amp;#039;&amp;#039;)&lt;br /&gt;
    local sums = { Sum(false, pres), Sum(true, reti), Sum(false, amm), Sum(false, esp)}&lt;br /&gt;
    local i = 0&lt;br /&gt;
    local end_loop = false&lt;br /&gt;
    while not end_loop do&lt;br /&gt;
        if i &amp;gt; 3 then break end&lt;br /&gt;
        for j = 1, data_cols do&lt;br /&gt;
            local cell_value = origArgs[i*4+j]&lt;br /&gt;
            if cell_value == nil then&lt;br /&gt;
                -- If the examined columns are not a complete series of 2 or 4 columns, add empty columns&lt;br /&gt;
                -- to maintain the alignment of the table&amp;#039;s data&lt;br /&gt;
                end_loop = true&lt;br /&gt;
                cell_color = cell_color_toggle(cell_color)&lt;br /&gt;
                if j == 1 then break end&lt;br /&gt;
                for k = j, data_cols do&lt;br /&gt;
                    dump(reply, &amp;#039;&amp;lt;td &amp;#039;, cell_color, &amp;#039;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
                end&lt;br /&gt;
                break&lt;br /&gt;
            else&lt;br /&gt;
                cell_value = mw.text.trim(cell_value)&lt;br /&gt;
                dump(reply, &amp;#039;&amp;lt;td &amp;#039;, cell_color, (sort_code[cell_value] or &amp;#039;&amp;#039;), &amp;#039;&amp;gt;&amp;#039;, cell_value, &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
                sums[j]:add(cell_value)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        cell_color = cell_color_toggle(cell_color)&lt;br /&gt;
        i = i + 1&lt;br /&gt;
    end&lt;br /&gt;
    if sums[1].N &amp;gt; 1 then&lt;br /&gt;
        for j = 1, data_cols do&lt;br /&gt;
            local cell_value = tostring(sums[j])&lt;br /&gt;
            dump(reply, &amp;#039;&amp;lt;td &amp;#039;, cell_color, (sort_code[cell_value] or &amp;#039;&amp;#039;),  &amp;#039;&amp;gt;&amp;#039;,  &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, cell_value,  &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;lt;/td&amp;gt;&amp;quot;)&lt;br /&gt;
            -- debug output&lt;br /&gt;
            -- dump(reply, &amp;#039;&amp;lt;td &amp;#039;, cell_color, (sort_code[cell_value] or &amp;#039;&amp;#039;),  &amp;#039;&amp;gt;&amp;#039;,  &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, cell_value,  &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. &amp;#039;&amp;lt;br /&amp;gt;&amp;#039; .. sums[j]:status() .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(reply)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Doc Taxon</name></author>
	</entry>
</feed>