Merge "Make TOC hideable"
[lhc/web/wiklou.git] / includes / parser / Parser.php
index 221a630..1f14223 100644 (file)
@@ -115,6 +115,10 @@ class Parser {
        # Marker Suffix needs to be accessible staticly.
        const MARKER_SUFFIX = "-QINU\x7f";
 
+       # Markers used for wrapping the table of contents
+       const TOC_START = '<mw:toc>';
+       const TOC_END = '</mw:toc>';
+
        # Persistent:
        var $mTagHooks = array();
        var $mTransparentTagHooks = array();
@@ -2113,16 +2117,12 @@ class Parser {
                                }
                        }
 
-                       # Self-link checking
-                       if ( $nt->getFragment() === '' && $ns != NS_SPECIAL ) {
-                               if ( $nt->equals( $this->mTitle ) || ( !$nt->isKnown() && in_array(
-                                       $this->mTitle->getPrefixedText(),
-                                       $this->getConverterLanguage()->autoConvertToAllVariants( $nt->getPrefixedText() ),
-                                       true
-                               ) ) ) {
-                                       $s .= $prefix . Linker::makeSelfLinkObj( $nt, $text, '', $trail );
-                                       continue;
-                               }
+                       # Self-link checking. For some languages, variants of the title are checked in
+                       # LinkHolderArray::doVariants() to allow batching the existence checks necessary
+                       # for linking to a different variant.
+                       if ( $ns != NS_SPECIAL && $nt->equals( $this->mTitle ) && $nt->getFragment() === '' ) {
+                               $s .= $prefix . Linker::makeSelfLinkObj( $nt, $text, '', $trail );
+                               continue;
                        }
 
                        # NS_MEDIA is a pseudo-namespace for linking directly to a file
@@ -2281,13 +2281,13 @@ class Parser {
                $result = $this->closeParagraph();
 
                if ( '*' === $char ) {
-                       $result .= '<ul><li>';
+                       $result .= "<ul>\n<li>";
                } elseif ( '#' === $char ) {
-                       $result .= '<ol><li>';
+                       $result .= "<ol>\n<li>";
                } elseif ( ':' === $char ) {
-                       $result .= '<dl><dd>';
+                       $result .= "<dl>\n<dd>";
                } elseif ( ';' === $char ) {
-                       $result .= '<dl><dt>';
+                       $result .= "<dl>\n<dt>";
                        $this->mDTopen = true;
                } else {
                        $result = '<!-- ERR 1 -->';
@@ -2305,11 +2305,11 @@ class Parser {
         */
        function nextItem( $char ) {
                if ( '*' === $char || '#' === $char ) {
-                       return '</li><li>';
+                       return "</li>\n<li>";
                } elseif ( ':' === $char || ';' === $char ) {
-                       $close = '</dd>';
+                       $close = "</dd>\n";
                        if ( $this->mDTopen ) {
-                               $close = '</dt>';
+                               $close = "</dt>\n";
                        }
                        if ( ';' === $char ) {
                                $this->mDTopen = true;
@@ -2331,15 +2331,15 @@ class Parser {
         */
        function closeList( $char ) {
                if ( '*' === $char ) {
-                       $text = '</li></ul>';
+                       $text = "</li>\n</ul>";
                } elseif ( '#' === $char ) {
-                       $text = '</li></ol>';
+                       $text = "</li>\n</ol>";
                } elseif ( ':' === $char ) {
                        if ( $this->mDTopen ) {
                                $this->mDTopen = false;
-                               $text = '</dt></dl>';
+                               $text = "</dt>\n</dl>";
                        } else {
-                               $text = '</dd></dl>';
+                               $text = "</dd>\n</dl>";
                        }
                } else {
                        return '<!-- ERR 3 -->';
@@ -2466,7 +2466,7 @@ class Parser {
                                $openmatch = preg_match( '/(?:<table|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|<p|<ul|<ol|<dl|<li|<\\/tr|<\\/td|<\\/th)/iS', $t );
                                $closematch = preg_match(
                                        '/(?:<\\/table|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|' .
-                                       '<td|<th|<\\/?blockquote|<\\/?div|<hr|<\\/pre|<\\/p|' . $this->mUniqPrefix . '-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)/iS', $t );
+                                       '<td|<th|<\\/?blockquote|<\\/?div|<hr|<\\/pre|<\\/p|<\\/mw:|' . $this->mUniqPrefix . '-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)/iS', $t );
                                if ( $openmatch or $closematch ) {
                                        $paragraphStack = false;
                                        # TODO bug 5718: paragraph closed
@@ -4520,6 +4520,7 @@ class Parser {
                        }
                        $toc = Linker::tocList( $toc, $this->mOptions->getUserLangObj() );
                        $this->mOutput->setTOCHTML( $toc );
+                       $toc = self::TOC_START . $toc . self::TOC_END;
                }
 
                if ( $isMain ) {