diff --git a/common/Base.php b/common/Base.php index 234e57fc..89237a01 100644 --- a/common/Base.php +++ b/common/Base.php @@ -3,7 +3,6 @@ /** * Wikitext scripting infrastructure for MediaWiki: base classes. * Copyright (C) 2012 Victor Vasiliev et al - * Based on MediaWiki file LinksUpdate.php * http://www.mediawiki.org/ * * This program is free software; you can redistribute it and/or modify @@ -31,19 +30,12 @@ abstract class ScriptingEngineBase { protected $mParser, $mModules = array(), - $mModuleTitles = array(), - $mLoaded = false; + $mModuleTitles = array(); /** - * Required for the lazy-loading of the engine. Should have a sentinel - * inside checking whether it is already loaded. + * Creates a new module object within this engine */ - abstract public function load(); - - /** - * Returns the name of your module class. - */ - abstract protected function getModuleClassName(); + abstract protected function newModule( $title, $code, $revisionID, $source ); /** * Returns the default options of the engine. @@ -61,7 +53,7 @@ abstract class ScriptingEngineBase { * * @param $parser Parser Wikitext parser */ - public final function __construct( $parser ) { + public function __construct( $parser ) { $this->mParser = $parser; } @@ -74,7 +66,7 @@ abstract class ScriptingEngineBase { * @param $source string Source of the module * @return ScriptingEngineModule */ - public function getModule( $title, $source = Scripting::Local ) { + public function getModule( $title, $source = Scripting::LOCAL ) { // Convert string to title if( !$title instanceof Title ) { $titleobj = Title::newFromText( (string)$title, NS_MODULE ); @@ -97,8 +89,7 @@ abstract class ScriptingEngineBase { } // Create the class - $class = $this->getModuleClassName(); - $this->mModules[$key] = new $class( $this, $title, $rev->getText(), $rev->getID(), $source ); + $this->mModules[$key] = $this->newModule( $title, $rev->getText(), $rev->getID(), $source ); $this->mModuleTitles[] = $title; } return $this->mModules[$key]; @@ -108,7 +99,7 @@ abstract class ScriptingEngineBase { * Fetches the revision for given module title. */ private function getModuleRev( $title, $source ) { - if( $source != Scripting::Local ) { + if( $source != Scripting::LOCAL ) { throw new MWException( 'Non-local scripts are not supported at this point' ); } @@ -128,7 +119,7 @@ abstract class ScriptingEngineBase { } /** - * Validates the script and returns an array of the syntax erros for the + * Validates the script and returns an array of the syntax errors for the * given code. * * @param $code Code to validate @@ -136,8 +127,7 @@ abstract class ScriptingEngineBase { * @return array */ function validate( $code, $title ) { - $class = $this->getModuleClassName(); - $module = new $class( $this, $title, $code, 0, Scripting::Local ); + $module = $this->newModule( $title, $code, 0, Scripting::LOCAL ); try { $module->initialize(); @@ -195,7 +185,7 @@ abstract class ScriptingEngineBase { abstract class ScriptingModuleBase { var $mEngine, $mTitle, $mCode, $mRevisionID, $mSource; - public final function __construct( $engine, $title, $code, $revisionID, $source ) { + public function __construct( $engine, $title, $code, $revisionID, $source ) { $this->mEngine = $engine; $this->mTitle = $title; $this->mCode = $code; @@ -236,11 +226,11 @@ abstract class ScriptingModuleBase { abstract class ScriptingFunctionBase { protected $mName, $mContents, $mModule, $mEngine; - public final function __construct( $name, $contents, $module, $engine ) { + public function __construct( $module, $name, $contents ) { $this->mName = $name; $this->mContents = $contents; $this->mModule = $module; - $this->mEngine = $engine; + $this->mEngine = $module->getEngine(); } /** diff --git a/common/Common.php b/common/Common.php index 563fe09d..389e51a5 100644 --- a/common/Common.php +++ b/common/Common.php @@ -4,7 +4,7 @@ * Generic scripting functions. */ class Scripting { - const Local = 'local'; + const LOCAL = 'local'; protected static function getEngineClass() { global $wgScriptingEngine, $wgScriptingEngines; diff --git a/common/Hooks.php b/common/Hooks.php index e12706ed..299388fd 100644 --- a/common/Hooks.php +++ b/common/Hooks.php @@ -21,7 +21,7 @@ */ /** - * Hooks for Scripting extension. + * Hooks for the Scripting extension. */ class ScriptingHooks { /** @@ -35,7 +35,7 @@ class ScriptingHooks { } /** - * Called when interpreter is to be reset. + * Called when the interpreter is to be reset. * * @static * @param $parser Parser @@ -47,7 +47,7 @@ class ScriptingHooks { } /** - * Adds scriptlinks table to parser tests. + * Add scriptlinks table to parser tests. */ public static function addTestTables( &$tables ) { $tables[] = 'scriptlinks'; @@ -55,7 +55,7 @@ class ScriptingHooks { } /** - * Handles the {{#invoke:module|func}} construction. + * Hook function for {{#invoke:module|func}} * * @param $parser Parser * @param $frame PPFrame @@ -73,7 +73,7 @@ class ScriptingHooks { } /** - * Handles the transclusion of the script ({{script:module}} hook). + * Hook function for {{script:module}} * * @param $parser Parser * @param $frame PPFrame @@ -94,7 +94,7 @@ class ScriptingHooks { * @return string * @throws ScriptingException */ - private static function doRunHook( &$parser, $frame, $module, $function, $args ) { + private static function doRunHook( $parser, $frame, $module, $function, $args ) { wfProfileIn( __METHOD__ ); try { @@ -104,7 +104,7 @@ class ScriptingHooks { $arg = $frame->expand( $arg ); } - $module = $engine->getModule( $module, Scripting::Local ); + $module = $engine->getModule( $module, Scripting::LOCAL ); $functionObj = $module->getFunction( $function ); if( !$functionObj ) { @@ -114,7 +114,7 @@ class ScriptingHooks { $result = $functionObj->call( $args, $frame ); wfProfileOut( __METHOD__ ); - return trim( $result ); + return trim( strval( $result ) ); } catch( ScriptingException $e ) { $msg = $e->getMessage(); wfProfileOut( __METHOD__ ); diff --git a/common/LinkUpdates.php b/common/LinkUpdates.php index 2526216e..e306221f 100644 --- a/common/LinkUpdates.php +++ b/common/LinkUpdates.php @@ -31,7 +31,7 @@ if( !defined( 'MEDIAWIKI' ) ) */ class ScriptLinksUpdateHooks { /** - * Appends script links to the output. + * Append script links to the output. */ public static function appendToOutput( &$parser, &$text ) { if( isset( $parser->scripting_engine ) ) { @@ -41,7 +41,7 @@ class ScriptLinksUpdateHooks { } /** - * Runs the link updater. + * Run the link updater. */ public static function updateLinks( &$update ) { $output = $update->mParserOutput; @@ -57,7 +57,7 @@ class ScriptLinksUpdateHooks { } /** - * Purges cache for all the pages where the script is used. + * Purge cache for all the pages where the script is used. * @param $article Article * @param $editInfo * @param $changed @@ -71,7 +71,7 @@ class ScriptLinksUpdateHooks { $engine = Scripting::getEngine( $wgParser ); $engine->invalidateModuleCache( $article->getTitle() ); - // Invalidate caches of articles which include the script + // Invalidate the caches of articles which include the script $wgDeferredUpdateList[] = new HTMLCacheUpdate( $article->getTitle(), 'scriptlinks' ); } @@ -79,7 +79,7 @@ class ScriptLinksUpdateHooks { } /** - * Adds scriptlinks to the list of tables supported by BacklinkCache. + * Add scriptlinks to the list of tables supported by BacklinkCache. */ public static function getBacklinkCachePrefix( $table, &$prefix ) { if( $table == 'scriptlinks' ) { @@ -91,7 +91,7 @@ class ScriptLinksUpdateHooks { } /** - * Adds scriptlinks to the list of tables supported by BacklinkCache. + * Add scriptlinks to the list of tables supported by BacklinkCache. * @param $table * @param $title Title * @param $conds @@ -111,7 +111,7 @@ class ScriptLinksUpdateHooks { } /** - * A class that updates links on scripts like phase3/includes/LinksUpdate.php does that + * A class that updates links on scripts like what phase3/includes/LinksUpdate.php does * with templates. */ class ScriptLinksUpdate { diff --git a/engines/LuaSandbox/Engine.php b/engines/LuaSandbox/Engine.php index 18c55537..40745a24 100644 --- a/engines/LuaSandbox/Engine.php +++ b/engines/LuaSandbox/Engine.php @@ -1,7 +1,11 @@ mLoaded ) { @@ -119,7 +123,7 @@ class LuaSandboxEngineModule extends ScriptingModuleBase { $this->initialize(); if( isset( $this->mContents[$name] ) ) { - return new LuaSandboxEngineFunction( $name, $this->mContents[$name], $this, $this->mEngine ); + return new LuaSandboxEngineFunction( $this, $name, $this->mContents[$name] ); } else { return null; } @@ -139,6 +143,10 @@ class LuaSandboxEngineFunction extends ScriptingFunctionBase { throw new ScriptingException( 'error', 'luasandbox', null, null, array( $e->getMessage() ) ); } - return implode( '', $result ); + if ( isset( $result[0] ) ) { + return $result[0]; + } else { + return null; + } } }