25require_once __DIR__ .
'/dumpIterator.php';
39 private $saveFailed =
false;
41 private $stripParametersEnabled;
43 private $showParsedOutput;
52 parent::__construct();
53 $this->
addDescription(
'Run a file or dump with several parsers' );
54 $this->
addOption(
'parser1',
'The first parser to compare.',
true,
true );
55 $this->
addOption(
'parser2',
'The second parser to compare.',
true,
true );
58 'Folder in which articles which differ will be stored.',
62 $this->
addOption(
'show-diff',
'Show a diff of the two renderings.',
false,
false );
65 'Binary to use for diffing (can also be provided by DIFF env var).',
71 'Remove parameters of html tags to increase readability.',
77 'Show the parsed html if both Parsers give the same output.',
84 if ( $this->
hasOption(
'save-failed' ) ) {
85 $this->saveFailed = $this->
getOption(
'save-failed' );
88 $this->stripParametersEnabled = $this->
hasOption(
'strip-parameters' );
89 $this->showParsedOutput = $this->
hasOption(
'show-parsed-output' );
91 $this->showDiff = $this->
hasOption(
'show-diff' );
92 if ( $this->showDiff ) {
93 $bin = $this->
getOption(
'diff-bin', getenv(
'DIFF' ) );
101 $this->options = ParserOptions::newFromUser( $user );
107 $this->
error(
"{$this->failed} failed revisions out of {$this->count}" );
108 if ( $this->count > 0 ) {
109 $this->
output(
" (" . ( $this->failed / $this->count ) .
"%)\n" );
113 private function stripParameters(
string $text ): string {
114 if ( !$this->stripParametersEnabled ) {
118 return preg_replace(
'/(<a) [^>]+>/',
'$1>', $text );
127 $parser1Name = $this->getOption(
'parser1' );
128 $parser2Name = $this->getOption(
'parser2' );
130 self::checkParserLocally( $parser1Name );
131 self::checkParserLocally( $parser2Name );
133 $parser1 =
new $parser1Name();
134 $parser2 =
new $parser2Name();
139 $this->error(
"Page {$title->getPrefixedText()} does not contain wikitext "
140 .
"but {$content->getModel()}\n" );
146 '@phan-var WikitextContent $content';
147 $text = strval( $content->getText() );
149 $output1 = $parser1->parse( $text, $title, $this->options );
150 $output2 = $parser2->parse( $text, $title, $this->options );
152 if ( $output1->getText() != $output2->getText() ) {
154 $this->error(
"Parsing for {$title->getPrefixedText()} differs\n" );
156 if ( $this->saveFailed ) {
158 $this->saveFailed .
'/' . rawurlencode( $title->getPrefixedText() ) .
".txt",
162 if ( $this->showDiff ) {
164 explode(
"\n", $this->stripParameters( $output1->getText() ) ),
165 explode(
"\n", $this->stripParameters( $output2->getText() ) )
168 $unifiedDiff = $formatter->format( $diffs );
170 $this->output( $unifiedDiff );
173 $this->output( $title->getPrefixedText() .
"\tOK\n" );
175 if ( $this->showParsedOutput ) {
176 $this->output( $this->stripParameters( $output1->getText() ) );
181 private static function checkParserLocally(
string $parserName ) {
183 if ( !class_exists( $parserName ) && file_exists(
"$parserName.php" ) ) {
192require_once RUN_MAINTENANCE_IF_MAIN;
const CONTENT_MODEL_WIKITEXT
if(!defined('MW_SETUP_CALLBACK'))
Maintenance script to take page text out of an XML dump file and render basic HTML out to files.
conclusions()
Stub function for giving data about what was computed.
processRevision(WikiRevision $rev)
Callback function for each revision, parse with both parsers and compare.
__construct()
Default constructor.
checkOptions()
Stub function for processing additional options.
Base class for iterating over a dump.
Content object for wiki text pages.
output( $out, $channel=null)
Throw some output to the user.
error( $err)
Throw an error to the user.
addOption( $name, $description, $required=false, $withArg=false, $shortName=false, $multiOccurrence=false)
Add a parameter to the script.
hasOption( $name)
Checks to see if a particular option was set.
getOption( $name, $default=null)
Get an option, or return the default.
addDescription( $text)
Set the description text.
$wgDiff
Config variable stub for the Diff setting, for use by phpdoc and IDEs.