Merge "doc: Modernise parameter names and documentation for 'replica' DBs"
[lhc/web/wiklou.git] / includes / OutputPage.php
index 97d9d83..2423315 100644 (file)
@@ -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 ?? '',
@@ -2102,15 +2093,80 @@ 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, $linestart, $interface, $language
+                       $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.
         *
@@ -2119,10 +2175,15 @@ class OutputPage extends ContextSource {
         * @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, $linestart, $interface, /*language*/null
+                       $text, $this->getTitle(), $linestart, /*tidy*/false, $interface, /*language*/null
                )->getText( [
                        'enableSectionEditLinks' => false,
                        'wrapperDivClass' => '', /* no wrapper div */
@@ -2134,7 +2195,9 @@ class OutputPage extends ContextSource {
         * 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.
@@ -2142,29 +2205,29 @@ class OutputPage extends ContextSource {
         * @throws MWException
         * @return ParserOutput
         */
-       private function parseInternal( $text, $linestart, $interface, $language ) {
+       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 );
                }
@@ -2863,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();