יחידה:String: הבדלים בין גרסאות בדף

add an escapePattern function for escaping Lua patterns
מ 16 גרסאות של הדף wikipedia:he:יחידה:String יובאו
 
(15 גרסאות ביניים של 6 משתמשים אינן מוצגות)
שורה 383: שורה 383:
end
end


--[[  
--[[
    simple function to pipe string.rep to templates.
"Reverse" reverses a string, a'la string.reverse()
]]
]]
 
str.reverse = function( frame )
function str.rep( frame )
     local tab = mw.text.split( frame.args[1] or '', '' )
     local repetitions = tonumber( frame.args[2] )
     local restab = {}
     if not repetitions then
    for i = #tab, 1, -1 do table.insert( restab, tab[i] ) end
        return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )
     return table.concat( restab )
    end
     return string.rep( frame.args[1] or '', repetitions )
end
end


--[[
str['היפוך'] = str.reverse
escapePattern
 
This function escapes special characters from a Lua string pattern. See [1]
for details on how patterns work.
 
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
 
Usage:
{{#invoke:String|escapePattern|pattern_string}}
 
Parameters
    pattern_string: The pattern string to escape.
]]
function str.escapePattern( frame )
    local pattern_str = frame.args[1]
    if not pattern_str then
        return str._error( 'No pattern string specified' );
    end
    local result = str._escapePattern( pattern_str )
    return result
end


--[[
--[[
שורה 446: שורה 423:
function str._error( error_str )
function str._error( error_str )
     local frame = mw.getCurrentFrame();
     local frame = mw.getCurrentFrame();
     local error_category = frame.args.error_category or 'Errors reported by Module String';
     local error_category = frame.args.error_category or 'שגיאות טיפול במחרוזת';
     local ignore_errors = frame.args.ignore_errors or false;
     local ignore_errors = frame.args.ignore_errors or false;
     local no_category = frame.args.no_category or false;
     local no_category = frame.args.no_category or false;
שורה 456: שורה 433:
     local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>';
     local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>';
     if error_category ~= '' and not str._getBoolean( no_category ) then
     if error_category ~= '' and not str._getBoolean( no_category ) then
        error_str = '[[Category:' .. error_category .. ']]' .. error_str;
    if mw.title.getCurrentTitle().namespace ~= 10 then
        error_str = '[[Category:' .. error_category .. ']]' .. error_str;
        end
     end         
     end         
      
      
שורה 490: שורה 469:
function str._escapePattern( pattern_str )
function str._escapePattern( pattern_str )
     return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" );
     return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" );
end
--[[
contains_any
This function returns the first matched element or empty string
Usage:
{{#invoke:String|contains_any|string|search1|search2|search3...}}
Parameters
    1: string
    2...: strings to search within the first string
]]
function str.contains_any( frame )
for i,v in pairs(frame.args) do
if i>1 then
local m=mw.ustring.find( frame.args[1], v, 0, true)
if m then
    return v
    end
end
    end
    return
end
--[[
contains_any_csv
This function returns the first matched element or empty string.
Usage:
{{#invoke:String|contains_any_csv|string|search1,search2,search3}}
Parameters
    1: string
    2: comma seperated list of strings to search within the first string
]]
function str.contains_any_csv( frame )
for word in mw.ustring.gmatch(frame.args[2], '([^,]+)') do
local m=mw.ustring.find( frame.args[1], word, 0, true)
if m then
    return word
  end
    end
    return
end
str.rep = function( frame )
local strval, repval = frame.args[1] or '', tonumber( frame.args[2] )
if not repval then return '' end
return string.rep( strval, repval )
end
str.join = function(frame)
local res = {}
local sep = ', '
for k,v in pairs(frame.args) do
if k=='sep' then
sep = v
else
if #v>0 then -- avoid empty string
table.insert(res, v)
end
end
end
return table.concat( res, sep)
end
str.encode = function(frame)
return mw.text.encode( frame.args[1] or "" )
end
str["קידוד"] = str.encode
str['מיצוי מספר'] = function(frame)
local s = frame.args[1]
local def = frame.args[2] or ''
if not s then return def end
local int, frac = s:match('[^%d.-]*(%-?[%d,]*)(%.%d+)')
if int or frac then
int = string.gsub(int or '', ',', '') -- remove commas
frac = frac or ''
return int .. frac
end
int = s:match('[^%d.-]*(%-?[%d,]*)')
int = int and string.gsub(int or '', ',', '')
return int or def
end
end


return str
return str