diff options
Diffstat (limited to 'www/wiki/extensions/Scribunto/includes/engines/LuaCommon/lualib/mw.message.lua')
-rw-r--r-- | www/wiki/extensions/Scribunto/includes/engines/LuaCommon/lualib/mw.message.lua | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/www/wiki/extensions/Scribunto/includes/engines/LuaCommon/lualib/mw.message.lua b/www/wiki/extensions/Scribunto/includes/engines/LuaCommon/lualib/mw.message.lua new file mode 100644 index 00000000..b80c931c --- /dev/null +++ b/www/wiki/extensions/Scribunto/includes/engines/LuaCommon/lualib/mw.message.lua @@ -0,0 +1,198 @@ +local message = {} +local php + +local util = require 'libraryUtil' +local checkType = util.checkType + +local valuemt = { + __tostring = function ( t ) + return tostring( t.raw or t.num ) + end +} + +local function checkScalar( name, argIdx, arg, level, valuemtOk ) + local tp = type( arg ) + + -- If special params are ok, detect them + if valuemtOk and tp == 'table' and getmetatable( arg ) == valuemt then + return arg + end + + -- If it's a table with a custom __tostring function, use that string + if tp == 'table' and getmetatable( arg ) and getmetatable( arg ).__tostring then + return tostring( arg ) + end + + if tp ~= 'string' and tp ~= 'number' then + error( string.format( + "bad argument #%d to '%s' (string or number expected, got %s)", + argIdx, name, tp + ), level + 1 ) + end + + return arg +end + +local function checkParams( name, valueOk, ... ) + -- Accept an array of params, or params as individual command line arguments + local params, nparams + local first = select( 1, ... ) + if type( first ) == 'table' and + not ( getmetatable( first ) and getmetatable( first ).__tostring ) + then + if select( '#', ... ) == 1 then + params = first + nparams = table.maxn( params ) + else + error( + "bad arguments to '" .. name .. "' (pass either a table of params or params as individual arguments)", + 3 + ) + end + else + params = { ... } + nparams = select( '#', ... ) + end + for i = 1, nparams do + params[i] = checkScalar( 'params', i, params[i], 3, valueOk ) + end + return params +end + +function message.setupInterface( options ) + -- Boilerplate + message.setupInterface = nil + php = mw_interface + mw_interface = nil + php.options = options + + -- Register this library in the "mw" global + mw = mw or {} + mw.message = message + + package.loaded['mw.message'] = message +end + +local function makeMessage( options ) + local obj = {} + local checkSelf = util.makeCheckSelfFunction( 'mw.message', 'msg', obj, 'message object' ) + + local data = { + keys = options.keys, + rawMessage = options.rawMessage, + params = {}, + lang = php.options.lang, + useDB = true, + } + + function obj:params( ... ) + checkSelf( self, 'params' ) + local params = checkParams( 'params', true, ... ) + local j = #data.params + for i = 1, #params do + data.params[j + i] = params[i] + end + return self + end + + function obj:rawParams( ... ) + checkSelf( self, 'rawParams' ) + local params = checkParams( 'rawParams', false, ... ) + local j = #data.params + for i = 1, #params do + data.params[j + i] = setmetatable( { raw = params[i] }, valuemt ) + end + return self + end + + function obj:numParams( ... ) + checkSelf( self, 'numParams' ) + local params = checkParams( 'numParams', false, ... ) + local j = #data.params + for i = 1, #params do + data.params[j + i] = setmetatable( { num = params[i] }, valuemt ) + end + return self + end + + function obj:inLanguage( lang ) + checkSelf( self, 'inLanguage' ) + if type( lang ) == 'table' and lang.getCode then + -- probably a mw.language object + lang = lang:getCode() + end + checkType( 'inLanguage', 1, lang, 'string' ) + data.lang = lang + return self + end + + function obj:useDatabase( value ) + checkSelf( self, 'useDatabase' ) + checkType( 'useDatabase', 1, value, 'boolean' ) + data.useDB = value + return self + end + + function obj:plain() + checkSelf( self, 'plain' ) + return php.plain( data ) + end + + function obj:exists() + checkSelf( self, 'exists' ) + return php.check( 'exists', data ) + end + + function obj:isBlank() + checkSelf( self, 'isBlank' ) + return php.check( 'isBlank', data ) + end + + function obj:isDisabled() + checkSelf( self, 'isDisabled' ) + return php.check( 'isDisabled', data ) + end + + return setmetatable( obj, { + __tostring = function ( t ) + return t:plain() + end + } ) +end + +function message.new( key, ... ) + checkType( 'message.new', 1, key, 'string' ) + return makeMessage{ keys = { key } }:params( ... ) +end + +function message.newFallbackSequence( ... ) + for i = 1, math.max( 1, select( '#', ... ) ) do + checkType( 'message.newFallbackSequence', i, select( i, ... ), 'string' ) + end + return makeMessage{ keys = { ... } } +end + +function message.newRawMessage( msg, ... ) + checkType( 'message.newRawMessage', 1, msg, 'string' ) + return makeMessage{ rawMessage = msg }:params( ... ) +end + +function message.rawParam( value ) + value = checkScalar( 'message.rawParam', 1, value ) + return setmetatable( { raw = value }, valuemt ) +end + +function message.numParam( value ) + value = checkScalar( 'message.numParam', 1, value ) + return setmetatable( { num = value }, valuemt ) +end + +function message.getDefaultLanguage() + if mw.language then + return mw.language.new( php.options.lang ) + else + return php.options.lang + end +end + +return message |