Modul Diskussion:Benutzer:Kpfiwa/calc
Letzter Kommentar: vor 3 Jahren von Lómelinde in Abschnitt Linterfehler
Nur Zwischensicherung
[Quelltext bearbeiten]--[=[ calc Version 1b BETA, 2020-007-06
project management: [[:de:User:Gadacz]]
Should still be thoroughly "cleaned" and optimized.
Due the different language versions only after consultation.
Various extensions planned (number formatting, attributes, alignment, more
calculation options, e.g.: item no/rank {# {1}} and much more
© „CC-by-sa 4.0“
--]=]
----
--- https://en.wikipedia.org/wiki/Module:Math
--[[ https://phabricator.wikimedia.org/T68051 BEACHTE PREPROCESS!! Hilfe:Lua/Modul_im_Wiki
https://en.wikipedia.org/wiki/Wikipedia:Lua#Unit_testing
mw.getContentLanguage().code -- Returns the content language.
mw.getCurrentFrame():preprocess("{{PAGELANGUAGE}}") -- Returns the page language.
mw.getCurrentFrame():preprocess( "{{int:Lang}}" ) -- Returns the user language
(if the wiki has created the messages needed to support this feature).
--]]
local p = {} -- transfer array
text, result1, result2 , txt= '',{}, {}, '' -- for interim results
local regexg = "%{([^{]-)%{.*" -- extract group sign
local regexv = "%{[^{]-%{([%d-+*/^|]*)}}" -- AKTUELL NUR ZAHLENWERTE! extract value (number or 'sum', 'avg', 'min', 'max', numbers in combinations)
local l10na = {}
l10na["de"] = {
frm = "for", -- Format
max = "max", -- Maximum
min = "min", -- Minimum
ave = "dur", -- Durchschnitt
sum = "sum", -- Summe
tot = "tot", -- Total
sub = "zwi", -- Zwichensumme
emp = "dek", -- "Dekoration" (Schriftbild, Ausrichtung)
}
l10na["en"] = {
frm = "for", -- format
max = "max", -- maximum
min = "min", -- minimum
ave = "ave", -- average
sum = "sum", -- sum
tot = "tot", -- total
sub = "sub", -- subtotal
emp = "emp", -- emphasis, typeface
}
l10na["lv"] = {
frm = "for", -- formāts
max = "max", -- maksimums
min = "min", -- minimāls
ave = "vid", -- vidējais
sum = "kop", -- kopā
tot = "vis", -- viss
sub = "sta", -- starpsumma
emp = "rot", -- rotājums
}
l10na["ru"] = {
frm = "фор", -- формат
max = "мак", -- максимальная
min = "мин", -- минимальный
ave = "дис", -- дисплей
sum = "всь", -- всього
tot = "все", -- Все
sub = "про", -- Промежуточный итог
emp = "укр", -- украшение
}
l10na["uk"] = {
frm = "фор", -- формат
max = "мак", -- максимум
min = "мін", -- мінімум
ave = "сре", -- средний
sum = "всь", -- всього
tot = "все", -- Все
sub = "під", -- Підточний
emp = "при", -- прикраса
}
local l10n = l10na[mw.language.getContentLanguage():getCode()]
if not l10n then
l10n = l10na.en
end
-- say = l10n.msgA
local function tu(a,z) --[[ converts a to uppercase and extracts the first character
or z number of characters utf8 --]]
-- return string.sub(string.upper(a), 1, z or 1)
local a = mw.ustring.sub(a, 1, z or 1)
a = mw.ustring.upper(a)
return a
end
local function tonum(ein) -- converts numbers entered differently
local erg, stat = '',0
erg, stat = string.gsub(ein, "(%D*)([%s%-%d,%.%']+)(%D*)", "%1|%2|%3")
if stat > 0 then
nix, erg ,nix = string.match(erg, "(.*)|(.*)|(.*)")
erg=string.gsub(string.reverse(erg), "[%.,]+", "QIX",1) -- QIX = temp dummy wo any risk of confusion
erg=string.gsub(erg, "[%.,%s%']+", "")
erg=string.reverse(string.gsub(erg, "QIX", "."))*1
end -- if stat
return erg, ein
end
local function emph(was) -- emphasis, typeface for the text acc. template parameters 'd = ...' (decoration)
local css = ''
-- if not was or #was < 1 then return 'NIX' end - undecorated return
if #was <= 6 then -- what is larger will be a directly entered css statement
was = tu(was,6)
for e in string.gmatch(was, ".") do -- separate if several parameters
if e == 'F' or e == 'B' then css = css .. " font-weight:bold;"
elseif e == 'K' or e == 'I' then css = css .. " font-style:italic;" -- geman kursiv
elseif e == 'U' then css = css .. " text-decoration:underline;"
elseif e == 'V' or e == 'C' then css = css .. " text-transform:uppercase;" -- german versal
elseif e == 'S' then css = css .. " font-variant:small-caps;"
elseif e == 'L' then css = css .. " letter-spacing:0.3em;"
end -- if e
end -- for e
else -- if #was
was = string.gsub(was,"['%\"]+",'') -- possibly remove quotation marks
css = string.gsub(was,"[%w]+%s*=%s*",'') -- if accidentally started with 'string ='
end -- if #was
return css
end
--[[ NICHT FÜR de-WP!!! Da gab es Löschung von Vorlage:Coltab, aus der die Farbgebung stammt
function hsv2rgb(h,s,v)
function val2hsv(val, max, min, gb)
--]]
--[=[ siehe auch
https://de.wikipedia.org/wiki/Hilfe:Lua/Modul_im_Wiki#frame:expandTemplate()
https://de.wikipedia.org/wiki/Hilfe:Lua/Modul_im_Wiki#frame:preprocess()
in [[:de:Modul:Flagge]] : tt=trailer; trailer = frame:preprocess{text = tt}
--]=]
function prep(a) -- extract group
ret = string.gsub(a,'([^{^}]+)',"%1") --regex for group-name [A-Z0-9#]
return tu(ret)
end
function templatevalues(t) -- processes all contained templates into values
--[[
frame:expandTemplate{ title = title, args = table } ?????
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/de#frame:expandTemplate
z, zr= string.gsub(t,reg,prep("%1") or nil);zz=zz+1
if zr > 0 then
return z, zr
end
while zzr do -- derzeit MIST
txt,zzr=filter(txt)
if zzr then print(txt,zzr) end
end --]]
return t
end
-- https://stackoverflow.com/questions/20598937/handling-cr-line-endings-in-lua >>
local function cr_lines(s)
--return s:gsub('\r\n?', '\n'):gmatch('(.-)\n')
return s:gsub('\n', '\n\nX')
end
function nowiex(txt,frame) --- unstrip nowiki & process all including templates
return frame:preprocess(mw.text.unstripNoWiki(txt))
end
--[=[ function p.f(frame)
* Evaluation
** Calculation of the color value via val2hsv and hsv2rgb - NICHT FÜR de-WP
** Composition of the field content in the table including
formatting and coloring instructions. - NICHT FÜR de:WP
* Return of the result as an array (Lua table)
!! Note: The identifiers for the parameters are reduced to the first
letter and changed to upper case
Lower case is meaningless, the identifier can be chosen as long as the
first letter is unique
Parameter:
@param 1 or named-key = 'V'alie oder de:'W'ert
transfer of the text to be evaluated.
If the text contains pipes, especially tables,
the transferred text must be included in <nowiki> ... </nowiki>
@param 2 oder 'F'ormat
Specification of formatting numerical values to be used:
thousands separator, decimal separator, preceding minus, identifier (€ % $ km² ...)
@param 'O'rientation if different from general specification of table
O=L -> left-justified
O=R -> right-justified
O=Z oder O=C -> centered :de:zentriert
O=D Alignment with decimal point/-comma (# of dec places if necessary)
@param 'A'ttribute: addition like 'style = ', colspan, rowspan, class ...
@param 'C'ontrast, <100 fades -- NICHT FÜR de-WP!!!
--]=]
function p.f(frame)
local numval, maximum, kontrast, hell , minimum = 0, 10, 25, 100, 0
local stringval, orient, anhang, sort, erg , class, css, style = '', '', '', '', '', '','', ''
local ft
frame = frame:getParent() -- first call up the transferred parameters
for key, val in pairs(frame.args) do -- assign individual parameters
key = tu(key) -- convert/shorten all parameters to one capital letter
if key == "1" or key == 'V' or key == 'W' then text = nowiex(val,frame) -- frame:preprocess(mw.text.unstripNoWiki(val))-- ; txt='</nowiki>' .. text-- processes all contained templates into values
--if key == "1" or key == 'V' or key == 'W' then text = templatevalues(val) -- processes all contained templates into values
elseif key == "2" or key == 'F' then format = val --[[ General formatting
of the numbers (# of digits, decimal places, signs, characters,
such as $ € km³ % ... --]]
end -- if key
end -- for key
--[[ The now translated text (template evaluation) is searched for "{? [...}}""
and the instructions specified there are executed.
Then the processed text with the calculation results is transferred
to the function call. --]]
--local mm = mw.getCurrentFrame():preprocess( "{{int:Lang}} {{Flagge|DEU}}", text )
local mmm = frame:preprocess("\n"..text) -- \n wichtig für Tabelle
txt=string.gsub(txt,"%{%|",'-CR-{|\n')
--return text, '<br>PREPROCESS= '..mm.."<br>TEXT="..txt1
--ret= 'TEXT=\n'.. text .. "<br>PREPROCESSED=<br>\n".. mmm
--ret= string.gsub(ret,"%{%|","TBL\n{|")
return text
end -- p.f function
return p
Linterfehler
[Quelltext bearbeiten]Da diese Seite Linterfehler auslöst setze ich den Code mal in syntaxhighlight, ich hoffe das ist ok. --Liebe Grüße, Lómelinde Diskussion 17:51, 11. Feb. 2021 (CET)