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();