From b1e8887f687bd8bf4ca77945a179240e9c07afb7 Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Tue, 14 Jun 2011 03:09:49 +0000 Subject: [PATCH] Maintenance script for exporting the preprocessed wikitext from installer document pages, plus relevant refactoring. For use in updating http://www.mediawiki.org/wiki/Release_notes/1.17 etc. --- includes/AutoLoader.php | 1 + includes/installer/InstallDocFormatter.php | 42 +++++++++++++++++ includes/installer/WebInstallerPage.php | 33 +------------ maintenance/formatInstallDoc.php | 54 ++++++++++++++++++++++ 4 files changed, 99 insertions(+), 31 deletions(-) create mode 100644 includes/installer/InstallDocFormatter.php create mode 100644 maintenance/formatInstallDoc.php diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index fa84571dcc..ab53ab3d17 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -458,6 +458,7 @@ $wgAutoloadLocalClasses = array( 'DatabaseUpdater' => 'includes/installer/DatabaseUpdater.php', 'Ibm_db2Installer' => 'includes/installer/Ibm_db2Installer.php', 'Ibm_db2Updater' => 'includes/installer/Ibm_db2Updater.php', + 'InstallDocFormatter' => 'includes/installer/InstallDocFormatter.php', 'Installer' => 'includes/installer/Installer.php', 'LBFactory_InstallerFake' => 'includes/installer/Installer.php', 'LocalSettingsGenerator' => 'includes/installer/LocalSettingsGenerator.php', diff --git a/includes/installer/InstallDocFormatter.php b/includes/installer/InstallDocFormatter.php new file mode 100644 index 0000000000..5801f26d88 --- /dev/null +++ b/includes/installer/InstallDocFormatter.php @@ -0,0 +1,42 @@ +execute(); + } + + protected function __construct( $text ) { + $this->text = $text; + } + + protected function execute() { + $text = $this->text; + // Use Unix line endings, escape some wikitext stuff + $text = str_replace( array( '<', '{{', '[[', "\r" ), + array( '<', '{{', '[[', '' ), $text ); + // join word-wrapped lines into one + do { + $prev = $text; + $text = preg_replace( "/\n([\\*#\t])([^\n]*?)\n([^\n#\\*:]+)/", "\n\\1\\2 \\3", $text ); + } while ( $text != $prev ); + // Replace tab indents with colons + $text = preg_replace( '/^\t\t/m', '::', $text ); + $text = preg_replace( '/^\t/m', ':', $text ); + // turn (bug nnnn) into links + $text = preg_replace_callback('/bug (\d+)/', array( $this, 'replaceBugLinks' ), $text ); + // add links to manual to every global variable mentioned + $text = preg_replace_callback('/(\$wg[a-z0-9_]+)/i', array( $this, 'replaceConfigLinks' ), $text ); + return $text; + } + + protected function replaceBugLinks( $matches ) { + return '[https://bugzilla.wikimedia.org/' . + $matches[1] . ' bug ' . $matches[1] . ']'; + } + + protected function replaceConfigLinks( $matches ) { + return '[http://www.mediawiki.org/wiki/Manual:' . + $matches[1] . ' ' . $matches[1] . ']'; + } +} diff --git a/includes/installer/WebInstallerPage.php b/includes/installer/WebInstallerPage.php index e86e05bcc6..e56db83b92 100644 --- a/includes/installer/WebInstallerPage.php +++ b/includes/installer/WebInstallerPage.php @@ -1200,45 +1200,16 @@ abstract class WebInstaller_Document extends WebInstallerPage { public function execute() { $text = $this->getFileContents(); - $text = $this->formatTextFile( $text ); + $text = InstallDocFormatter::format( $text ); $this->parent->output->addWikiText( $text ); $this->startForm(); $this->endForm( false ); } - public function getFileContents() { + public function getFileContents() { return file_get_contents( dirname( __FILE__ ) . '/../../' . $this->getFileName() ); } - protected function formatTextFile( $text ) { - // Use Unix line endings, escape some wikitext stuff - $text = str_replace( array( '<', '{{', '[[', "\r" ), - array( '<', '{{', '[[', '' ), $text ); - // join word-wrapped lines into one - do { - $prev = $text; - $text = preg_replace( "/\n([\\*#\t])([^\n]*?)\n([^\n#\\*:]+)/", "\n\\1\\2 \\3", $text ); - } while ( $text != $prev ); - // Replace tab indents with colons - $text = preg_replace( '/^\t\t/m', '::', $text ); - $text = preg_replace( '/^\t/m', ':', $text ); - // turn (bug nnnn) into links - $text = preg_replace_callback('/bug (\d+)/', array( $this, 'replaceBugLinks' ), $text ); - // add links to manual to every global variable mentioned - $text = preg_replace_callback('/(\$wg[a-z0-9_]+)/i', array( $this, 'replaceConfigLinks' ), $text ); - return $text; - } - - private function replaceBugLinks( $matches ) { - return '[https://bugzilla.wikimedia.org/' . - $matches[1] . ' bug ' . $matches[1] . ']'; - } - - private function replaceConfigLinks( $matches ) { - return '[http://www.mediawiki.org/wiki/Manual:' . - $matches[1] . ' ' . $matches[1] . ']'; - } - } class WebInstaller_Readme extends WebInstaller_Document { diff --git a/maintenance/formatInstallDoc.php b/maintenance/formatInstallDoc.php new file mode 100644 index 0000000000..9acc16a70a --- /dev/null +++ b/maintenance/formatInstallDoc.php @@ -0,0 +1,54 @@ +addArg( 'path', 'The file name to format', false ); + $this->addOption( 'outfile', 'The output file name', false, true ); + $this->addOption( 'html', 'Use HTML output format. By default, wikitext is used.' ); + } + + function execute() { + if ( $this->hasArg( 0 ) ) { + $fileName = $this->getArg( 0 ); + $inFile = fopen( $fileName, 'r' ); + if ( !$inFile ) { + $this->error( "Unable to open input file \"$fileName\"" ); + exit( 1 ); + } + } else { + $inFile = STDIN; + } + + if ( $this->hasOption( 'outfile' ) ) { + $fileName = $this->getOption( 'outfile' ); + $outFile = fopen( $fileName, 'w' ); + if ( !$outFile ) { + $this->error( "Unable to open output file \"$fileName\"" ); + exit( 1 ); + } + } else { + $outFile = STDOUT; + } + + $inText = stream_get_contents( $inFile ); + $outText = InstallDocFormatter::format( $inText ); + + if ( $this->hasOption( 'html' ) ) { + global $wgParser; + $opt = new ParserOptions; + $title = Title::newFromText( 'Text file' ); + $out = $wgParser->parse( $outText, $title, $opt ); + $outText = "\n" . $out->getText() . "\n\n"; + } + + fwrite( $outFile, $outText ); + } +} + +$maintClass = 'MaintenanceFormatInstallDoc'; +require_once( RUN_MAINTENANCE_IF_MAIN ); + + -- 2.20.1