X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_ecrire%28%22articles_versions%22%2C%22id_article=%24id_article%22%29%20.%20%22?a=blobdiff_plain;f=includes%2FOutputPage.php;h=2423315cb9e0bdc61493c8dcaa588b14e49ea5aa;hb=0c9cf24b056bcdf466fe03807d13785c24993c72;hp=ca3f6a31b207ebb1d3c4c5de0e28be918f22ed74;hpb=d31ec23f2a241714e2eb4fc952e3e38f40603dca;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/OutputPage.php b/includes/OutputPage.php index ca3f6a31b2..2423315cb9 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -1935,23 +1935,14 @@ class OutputPage extends ContextSource { private function addWikiTextTitleInternal( $text, Title $title, $linestart, $tidy, $interface, $wrapperClass = null ) { - global $wgParser; - if ( !$tidy ) { wfDeprecated( 'disabling tidy', '1.32' ); } - $popts = $this->parserOptions(); - $oldTidy = $popts->setTidy( $tidy ); - $popts->setInterfaceMessage( (bool)$interface ); - - $parserOutput = $wgParser->getFreshParser()->parse( - $text, $title, $popts, - $linestart, true, $this->mRevisionId + $parserOutput = $this->parseInternal( + $text, $title, $linestart, $tidy, $interface, /*language*/null ); - $popts->setTidy( $oldTidy ); - $this->addParserOutput( $parserOutput, [ 'enableSectionEditLinks' => false, 'wrapperDivClass' => $wrapperClass ?? '', @@ -2091,6 +2082,9 @@ class OutputPage extends ContextSource { /** * Parse wikitext and return the HTML. * + * @todo The output is wrapped in a
iff $interface is false; it's + * probably best to always strip the wrapper. + * * @param string $text * @param bool $linestart Is this the start of a line? * @param bool $interface Use interface language (instead of content language) while parsing @@ -2099,54 +2093,146 @@ class OutputPage extends ContextSource { * @param Language|null $language Target language object, will override $interface * @throws MWException * @return string HTML + * @deprecated since 1.32, due to untidy output and inconsistent wrapper; + * use parseAsContent() if $interface is default value or false, or else + * parseAsInterface() if $interface is true. */ public function parse( $text, $linestart = true, $interface = false, $language = null ) { + wfDeprecated( __METHOD__, '1.33' ); + return $this->parseInternal( + $text, $this->getTitle(), $linestart, /*tidy*/false, $interface, $language + )->getText( [ + 'enableSectionEditLinks' => false, + ] ); + } + + /** + * Parse wikitext *in the page content language* and return the HTML. + * The result will be language-converted to the user's preferred variant. + * Output will be tidy. + * + * @param string $text Wikitext in the page content language + * @param bool $linestart Is this the start of a line? (Defaults to true) + * @throws MWException + * @return string HTML + * @since 1.32 + */ + public function parseAsContent( $text, $linestart = true ) { + return $this->parseInternal( + $text, $this->getTitle(), $linestart, /*tidy*/true, /*interface*/false, /*language*/null + )->getText( [ + 'enableSectionEditLinks' => false, + 'wrapperDivClass' => '' + ] ); + } + + /** + * Parse wikitext *in the user interface language* and return the HTML. + * The result will not be language-converted, as user interface messages + * are already localized into a specific variant. + * Output will be tidy. + * + * @param string $text Wikitext in the user interface language + * @param bool $linestart Is this the start of a line? (Defaults to true) + * @throws MWException + * @return string HTML + * @since 1.32 + */ + public function parseAsInterface( $text, $linestart = true ) { + return $this->parseInternal( + $text, $this->getTitle(), $linestart, /*tidy*/true, /*interface*/true, /*language*/null + )->getText( [ + 'enableSectionEditLinks' => false, + 'wrapperDivClass' => '' + ] ); + } + + /** + * Parse wikitext *in the user interface language*, strip + * paragraph wrapper, and return the HTML. + * The result will not be language-converted, as user interface messages + * are already localized into a specific variant. + * Output will be tidy. Outer paragraph wrapper will only be stripped + * if the result is a single paragraph. + * + * @param string $text Wikitext in the user interface language + * @param bool $linestart Is this the start of a line? (Defaults to true) + * @throws MWException + * @return string HTML + * @since 1.32 + */ + public function parseInlineAsInterface( $text, $linestart = true ) { + return Parser::stripOuterParagraph( + $this->parseAsInterface( $text, $linestart ) + ); + } + + /** + * Parse wikitext, strip paragraph wrapper, and return the HTML. + * + * @param string $text + * @param bool $linestart Is this the start of a line? + * @param bool $interface Use interface language (instead of content language) while parsing + * language sensitive magic words like GRAMMAR and PLURAL + * @return string HTML + * @deprecated since 1.32, due to untidy output and confusing default + * for $interface. Use parseInlineAsInterface() if $interface is + * the default value or false, or else use + * Parser::stripOuterParagraph($outputPage->parseAsContent(...)). + */ + public function parseInline( $text, $linestart = true, $interface = false ) { + wfDeprecated( __METHOD__, '1.33' ); + $parsed = $this->parseInternal( + $text, $this->getTitle(), $linestart, /*tidy*/false, $interface, /*language*/null + )->getText( [ + 'enableSectionEditLinks' => false, + 'wrapperDivClass' => '', /* no wrapper div */ + ] ); + return Parser::stripOuterParagraph( $parsed ); + } + + /** + * Parse wikitext and return the HTML (internal implementation helper) + * + * @param string $text + * @param Title The title to use + * @param bool $linestart Is this the start of a line? + * @param bool $tidy Whether the output should be tidied + * @param bool $interface Use interface language (instead of content language) while parsing + * language sensitive magic words like GRAMMAR and PLURAL. This also disables + * LanguageConverter. + * @param Language|null $language Target language object, will override $interface + * @throws MWException + * @return ParserOutput + */ + private function parseInternal( $text, $title, $linestart, $tidy, $interface, $language ) { global $wgParser; - if ( is_null( $this->getTitle() ) ) { + if ( is_null( $title ) ) { throw new MWException( 'Empty $mTitle in ' . __METHOD__ ); } $popts = $this->parserOptions(); - if ( $interface ) { - $popts->setInterfaceMessage( true ); - } + $oldTidy = $popts->setTidy( $tidy ); + $oldInterface = $popts->setInterfaceMessage( (bool)$interface ); + if ( $language !== null ) { $oldLang = $popts->setTargetLanguage( $language ); } $parserOutput = $wgParser->getFreshParser()->parse( - $text, $this->getTitle(), $popts, + $text, $title, $popts, $linestart, true, $this->mRevisionId ); - if ( $interface ) { - $popts->setInterfaceMessage( false ); - } + $popts->setTidy( $oldTidy ); + $popts->setInterfaceMessage( $oldInterface ); + if ( $language !== null ) { $popts->setTargetLanguage( $oldLang ); } - return $parserOutput->getText( [ - 'enableSectionEditLinks' => false, - ] ); - } - - /** - * Parse wikitext, strip paragraphs, and return the HTML. - * - * @todo This doesn't work as expected at all. If $interface is false, there's always a - * wrapping
, so stripOuterParagraph() does nothing. - * - * @param string $text - * @param bool $linestart Is this the start of a line? - * @param bool $interface Use interface language (instead of content language) while parsing - * language sensitive magic words like GRAMMAR and PLURAL - * @return string HTML - */ - public function parseInline( $text, $linestart = true, $interface = false ) { - $parsed = $this->parse( $text, $linestart, $interface ); - return Parser::stripOuterParagraph( $parsed ); + return $parserOutput; } /** @@ -2840,7 +2926,7 @@ class OutputPage extends ContextSource { * then the warning is a bit more obvious. If the lag is * lower than $wgSlaveLagWarning, then no warning is shown. * - * @param int $lag Slave lag + * @param int $lag Replica lag */ public function showLagWarning( $lag ) { $config = $this->getConfig();