মডিউল:String: সংশোধিত সংস্করণের মধ্যে পার্থক্য
add description and whitespace handling option for len |
improves commenting, adds whitespace and error handling to sub, improvements to error handling generally. |
||
১ নং লাইন: | ১ নং লাইন: | ||
--[[ | |||
This module is intended to provide access to basic string functions. | |||
Most of the functions provided here can be invoked with named parameters, | |||
unnamed parameters, or a mixture. If named parameters are used, Mediawiki will | |||
automatically remove any leading or trailing whitespace from the parameter. | |||
Depending on the intended use, it may be advantageous to either preserve or | |||
remove such whitespace. | |||
Global options | |||
ignore_errors: If set to 'true' or 1, any error condition will result in | |||
an empty string being returned rather than an error message. | |||
error_category: If an error occurs, specifies the name of a category to | |||
include with the error message. The default category is | |||
[Category:Errors reported by Module String]. If set to an empty | |||
string, no category will be added during an error. | |||
]] | |||
local str = {} | local str = {} | ||
--[ | --[[ | ||
len | len | ||
৯ নং লাইন: | ২৯ নং লাইন: | ||
{{#invoke:String|len|target_string|}} | {{#invoke:String|len|target_string|}} | ||
OR | OR | ||
{{#invoke:String| | {{#invoke:String|len|s=target_string}} | ||
Parameters | Parameters | ||
১৬ নং লাইন: | ৩৬ নং লাইন: | ||
If invoked using named parameters, Mediawiki will automatically remove any leading or | If invoked using named parameters, Mediawiki will automatically remove any leading or | ||
trailing whitespace from the target string. | trailing whitespace from the target string. | ||
] | ]] | ||
function str.len( frame ) | function str.len( frame ) | ||
local new_args = str._getParameters( frame.args, {'s'} ); | local new_args = str._getParameters( frame.args, {'s'} ); | ||
২৩ নং লাইন: | ৪৩ নং লাইন: | ||
end | end | ||
--[[ | |||
sub | |||
This function returns a substring of the target string at specified indices. | |||
Usage: | |||
{{#invoke:String|sub|target_string|start_index|end_index}} | |||
OR | |||
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}} | |||
Parameters | |||
s: The string to return a subset of | |||
i: The fist index of the substring to return, defaults to 1. | |||
j: The last index of the string to return, defaults to the last character. | |||
The first character of the string is assigned an index of 1. If either i or j | |||
is a negative value, it is interpreted the same as selecting a character by | |||
counting from the end of the string. Hence, a value of -1 is the same as | |||
selecting the last character of the string. | |||
If the requested indices are out of range for the given string, an error is | |||
reported. | |||
]] | |||
function str.sub( frame ) | function str.sub( frame ) | ||
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } ); | |||
local s = new_args['s'] or ''; | |||
local i = tonumber( new_args['i'] ) or 1; | |||
local j = tonumber( new_args['j'] ) or -1; | |||
local len = mw.ustring.len( s ); | |||
-- Convert negatives for range checking | |||
if i < 0 then | |||
i = len + i + 1; | |||
end | |||
if j < 0 then | |||
j = len + j + 1; | |||
end | |||
if j < i then | |||
return str._error( 'String subset indices out of order' ); | |||
end | |||
if i > len or j > len or i < 1 or j < 1 then | |||
return str._error( 'String subset index out of range' ); | |||
end | |||
return mw.ustring.sub( s, i, j ) | |||
end | end | ||
৩৭ নং লাইন: | ১০২ নং লাইন: | ||
end | end | ||
--[ | --[[ | ||
pos | pos | ||
৬১ নং লাইন: | ১২৬ নং লাইন: | ||
A requested value of zero, or a value greater than the length of the string returns an error. | A requested value of zero, or a value greater than the length of the string returns an error. | ||
] | ]] | ||
function str.pos( frame ) | function str.pos( frame ) | ||
local new_args = str._getParameters( frame.args, {'target', 'pos'} ); | local new_args = str._getParameters( frame.args, {'target', 'pos'} ); | ||
৬৮ নং লাইন: | ১৩৩ নং লাইন: | ||
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then | if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then | ||
return ' | return str._error( 'String index out of range' ); | ||
end | end | ||
৭৪ নং লাইন: | ১৩৯ নং লাইন: | ||
end | end | ||
--[ | --[[ | ||
str_find | str_find | ||
৮৭ নং লাইন: | ১৫২ নং লাইন: | ||
value of "1", which is generally unexpected behavior, and must be accounted for | value of "1", which is generally unexpected behavior, and must be accounted for | ||
separatetly. | separatetly. | ||
] | ]] | ||
function str.str_find( frame ) | function str.str_find( frame ) | ||
local new_args = str._getParameters( frame.args, {'source', 'target'} ); | local new_args = str._getParameters( frame.args, {'source', 'target'} ); | ||
১০৫ নং লাইন: | ১৭০ নং লাইন: | ||
end | end | ||
--[ | --[[ | ||
find | find | ||
১৩৩ নং লাইন: | ১৯৮ নং লাইন: | ||
This function should be safe for UTF-8 strings. | This function should be safe for UTF-8 strings. | ||
] | ]] | ||
function str.find( frame ) | function str.find( frame ) | ||
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } ); | local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } ); | ||
১৫৫ নং লাইন: | ২২০ নং লাইন: | ||
end | end | ||
--[ | --[[ | ||
replace | replace | ||
১৭৪ নং লাইন: | ২৩৯ নং লাইন: | ||
plain: Boolean flag indicating that pattern should be understood as plain | plain: Boolean flag indicating that pattern should be understood as plain | ||
text and not as a Lua style regular expression, defaults to true | text and not as a Lua style regular expression, defaults to true | ||
] | ]] | ||
function str.replace( frame ) | function str.replace( frame ) | ||
local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } ); | local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } ); | ||
২০৪ নং লাইন: | ২৬৯ নং লাইন: | ||
end | end | ||
--[ | --[[ | ||
Helper function that populates the argument list given that user may need to use a mix of | Helper function that populates the argument list given that user may need to use a mix of | ||
named and unnamed parameters. This is relevant because named parameters are not | named and unnamed parameters. This is relevant because named parameters are not | ||
identical to unnamed parameters due to string trimming, and when dealing with strings | identical to unnamed parameters due to string trimming, and when dealing with strings | ||
we sometimes want to either preserve or remove that whitespace depending on the application. | we sometimes want to either preserve or remove that whitespace depending on the application. | ||
] | ]] | ||
function str._getParameters( frame_args, arg_list ) | function str._getParameters( frame_args, arg_list ) | ||
local new_args = {}; | local new_args = {}; | ||
২২৭ নং লাইন: | ২৯২ নং লাইন: | ||
end | end | ||
--[====[ | --[[ | ||
Helper function to handle error messages. | |||
]] | |||
function str._error( error_str ) | |||
local frame = mw.getCurrentFrame(); | |||
local error_category = frame.args.error_category or 'Errors reported by Module String'; | |||
local ignore_errors = frame.args.ignore_errors or false; | |||
if str._getBoolean(ignore_errors) then | |||
return ''; | |||
end | |||
local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'; | |||
if error_category ~= '' then | |||
error_str = '[[Category:' .. error_category .. ']]' .. error_str; | |||
end | |||
return error_str; | |||
end | |||
--[[ | |||
Helper Function to interpret boolean strings | Helper Function to interpret boolean strings | ||
] | ]] | ||
function str._getBoolean( boolean_str ) | function str._getBoolean( boolean_str ) | ||
local boolean_value; | local boolean_value; | ||
২৪৮ নং লাইন: | ৩৩৩ নং লাইন: | ||
end | end | ||
--[ | --[[ | ||
Helper function that escapes all pattern characters so that they will be treated | Helper function that escapes all pattern characters so that they will be treated | ||
as plain text. | as plain text. | ||
] | ]] | ||
function str._escapePattern( pattern_str ) | function str._escapePattern( pattern_str ) | ||
return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ); | return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ); |