From a58948d64595af2accdec5b2e5f5156f3f40abe8 Mon Sep 17 00:00:00 2001 From: Matthew Flaschen Date: Tue, 2 May 2017 22:02:06 -0400 Subject: [PATCH] Convert mwdoc-filter.php to Maintenance class so --wiki works Change-Id: Ie2fc4109bc2e7a23a6549d9705be44cf2eb858b9 --- autoload.php | 1 + maintenance/mwdoc-filter.php | 121 ++++++++++++++++++++--------------- 2 files changed, 70 insertions(+), 52 deletions(-) diff --git a/autoload.php b/autoload.php index 1141c391fb..06e863fbb8 100644 --- a/autoload.php +++ b/autoload.php @@ -786,6 +786,7 @@ $wgAutoloadLocalClasses = [ 'MWCryptRand' => __DIR__ . '/includes/utils/MWCryptRand.php', 'MWDebug' => __DIR__ . '/includes/debug/MWDebug.php', 'MWDocGen' => __DIR__ . '/maintenance/mwdocgen.php', + 'MWDocGenFilter' => __DIR__ . '/maintenance/mwdoc-filter.php', 'MWException' => __DIR__ . '/includes/exception/MWException.php', 'MWExceptionHandler' => __DIR__ . '/includes/exception/MWExceptionHandler.php', 'MWExceptionRenderer' => __DIR__ . '/includes/exception/MWExceptionRenderer.php', diff --git a/maintenance/mwdoc-filter.php b/maintenance/mwdoc-filter.php index 07aa2824aa..46c5a00c3e 100644 --- a/maintenance/mwdoc-filter.php +++ b/maintenance/mwdoc-filter.php @@ -38,63 +38,80 @@ * DEALINGS IN THE SOFTWARE. */ -if ( PHP_SAPI != 'cli' ) { - die( "This filter can only be run from the command line.\n" ); -} - -$source = file_get_contents( $argv[1] ); -$tokens = token_get_all( $source ); +require_once __DIR__ . '/Maintenance.php'; -$buffer = $bufferType = null; -foreach ( $tokens as $token ) { - if ( is_string( $token ) ) { - if ( $buffer !== null && $token === ';' ) { - // If we still have a buffer and the statement has ended, - // flush it and move on. - echo $buffer; - $buffer = $bufferType = null; - } - echo $token; - continue; +/** + * Maintenance script that builds doxygen documentation. + * @ingroup Maintenance + */ +class MWDocGenFilter extends Maintenance { + public function __construct() { + parent::__construct(); + $this->addDescription( 'Doxygen filter to fix member variable types in documentation. ' + . 'Used by mwdocgen.php' + ); + $this->addArg( 'filename', 'PHP file to filter', true ); } - list( $id, $content ) = $token; - switch ( $id ) { - case T_DOC_COMMENT: - // Escape slashes so that references to namespaces are not - // wrongly interpreted as a Doxygen "\command". - $content = addcslashes( $content, '\\' ); - // Look for instances of "@var Type" not followed by $name. - if ( preg_match( '#@var\s+([^\s]+)\s+([^\$]+)#s', $content ) ) { - $buffer = preg_replace_callback( - // Strip the "@var Type" part and remember the type - '#(@var\s+)([^\s]+)#s', - function ( $matches ) use ( &$bufferType ) { - $bufferType = $matches[2]; - return ''; - }, - $content - ); - } else { - echo $content; - } - break; - case T_VARIABLE: - if ( $buffer !== null ) { - echo $buffer; - echo "$bufferType $content"; - $buffer = $bufferType = null; - } else { - echo $content; + public function execute() { + $source = file_get_contents( $this->getArg( 0 ) ); + $tokens = token_get_all( $source ); + + $buffer = $bufferType = null; + foreach ( $tokens as $token ) { + if ( is_string( $token ) ) { + if ( $buffer !== null && $token === ';' ) { + // If we still have a buffer and the statement has ended, + // flush it and move on. + echo $buffer; + $buffer = $bufferType = null; + } + echo $token; + continue; } - break; + list( $id, $content ) = $token; + switch ( $id ) { + case T_DOC_COMMENT: + // Escape slashes so that references to namespaces are not + // wrongly interpreted as a Doxygen "\command". + $content = addcslashes( $content, '\\' ); + // Look for instances of "@var Type" not followed by $name. + if ( preg_match( '#@var\s+([^\s]+)\s+([^\$]+)#s', $content ) ) { + $buffer = preg_replace_callback( + // Strip the "@var Type" part and remember the type + '#(@var\s+)([^\s]+)#s', + function ( $matches ) use ( &$bufferType ) { + $bufferType = $matches[2]; + return ''; + }, + $content + ); + } else { + echo $content; + } + break; + + case T_VARIABLE: + if ( $buffer !== null ) { + echo $buffer; + echo "$bufferType $content"; + $buffer = $bufferType = null; + } else { + echo $content; + } + break; - default: - if ( $buffer !== null ) { - $buffer .= $content; - } else { - echo $content; + default: + if ( $buffer !== null ) { + $buffer .= $content; + } else { + echo $content; + } + break; } - break; + } } } + +$maintClass = 'MWDocGenFilter'; +require_once RUN_MAINTENANCE_IF_MAIN; -- 2.20.1