script to parse wikitext from CLI
authorAntoine Musso <hashar@users.mediawiki.org>
Wed, 26 Oct 2011 13:39:43 +0000 (13:39 +0000)
committerAntoine Musso <hashar@users.mediawiki.org>
Wed, 26 Oct 2011 13:39:43 +0000 (13:39 +0000)
Wikitext can be given by stdin or using a file. The wikitext will be parsed
using 'CLIParser' as a title. This can be overriden with --title option.

Example1:

$ php parse.php --title foo
''[[foo]]''^D
<p><i><strong class="selflink">foo</strong></i>
</p>

Example2:

$ echo "'''bold'''" > /tmp/foo
$ php parse.php --file /tmp/foo
<p><b>bold</b>
</p>$

Example3:
$ cat /tmp/foo | php parse.php
<p><b>bold</b>
</p>$

maintenance/parse.php [new file with mode: 0644]

diff --git a/maintenance/parse.php b/maintenance/parse.php
new file mode 100644 (file)
index 0000000..82e6510
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+/**
+ * CLI script to easily parse some wikitext.
+ * Wikitext can be given by stdin or using a file. The wikitext will be parsed
+ * using 'CLIParser' as a title. This can be overriden with --title option.
+ *
+ * Example1:
+ * @code
+ * $ php parse.php --title foo
+ * ''[[foo]]''^D
+ * <p><i><strong class="selflink">foo</strong></i>
+ * </p>
+ * @endcode
+ *
+ * Example2:
+ * @code
+ * $ echo "'''bold'''" > /tmp/foo
+ * $ php parse.php --file /tmp/foo
+ * <p><b>bold</b>
+ * </p>$
+ * @endcode
+ *
+ * Example3:
+ * @code
+ * $ cat /tmp/foo | php parse.php
+ * <p><b>bold</b>
+ * </p>$
+ * @endcode
+ *
+ * @inGroup Maintenance
+ * @author Antoine Musso <hashar at free dot fr>
+ * @license GNU General Public License 2.0 or later
+ */
+require_once( dirname(__FILE__) . '/Maintenance.php' );
+
+class CLIParser extends Maintenance {
+       protected $parser;
+
+       public function __construct() {
+               $this->mDescription = "Parse a given wikitext";
+               $this->addOption( 'title', 'Title name for the given wikitext (Default: \'CLIParser\')', false, true );
+               $this->addOption( 'file', 'File containing wikitext (Default: stdin)', false, true );
+               parent::__construct();
+       }
+
+       public function execute() {
+               $this->initParser();
+               print $this->render( $this->WikiText() );
+       }
+
+       /**
+        * @param string $wikitext Wikitext to get rendered
+        * @return string HTML Rendering
+        */
+       public function render( $wikitext ) {
+               return $this->parse( $wikitext )->getText();
+       }
+
+       /**
+        * Get wikitext from --file or from STDIN
+        * @return string Wikitext
+        */
+       protected function Wikitext() {
+               return file_get_contents(
+                       $this->getOption( 'file', 'php://stdin' )
+               );
+       }
+
+       protected function initParser() {
+               global $wgParserConf;
+               $parserClass = $wgParserConf['class'];
+               $this->parser = new $parserClass();
+       }
+
+       /**
+        * Title object to use for CLI parsing.
+        * Default title is 'CLIParser', it can be overriden with the option
+        * --title <Your:Title>
+        *
+        * @return Title object
+        */
+       protected function getTitle( ) {
+               $title =
+                       $this->getOption( 'title' )
+                       ? $this->getOption( 'title' )
+                       : 'CLIParser' ;
+               return Title::newFromText( $title );
+       }
+
+       /**
+        * @param string $text Wikitext to parse
+        * @return ParserOutput
+        */
+       protected function parse( $wikitext ) {
+               return $this->parser->parse(
+                       $wikitext
+                       , $this->getTitle()
+                       , new ParserOptions()
+               );
+       }
+}
+
+$maintClass = "CLIParser";
+require_once( RUN_MAINTENANCE_IF_MAIN );