Index: phase3/includes/parser/Parser.php =================================================================== --- phase3/includes/parser/Parser.php (revision 102103) +++ phase3/includes/parser/Parser.php (working copy) @@ -343,6 +343,7 @@ # No more strip! wfRunHooks( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) ); $text = $this->internalParse( $text ); + wfRunHooks( 'ParserAfterParse', array( &$this, &$text, &$this->mStripState ) ); $text = $this->mStripState->unstripGeneral( $text ); Index: extensions/Cite/Cite_body.php =================================================================== --- extensions/Cite/Cite_body.php (revision 102780) +++ extensions/Cite/Cite_body.php (working copy) @@ -100,6 +100,14 @@ var $mParser; /** + * True when the ParserAfterParse hook has been called. + * Used to avoid doing anything in ParserBeforeTidy. + * + * @var boolean + */ + var $mHaveAfterParse = false; + + /** * True when a tag is being processed. * Used to avoid infinite recursion * @@ -1051,11 +1059,17 @@ * * @return bool */ - function checkRefsNoReferences( &$parser, &$text ) { + function checkRefsNoReferences( $afterParse, &$parser, &$text ) { if ( $parser->extCite !== $this ) { - return $parser->extCite->checkRefsNoReferences( $parser, $text ); + return $parser->extCite->checkRefsNoReferences( $afterParse, $parser, $text ); } + if ( $afterParse ) { + $this->mHaveAfterParse = true; + } elseif ( $this->mHaveAfterParse ) { + return true; + } + if ( $parser->getOptions()->getIsSectionPreview() ) { return true; } @@ -1102,7 +1116,8 @@ if ( !Cite::$hooksInstalled ) { $wgHooks['ParserClearState'][] = array( $parser->extCite, 'clearState' ); - $wgHooks['ParserBeforeTidy'][] = array( $parser->extCite, 'checkRefsNoReferences' ); + $wgHooks['ParserAfterParse'][] = array( $parser->extCite, 'checkRefsNoReferences', true ); + $wgHooks['ParserBeforeTidy'][] = array( $parser->extCite, 'checkRefsNoReferences', false ); $wgHooks['InlineEditorPartialAfterParse'][] = array( $parser->extCite, 'checkAnyCalls' ); Cite::$hooksInstalled = true; }