편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
local str = {} | local str = {} | ||
function str.len( frame ) | function str.len( frame ) | ||
local new_args = str._getParameters( frame.args, {'s'} ) | local new_args = str._getParameters( frame.args, {'s'} ) | ||
local s = new_args['s'] or '' | local s = new_args['s'] or '' | ||
return ustring.len( s ) | return mw.ustring.len( s ) | ||
end | end | ||
function str.sub( frame ) | function str.sub( frame ) | ||
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } ) | |||
local new_args = str._getParameters( args, { 's', 'i', 'j' } ) | |||
local s = new_args['s'] or '' | local s = new_args['s'] or '' | ||
local i = tonumber( new_args['i'] ) or 1 | local i = tonumber( new_args['i'] ) or 1 | ||
local j = tonumber( new_args['j'] ) or -1 | local j = tonumber( new_args['j'] ) or -1 | ||
local len = ustring.len( s ) | local len = mw.ustring.len( s ) | ||
-- Convert negatives for range checking | -- Convert negatives for range checking | ||
35번째 줄: | 30번째 줄: | ||
end | end | ||
return ustring.sub( s, i, j ) | return mw.ustring.sub( s, i, j ) | ||
end | end | ||
-- | -- This sub-routine is exported for use in other modules | ||
function str._match( s, pattern, start, match_index, plain_flag, nomatch ) | function str._match( s, pattern, start, match_index, plain_flag, nomatch ) | ||
if s == '' then | if s == '' then | ||
47번째 줄: | 42번째 줄: | ||
end | end | ||
start = tonumber(start) or 1 | start = tonumber(start) or 1 | ||
if math.abs(start) < 1 or math.abs(start) > ustring.len( s ) then | if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then | ||
return str._error( 'Requested start is out of range' ) | return str._error( 'Requested start is out of range' ) | ||
end | end | ||
60번째 줄: | 55번째 줄: | ||
if match_index == 1 then | if match_index == 1 then | ||
-- Find first match is simple case | -- Find first match is simple case | ||
result = ustring.match( s, pattern, start ) | result = mw.ustring.match( s, pattern, start ) | ||
else | else | ||
if start > 1 then | if start > 1 then | ||
s = ustring.sub( s, start ) | s = mw.ustring.sub( s, start ) | ||
end | end | ||
local iterator = ustring.gmatch(s, pattern) | local iterator = mw.ustring.gmatch(s, pattern) | ||
if match_index > 0 then | if match_index > 0 then | ||
-- Forward search | -- Forward search | ||
100번째 줄: | 95번째 줄: | ||
end | end | ||
-- | -- This is the entry point for #invoke:String|match | ||
function str.match( frame ) | function str.match( frame ) | ||
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} ) | |||
local new_args = str._getParameters( args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} ) | |||
local s = new_args['s'] or '' | local s = new_args['s'] or '' | ||
local start = tonumber( new_args['start'] ) or 1 | local start = tonumber( new_args['start'] ) or 1 | ||
114번째 줄: | 108번째 줄: | ||
end | end | ||
function str.pos( frame ) | function str.pos( frame ) | ||
local new_args = str._getParameters( frame.args, {'target', 'pos'} ) | |||
local new_args = str._getParameters( args, {'target', 'pos'} ) | |||
local target_str = new_args['target'] or '' | local target_str = new_args['target'] or '' | ||
local pos = tonumber( new_args['pos'] ) or 0 | local pos = tonumber( new_args['pos'] ) or 0 | ||
if pos == 0 or math.abs(pos) > ustring.len( target_str ) then | if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then | ||
return str._error( 'String index out of range' ) | return str._error( 'String index out of range' ) | ||
end | end | ||
return ustring.sub( target_str, pos, pos ) | return mw.ustring.sub( target_str, pos, pos ) | ||
end | end | ||
function str.find( frame ) | function str.find( frame ) | ||
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } ) | |||
local new_args = str._getParameters( args, {'source', 'target', 'start', 'plain' } ) | |||
local source_str = new_args['source'] or '' | local source_str = new_args['source'] or '' | ||
local pattern = new_args['target'] or '' | local pattern = new_args['target'] or '' | ||
local start_pos = tonumber(new_args['start']) or 1 | local start_pos = tonumber(new_args['start']) or 1 | ||
local plain = new_args['plain'] or | local plain = new_args['plain'] or true | ||
if source_str == '' or pattern == '' then | if source_str == '' or pattern == '' then | ||
143번째 줄: | 133번째 줄: | ||
plain = str._getBoolean( plain ) | plain = str._getBoolean( plain ) | ||
local start = ustring.find( source_str, pattern, start_pos, plain ) | local start = mw.ustring.find( source_str, pattern, start_pos, plain ) | ||
if start == nil then | if start == nil then | ||
start = 0 | start = 0 | ||
152번째 줄: | 141번째 줄: | ||
end | end | ||
function str.gsub( frame ) | function str.gsub( 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' } ) | ||
212번째 줄: | 156번째 줄: | ||
if plain then | if plain then | ||
pattern = str._escapePattern( pattern ) | pattern = str._escapePattern( pattern ) | ||
replace = ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences. | replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences. | ||
end | end | ||
218번째 줄: | 162번째 줄: | ||
if count ~= nil then | if count ~= nil then | ||
result = mw.ustring.gsub( source_str, pattern, replace, count ) | |||
else | else | ||
result = mw.ustring.gsub( source_str, pattern, replace ) | |||
end | end | ||
return result | return result | ||
end | end | ||
function str.rep( frame ) | function str.rep( frame ) | ||
local repetitions = tonumber( frame.args[2] ) | local repetitions = tonumber( frame.args[2] ) | ||
239번째 줄: | 175번째 줄: | ||
return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' ) | return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' ) | ||
end | end | ||
return ustring.rep( frame.args[1] or '', repetitions ) | return mw.ustring.rep( frame.args[1] or '', repetitions ) | ||
end | end | ||
function str.upper( frame ) | function str.upper( frame ) | ||
local new_args = str._getParameters( frame.args, { 's' } ) | local new_args = str._getParameters( frame.args, { 's' } ) | ||
local s = new_args['s'] or '' | local s = new_args['s'] or '' | ||
return ustring.upper( s ) | return mw.ustring.upper( s ) | ||
end | end | ||
function str.lower( frame ) | function str.lower( frame ) | ||
local new_args = str._getParameters( frame.args, { 's' } ) | local new_args = str._getParameters( frame.args, { 's' } ) | ||
local s = new_args['s'] or '' | local s = new_args['s'] or '' | ||
return ustring.lower( s ) | return mw.ustring.lower( s ) | ||
end | end | ||
function str. | function str.byte( frame ) | ||
local new_args = str._getParameters( frame.args, { 's' } ) | local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } ) | ||
local s = new_args['s'] or '' | local s = new_args['s'] or '' | ||
local | local i = tonumber( new_args['i'] ) or 1 | ||
local j = tonumber( new_args['j'] ) or -1 | |||
return mw.ustring.byte( frame.args[1] ) | |||
local | |||
end | end | ||
function str.char( frame ) | function str.char( frame ) | ||
local new_args = str._getParameters( frame.args, { 'c' } ) | |||
local new_args = str._getParameters( args, { 'c' } ) | local c = new_args['c'] or '' | ||
local c = | return mw.ustring.char( c ) | ||
return ustring.char( c ) | |||
end | end | ||
function str.escapePattern( frame ) | function str.escapePattern( frame ) | ||
local | local pattern_str = frame.args[1] | ||
if not pattern_str then | if not pattern_str then | ||
return str._error( 'No pattern string specified' ) | return str._error( 'No pattern string specified' ) | ||
305번째 줄: | 214번째 줄: | ||
function str.count(frame) | function str.count(frame) | ||
local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'}) | |||
local args = str._getParameters( | |||
local source = args.source or '' | local source = args.source or '' | ||
local pattern = args.pattern or '' | local pattern = args.pattern or '' | ||
313번째 줄: | 221번째 줄: | ||
pattern = str._escapePattern(pattern) | pattern = str._escapePattern(pattern) | ||
end | end | ||
local _, count = ustring.gsub(source | local _, count = mw.ustring.gsub(source, pattern, '') | ||
return count | return count | ||
end | end | ||
327번째 줄: | 230번째 줄: | ||
]] | ]] | ||
function str.endswith(frame) | function str.endswith(frame) | ||
local args = str._getParameters(frame.args, {'source', 'pattern'}) | |||
local args = str._getParameters( | |||
local source = args.source or '' | local source = args.source or '' | ||
local pattern = args.pattern or '' | local pattern = args.pattern or '' | ||
335번째 줄: | 237번째 줄: | ||
return "yes" | return "yes" | ||
end | end | ||
if ustring.sub(source, -ustring.len(pattern), -1) == pattern then | if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then | ||
return "yes" | return "yes" | ||
else | else | ||
343번째 줄: | 245번째 줄: | ||
function str.join(frame) | function str.join(frame) | ||
local args | local args = {} | ||
local sep | |||
local sep | for _, v in ipairs( frame.args ) do | ||
if sep then | |||
if v ~= '' then | |||
table.insert(args, v) | |||
end | |||
if | |||
else | else | ||
sep = v | |||
end | end | ||
end | end | ||
return table.concat( | return table.concat( args, sep or '' ) | ||
end | end | ||
432번째 줄: | 330번째 줄: | ||
]] | ]] | ||
function str._escapePattern( pattern_str ) | function str._escapePattern( pattern_str ) | ||
return ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ) | return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ) | ||
end | end | ||
return str | return str |