mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Scribunto
synced 2024-11-25 00:26:44 +00:00
f2f866cbdd
The point of putting the unicode library in mw.ustring instead of ustring was to avoid conflicts with future upstream work, and with other libraries. It rather defeats the purpose if you then modify the global string table during module startup. Users can always set up local aliases if they feel "mw.ustring" is too much to type. Change-Id: I5d0ddb70d999aeb6e36e6ddbcdb19922d0274a39
90 lines
2.1 KiB
Lua
90 lines
2.1 KiB
Lua
-- Get a fresh copy of the basic ustring
|
|
local old_ustring = package.loaded.ustring
|
|
package.loaded.ustring = nil
|
|
local ustring = require( 'ustring' )
|
|
package.loaded.ustring = old_ustring
|
|
old_ustring = nil
|
|
|
|
local util = require 'libraryUtil'
|
|
checkType = util.checkType
|
|
|
|
local gmatch_init = nil
|
|
local gmatch_callback = nil
|
|
local function php_gmatch( s, pattern )
|
|
checkType( 'gmatch', 1, s, 'string' )
|
|
checkType( 'gmatch', 2, pattern, 'string' )
|
|
|
|
if string.sub( pattern, 1, 1 ) == '^' then
|
|
return function() return nil end, nil, nil
|
|
end
|
|
|
|
local re, capt = gmatch_init( s, pattern )
|
|
local pos = 0
|
|
return function()
|
|
local ret
|
|
pos, ret = gmatch_callback( s, re, capt, pos )
|
|
return unpack( ret )
|
|
end, nil, nil
|
|
end
|
|
|
|
function ustring.setupInterface( opt )
|
|
-- Boilerplate
|
|
ustring.setupInterface = nil
|
|
|
|
-- Set string limits
|
|
ustring.maxStringLength = opt.stringLengthLimit
|
|
ustring.maxPatternLength = opt.patternLengthLimit
|
|
|
|
-- Gmatch
|
|
if mw_interface.gmatch_callback and mw_interface.gmatch_init then
|
|
gmatch_init = mw_interface.gmatch_init
|
|
gmatch_callback = mw_interface.gmatch_callback
|
|
ustring.gmatch = php_gmatch
|
|
end
|
|
mw_interface.gmatch_init = nil
|
|
mw_interface.gmatch_callback = nil
|
|
|
|
-- Replace pure-lua implementation with php callbacks
|
|
local nargs = {
|
|
char = 0,
|
|
find = 2,
|
|
match = 2,
|
|
gsub = 3,
|
|
}
|
|
for k, v in pairs( mw_interface ) do
|
|
local n = nargs[k] or 1
|
|
if n == 0 then
|
|
ustring[k] = v
|
|
else
|
|
-- Avoid PHP warnings for missing arguments by checking before
|
|
-- calling PHP.
|
|
ustring[k] = function ( ... )
|
|
if select( '#', ... ) < n then
|
|
error( "too few arguments to mw.ustring." .. k, 2 )
|
|
end
|
|
return v( ... )
|
|
end
|
|
end
|
|
end
|
|
mw_interface = nil
|
|
|
|
-- Replace upper/lower with mw.language versions if available
|
|
if mw and mw.language then
|
|
local lang = mw.language.getContentLanguage()
|
|
ustring.upper = function ( s )
|
|
return lang:uc( s )
|
|
end
|
|
ustring.lower = function ( s )
|
|
return lang:lc( s )
|
|
end
|
|
end
|
|
|
|
-- Register this library in the "mw" global
|
|
mw = mw or {}
|
|
mw.ustring = ustring
|
|
|
|
package.loaded['mw.ustring'] = ustring
|
|
end
|
|
|
|
return ustring
|