Modul:Str: Unterschied zwischen den Versionen
K
Änderte den Schutz von „Modul:Str“: wieder auf Vollschutz ([Bearbeiten=Nur Administratoren] (unbeschränkt) [Verschieben=Nur Administratoren] (unbeschränkt))
K (13 Versionen: bei Wikipedia vom Löschen bedroht) |
de>Alraunenstern K (Änderte den Schutz von „Modul:Str“: wieder auf Vollschutz ([Bearbeiten=Nur Administratoren] (unbeschränkt) [Verschieben=Nur Administratoren] (unbeschränkt))) |
||
Zeile 102: | Zeile 102: | ||
end | end | ||
function escape_lua_regex(str) | |||
return mw.ustring.gsub(str, ".", { | |||
["%"] = "%%"; | |||
["^"] = "%^"; | |||
["$"] = "%$"; | |||
["."] = "%."; | |||
["("] = "%("; | |||
[")"] = "%)"; | |||
["["] = "%["; | |||
["]"] = "%]"; | |||
["?"] = "%?"; | |||
["*"] = "%*"; | |||
["+"] = "%+"; | |||
["-"] = "%-"; | |||
["\0"] = "%z"; | |||
}) | |||
end | |||
function Str.replace(frame) | |||
local text = frame.args[1] or "" -- Text, der bearbeitet werden soll | |||
local search = frame.args[2] or "" -- Textstellen innerhalb von "text" die ersetzt werden sollen | |||
if text == "" or search == "" then return "" end | |||
local replace = frame.args[3] or "" -- Ersetzungstext | |||
local count = tonumber(frame.args[4]) -- Anzahl der Ersetzungen (optional) | |||
local regexsearch = frame.args[5] -- beliebiger Wert um dafür zu sorgen, dass der Suchtext "search" als Lua-regulärer Ausdruck behandelt werden soll | |||
if not regexsearch or regexsearch == "" then | |||
search = escape_lua_regex(search) | |||
replace = mw.ustring.gsub(replace, "%%", "%%%%") | |||
end | |||
local result | |||
if count then | |||
result,_ = mw.ustring.gsub(text, search, replace, count) | |||
else | |||
result,_ = mw.ustring.gsub(text, search, replace) | |||
end | |||
return result | |||
end | |||
-- richtet Zahlen numerisch aus | |||
function Str.adjustnumber(frame) | |||
local ausgabe; | |||
local text = frame.args[1] or "" -- Text, der bearbeitet werden soll, i.d.R. eine Dezimalzahl | |||
local i_li = math.floor(tonumber(frame.args[2])) or 2; -- maximale Stellen links vom Trennzeichen | |||
local i_re = math.floor(tonumber(frame.args[3])) or 2; -- maximale Stellen rechts vom Trennzeichen | |||
local sign = frame.args['Z'] or "," -- Trennzeichen | |||
local zeroes='00000000000000000000'; -- 20 duerften ausreichen. | |||
local zpos = 0; | |||
local len = mw.ustring.len(text); | |||
if not text or sign == "" then | |||
zpos = len + 1; | |||
else | |||
zpos = mw.ustring.find(text, sign,1, true) or len; | |||
end | |||
local zl = 0; | |||
local zr = 0; | |||
local t_li = ""; | |||
local t_re = ""; | |||
local z_li =""; | |||
local z_re =""; | |||
if zpos > 1 then | |||
t_li = mw.ustring.sub(text,1, zpos-1); | |||
else | |||
t_li=""; | |||
end | |||
if len-zpos > 0 then | |||
t_re = mw.ustring.sub(text,zpos+1,-1); | |||
else | |||
t_re=""; | |||
end | |||
zl = i_li - mw.ustring.len(t_li); | |||
if zl < 1 then | |||
zl = 0; | |||
z_li = ""; | |||
else | |||
z_li = '<span style="visibility:hidden;">' .. mw.ustring.sub(zeroes,1,zl) .. '</span>'; | |||
end | |||
zr = i_re - mw.ustring.len(t_re); | |||
if zr < 1 then | |||
zr = 0; | |||
z_re =""; | |||
else | |||
z_re ='<span style="visibility:hidden;">' .. mw.ustring.sub(zeroes,1,zr) .. '</span>'; | |||
end | |||
ausgabe = z_li .. t_li .. sign .. t_re .. z_re; | |||
return ausgabe; | |||
end | |||
return Str | return Str |