MDL-49807 mod_wiki: minimum heading level should always be <h3>
authorMarina Glancy <marina@moodle.com>
Tue, 9 Feb 2016 09:47:14 +0000 (17:47 +0800)
committerMarina Glancy <marina@moodle.com>
Tue, 9 Feb 2016 09:48:39 +0000 (17:48 +0800)
16 files changed:
mod/wiki/parser/markups/html.php
mod/wiki/parser/markups/wikimarkup.php
mod/wiki/tests/fixtures/input/html/3 [new file with mode: 0644]
mod/wiki/tests/fixtures/output/creole/2
mod/wiki/tests/fixtures/output/creole/3
mod/wiki/tests/fixtures/output/creole/4
mod/wiki/tests/fixtures/output/creole/5
mod/wiki/tests/fixtures/output/creole/7
mod/wiki/tests/fixtures/output/creole/8
mod/wiki/tests/fixtures/output/creole/9
mod/wiki/tests/fixtures/output/html/1
mod/wiki/tests/fixtures/output/html/3 [new file with mode: 0644]
mod/wiki/tests/fixtures/output/nwiki/1
mod/wiki/tests/fixtures/output/nwiki/2
mod/wiki/tests/fixtures/output/nwiki/3
mod/wiki/tests/wikiparser_test.php

index a2ae932..355c634 100644 (file)
@@ -15,22 +15,37 @@ class html_parser extends nwiki_parser {
 
     protected $section_editing = true;
 
+    /** @var int Minimum level of the headers on the page (usually tinymce uses <h1> and atto <h3>)  */
+    protected $minheaderlevel = null;
+
     public function __construct() {
         parent::__construct();
         // The order is important, headers should be parsed before links.
         $this->tagrules = array(
             // Headers are considered tags here.
             'header' => array(
-                'expression' => "/<\s*h([1-$this->maxheaderdepth])\s*>(.+?)<\/h[1-$this->maxheaderdepth]>/is"
+                'expression' => "/<\s*h([1-6])\s*>(.+?)<\/h[1-6]>/is"
             ),
             'link' => $this->tagrules['link'],
             'url' => $this->tagrules['url']
         );
     }
 
+    /**
+     * Find minimum header level used on the page (<h1>, <h3>, ...)
+     *
+     * @param string $text
+     * @return int
+     */
+    protected function find_min_header_level($text) {
+        preg_match_all($this->tagrules['header']['expression'], $text, $matches);
+        return !empty($matches[1]) ? min($matches[1]) : 1;
+    }
+
     protected function before_parsing() {
         parent::before_parsing();
 
+        $this->minheaderlevel = $this->find_min_header_level($this->string);
         $this->rules($this->string);
     }
 
@@ -40,7 +55,7 @@ class html_parser extends nwiki_parser {
      * @return string
      */
     protected function header_tag_rule($match) {
-        return $this->generate_header($match[2], $match[1]);
+        return $this->generate_header($match[2], (int)$match[1] - $this->minheaderlevel + 1);
     }
 
     /**
@@ -54,7 +69,9 @@ class html_parser extends nwiki_parser {
             $text .= "\n\n";
         }
 
-        $h1 = array("<\s*h1\s*>", "<\/h1>");
+        $minheaderlevel = $this->find_min_header_level($text);
+
+        $h1 = array("<\s*h{$minheaderlevel}\s*>", "<\/h{$minheaderlevel}>");
 
         $regex = "/(.*?)({$h1[0]}\s*".preg_quote($header, '/')."\s*{$h1[1]}.*?)((?:\n{$h1[0]}.*)|$)/is";
         preg_match($regex, $text, $match);
index 3e1efc0..8675a99 100644 (file)
@@ -192,7 +192,8 @@ abstract class wiki_markup_parser extends generic_parser {
             $text = parser_utils::h('a', "", array('name' => "toc-$num")) . $text;
         }
 
-        return parser_utils::h('h' . $level, $text) . "\n\n";
+        // Display headers as <h3> and lower for accessibility.
+        return parser_utils::h('h' . min(6, $level + 2), $text) . "\n\n";
     }
 
     /**
@@ -228,7 +229,7 @@ abstract class wiki_markup_parser extends generic_parser {
                 }
                 break;
             default:
-                continue;
+                continue 2;
             }
             $number = "$currentsection[0]";
             if (!empty($currentsection[1])) {
diff --git a/mod/wiki/tests/fixtures/input/html/3 b/mod/wiki/tests/fixtures/input/html/3
new file mode 100644 (file)
index 0000000..5323966
--- /dev/null
@@ -0,0 +1,20 @@
+<h3>Header1</h3>
+<p>
+Etiam eget nibh leo. In luctus orci quis tellus sagittis egestas. Praesent et turpis augue, ac accumsan orci? Pellentesque porttitor sodales tortor; vitae faucibus dui auctor vel. Phasellus sit amet sem leo; eu adipiscing ipsum. Aliquam vehicula ipsum at diam imperdiet a condimentum urna commodo? Nunc ac lacus non lorem porttitor malesuada et sit amet diam! Aenean pulvinar lectus et dolor dignissim viverra placerat nisl mattis! Nunc non leo a massa imperdiet porta vel eu tellus. Sed ac est quis orci viverra cursus. Nam tellus mauris, facilisis nec faucibus sit amet, consequat in felis. Ut volutpat lacinia est ut fringilla. Pellentesque augue dui, aliquet et ornare euismod, egestas nec arcu! Vivamus gravida, lorem vitae suscipit condimentum, turpis arcu iaculis tortor; vel ullamcorper lorem ante id nisi. Ut sit amet sem tempor quam dignissim interdum. Nam aliquam, odio vitae volutpat semper; sapien turpis feugiat neque, ac ullamcorper felis enim vitae arcu. Morbi viverra feugiat justo, at ullamcorper ipsum posuere non.
+</p>
+<p>
+Proin ultricies gravida dui a mattis. Integer nec nisl ante. Mauris euismod, tortor et fermentum semper; est mi adipiscing erat, non pellentesque orci dui ac arcu. Nam vitae metus augue. Integer magna nibh, elementum nec molestie eget; commodo sed turpis. Duis neque mi, vehicula sed aliquet id, ultricies sed tortor. Aliquam pharetra ante sapien. Etiam accumsan ipsum sed dolor bibendum congue sollicitudin enim fringilla. Nulla eros risus, auctor placerat vestibulum eget, tincidunt ac eros. Duis ut turpis leo, sit amet ornare arcu. Aliquam eu lorem in arcu accumsan iaculis. Integer placerat lacus in nibh sollicitudin euismod? Sed a urna vel dui sagittis varius cursus sit amet dolor. Nulla ut sem at magna fringilla hendrerit sed nec sapien. Aenean nisi elit, feugiat vel euismod non, laoreet sit amet ligula. Aenean a dui quam.
+</p>
+<p>
+Curabitur dolor ligula, suscipit et eleifend nec, faucibus varius sapien. Quisque ornare felis ac leo tincidunt quis malesuada elit lobortis? Suspendisse potenti. Vestibulum tempus porta dui, at ullamcorper mauris sollicitudin vel? In convallis risus id elit ultrices pellentesque. Sed id quam lectus. Duis tincidunt egestas urna, in tempor tortor rhoncus ac. Sed commodo, nunc sit amet sodales vulputate, purus nisi malesuada urna, ut cursus nisl nunc vel enim. Mauris ut imperdiet risus. Integer sagittis; odio at laoreet venenatis, purus neque fermentum nisi, non elementum urna libero sed ipsum.
+</p>
+<h3>Header2</h3>
+<p>
+Etiam eget nibh leo. In luctus orci quis tellus sagittis egestas. Praesent et turpis augue, ac accumsan orci? Pellentesque porttitor sodales tortor; vitae faucibus dui auctor vel. Phasellus sit amet sem leo; eu adipiscing ipsum. Aliquam vehicula ipsum at diam imperdiet a condimentum urna commodo? Nunc ac lacus non lorem porttitor malesuada et sit amet diam! Aenean pulvinar lectus et dolor dignissim viverra placerat nisl mattis! Nunc non leo a massa imperdiet porta vel eu tellus. Sed ac est quis orci viverra cursus. Nam tellus mauris, facilisis nec faucibus sit amet, consequat in felis. Ut volutpat lacinia est ut fringilla. Pellentesque augue dui, aliquet et ornare euismod, egestas nec arcu! Vivamus gravida, lorem vitae suscipit condimentum, turpis arcu iaculis tortor; vel ullamcorper lorem ante id nisi. Ut sit amet sem tempor quam dignissim interdum. Nam aliquam, odio vitae volutpat semper; sapien turpis feugiat neque, ac ullamcorper felis enim vitae arcu. Morbi viverra feugiat justo, at ullamcorper ipsum posuere non.
+</p>
+<p>
+Proin ultricies gravida dui a mattis. Integer nec nisl ante. Mauris euismod, tortor et fermentum semper; est mi adipiscing erat, non pellentesque orci dui ac arcu. Nam vitae metus augue. Integer magna nibh, elementum nec molestie eget; commodo sed turpis. Duis neque mi, vehicula sed aliquet id, ultricies sed tortor. Aliquam pharetra ante sapien. Etiam accumsan ipsum sed dolor bibendum congue sollicitudin enim fringilla. Nulla eros risus, auctor placerat vestibulum eget, tincidunt ac eros. Duis ut turpis leo, sit amet ornare arcu. Aliquam eu lorem in arcu accumsan iaculis. Integer placerat lacus in nibh sollicitudin euismod? Sed a urna vel dui sagittis varius cursus sit amet dolor. Nulla ut sem at magna fringilla hendrerit sed nec sapien. Aenean nisi elit, feugiat vel euismod non, laoreet sit amet ligula. Aenean a dui quam.
+</p>
+<p>
+Curabitur dolor ligula, suscipit et eleifend nec, faucibus varius sapien. Quisque ornare felis ac leo tincidunt quis malesuada elit lobortis? Suspendisse potenti. Vestibulum tempus porta dui, at ullamcorper mauris sollicitudin vel? In convallis risus id elit ultrices pellentesque. Sed id quam lectus. Duis tincidunt egestas urna, in tempor tortor rhoncus ac. Sed commodo, nunc sit amet sodales vulputate, purus nisi malesuada urna, ut cursus nisl nunc vel enim. Mauris ut imperdiet risus. Integer sagittis; odio at laoreet venenatis, purus neque fermentum nisi, non elementum urna libero sed ipsum.
+</p>
\ No newline at end of file
index 0de9e7d..4ad440e 100644 (file)
@@ -1,12 +1,12 @@
-<h1><a name="toc-1"></a>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</h1>
+<h3><a name="toc-1"></a>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</h3>
 <p>Phasellus odio? Ut ac leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus enim justo, porttitor at, lacinia vitae; consectetuer et, ante? Maecenas eget libero. Duis est. Curabitur tincidunt dictum ligula. Nunc euismod lectus quis mi. Proin et enim sed nunc scelerisque posuere. Suspendisse enim purus, sodales non, tristique vel, sollicitudin ullamcorper, nulla. Aliquam condimentum; tellus eu vulputate facilisis, ante pede rhoncus elit, vel euismod nulla sapien et metus?</p>
-<h2><a name="toc-2"></a>Praesent tristique facilisis metus.</h2>
+<h4><a name="toc-2"></a>Praesent tristique facilisis metus.</h4>
 <p>Quisque lectus? Morbi ultrices ultricies neque. In ligula sem; pretium eget, iaculis laoreet, pulvinar sed, dui. Proin mattis luctus diam. Aenean eget risus in mauris sagittis vehicula. Vivamus dapibus enim ac dolor. Pellentesque leo. Praesent tristique facilisis metus. Nulla imperdiet ante et urna? Maecenas leo nisi, lacinia sollicitudin, viverra at, aliquet et, justo. Quisque congue dolor.</p>
-<h3><a name="toc-3"></a>Phasellus ut augue ut felis porttitor condimentum.</h3>
+<h5><a name="toc-3"></a>Phasellus ut augue ut felis porttitor condimentum.</h5>
 <p>Aliquam erat volutpat. Phasellus ut augue ut felis porttitor condimentum. Nam sapien tellus, tempus sed; mattis quis, viverra quis, mauris. Suspendisse venenatis sollicitudin massa. Pellentesque lobortis dolor vitae nisl. Nulla interdum aliquet neque. Duis nisl pede, vestibulum in, tristique eget, viverra vitae, erat. Maecenas justo turpis, convallis sit amet, tristique eu, laoreet et, augue. Fusce sem. Pellentesque ut turpis? Morbi suscipit sollicitudin metus? Morbi pharetra, sem eget ornare tempor, neque erat dapibus lacus, ut tincidunt nisi leo sed nunc. Sed sodales dignissim eros. Duis vitae risus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed lobortis consequat sem. Nunc posuere vulputate velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis vestibulum pellentesque neque.</p>
-<h4>Sed adipiscing dui at massa. Nulla consectetuer tristique lacus?</h4>
+<h6>Sed adipiscing dui at massa. Nulla consectetuer tristique lacus?</h6>
 <p>Maecenas lacus justo, pellentesque vitae, mattis vitae, rutrum sit amet, metus! Etiam aliquam odio vel nulla. Suspendisse ante. Pellentesque viverra leo at lorem! Ut pharetra egestas ante. Aliquam erat volutpat. Sed adipiscing dui at massa. Nulla consectetuer tristique lacus? Donec ante leo, condimentum non, consectetuer vel, sodales placerat, tortor. Etiam at diam at elit adipiscing ultrices. Etiam lectus sapien, congue sed, sodales quis, ultricies a, libero. Pellentesque tincidunt!</p>
-<h2><a name="toc-4"></a>Curabitur euismod sollicitudin nibh</h2>
+<h4><a name="toc-4"></a>Curabitur euismod sollicitudin nibh</h4>
 <p>Curabitur euismod sollicitudin nibh. Duis nec diam. Sed nunc quam, lobortis nec; tristique et, dignissim eget, massa. Suspendisse sagittis malesuada tortor. Nullam lectus diam, mollis id, malesuada at, gravida ut, nisl. In hac habitasse platea dictumst. Sed a purus. Etiam velit urna, lacinia et, imperdiet quis, varius quis, orci! Sed dolor ante, mollis in, ultrices in, vestibulum vitae; justo. Vestibulum accumsan vehicula risus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus sit amet diam lobortis urna tristique pretium. Quisque erat.</p>
-<h4>Duis nec diam.</h4>
+<h6>Duis nec diam.</h6>
 <p>Pellentesque lobortis dolor vitae nisl. Nulla interdum aliquet neque. Duis nisl pede, vestibulum in, tristique eget, viverra vitae, erat. Maecenas justo turpis, convallis sit amet, tristique eu, laoreet et, augue. Fusce sem. Pellentesque ut turpis? Morbi suscipit sollicitudin metus? Morbi pharetra, sem eget ornare tempor, neque erat dapibus lacus, ut tincidunt nisi leo sed nunc. Sed sodales dignissim eros. Duis vitae risus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed lobortis consequat sem. Nunc posuere vulputate velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis vestibulum pellentesque neque.</p>
index 7311db5..cb716cf 100644 (file)
@@ -1,5 +1,5 @@
-<h1><a name="toc-1"></a>In nisi purus, varius in, mollis eget, interdum in, ipsum.</h1>
+<h3><a name="toc-1"></a>In nisi purus, varius in, mollis eget, interdum in, ipsum.</h3>
 <p>Vivamus lobortis. <strong>Mauris dui dui, rutrum in, egestas nec, porttitor vehicula, risus!</strong> Vivamus aliquam ultrices metus. <em>Donec ultricies, metus eget volutpat condimentum;</em> neque orci mattis dolor, non posuere eros dui et orci. Duis aliquam. Fusce sit amet nisl. Duis tempor dapibus diam? In venenatis congue mi? Aliquam metus erat; facilisis a, suscipit a, pretium vitae; ligula? Ut id metus a pede adipiscing commodo! <strong>Praesent ultricies urna et sapien.</strong> <em>Donec adipiscing.</em> Donec sit amet lacus.</p>
-<h2><a name="toc-2"></a>**In nisi purus**, //varius in,// mollis eget, interdum in, ipsum.</h2>
+<h4><a name="toc-2"></a>**In nisi purus**, //varius in,// mollis eget, interdum in, ipsum.</h4>
 <p>Duis feugiat ligula ac elit. %!34%!Nulla sed arcu a risus sodales mattis. Etiam magna arcu, accumsan vitae, sodales non, faucibus quis, nunc. Aenean ut elit. Pellentesque malesuada lacus a orci. Suspendisse in erat sed mi porta faucibus. Nullam a nibh. Suspendisse potenti. Nam malesuada lobortis nibh. Ut venenatis, nibh ac convallis iaculis, justo pede tristique sapien, vel ultricies massa diam id leo. Pellentesque ullamcorper condimentum urna. //Proin dui lacus; scelerisque nec, condimentum non, <strong>lobortis ac, felis.</strong></p>
 <p>//Nullam ac neque. %!4%!<strong>Praesent quis tellus. </strong>Maecenas<strong> et felis vitae lectus porttitor dignissim. Etiam at dui id nibh molestie semper. Sed vulputate nunc et neque. Fusce consectetur elit id leo. <em>Nulla facilisi. </em>Donec vitae nulla ac nisl mollis blandit. //Nulla adipiscing.</strong> Phasellus quis odio sed eros viverra sodales. Suspendisse eget mauris id urna convallis fringilla. Aliquam dolor. Sed commodo. Quisque vestibulum, eros in mollis rutrum, odio risus aliquam turpis; nec convallis ante justo in dui? Pellentesque pharetra venenatis odio. Nulla placerat, libero at lacinia pellentesque; nisi massa sodales risus, at tincidunt orci pede sed ipsum. Etiam massa! Nullam aliquet justo at erat placerat convallis.</p>
index 965d91d..d7ad8e0 100644 (file)
@@ -1,4 +1,4 @@
-<h2><a name="toc-1"></a>Donec ultricies neque eu libero scelerisque feugiat.</h2>
+<h4><a name="toc-1"></a>Donec ultricies neque eu libero scelerisque feugiat.</h4>
 <p><strong>Donec ultricies <em>neque eu <a href="http://libero">libero</a> scelerisque </em>feugiat. <em>Cras sed ante.</em> Sed volutpat urna eu diam. Curabitur fringilla lacinia mi.</strong> Quisque lorem. Etiam fringilla consequat dui. Nunc est est; aliquet eu, porttitor auctor; malesuada id, massa. <a href="http://Nullam">Nullam feugiat</a>, nulla eget vulputate facilisis, erat odio vestibulum mi, eget volutpat lorem enim vitae eros. Vestibulum convallis. Maecenas posuere pellentesque mi? Donec consectetur volutpat dolor. <a href="http://%2A%2ACurabitur%2A%2A">**Curabitur**</a> non <strong><a href="http://%2F%2FTellus%2A%2A">tellus nec ligula bibendum pulvinar.</a></strong></p>
 <p><a href="http://www.google.com">http://www.google.com</a>
 <a href="http://www.google.com">http://www.google.com</a></p>
index fec622c..092a7e3 100644 (file)
@@ -1,4 +1,4 @@
-<h1><a name="toc-1"></a>Integer eu leo? \\ Quisque posuere.</h1>
+<h3><a name="toc-1"></a>Integer eu leo? \\ Quisque posuere.</h3>
 <p>Nunc commodo nisi vitae quam. Etiam tincidunt; lectus eu tempus molestie, elit enim auctor tortor, in varius leo mi ac risus. Sed iaculis magna vel libero. Pellentesque iaculis, tellus in ullamcorper tempus, justo sapien scelerisque enim, eu ornare dui neque sed ligula. <br />Vestibulum porta justo a dolor. Duis mollis quam vel sem. Quisque vel arcu. Pellentesque sem. Aliquam adipiscing neque quis turpis. Mauris placerat, elit quis iaculis vehicula, sem nulla imperdiet nunc, in elementum felis lectus non magna. Mauris cursus; odio eu sagittis sodales, nisi nibh pellentesque tortor, ut ultricies lacus tellus non odio. In semper, ligula eu condimentum posuere, sapien tellus blandit quam, dapibus iaculis lacus erat eget ipsum. Duis pulvinar molestie magna. Aliquam bibendum quam ac nulla!</p>
-<h2><a name="toc-2"></a>Fusce justo. Aliquam felis tellus, tempor vel, congue quis, tempus eu, ipsum. \\</h2>
+<h4><a name="toc-2"></a>Fusce justo. Aliquam felis tellus, tempor vel, congue quis, tempus eu, ipsum. \\</h4>
 <p><br />Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi sed erat! Vivamus condimentum. Praesent euismod; nibh sed mollis feugiat, erat lorem commodo lectus, vitae tristique erat massa semper diam. Morbi vitae elit. <br />Quisque sagittis leo non odio auctor faucibus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque mi pede, lacinia id, commodo faucibus, rhoncus in, nibh. Praesent vestibulum aliquet quam!</p>
index 72d2f9a..a0a157a 100644 (file)
@@ -1,3 +1,3 @@
-<h1><a name="toc-1"></a>In nisi purus, varius in, mollis eget, interdum in, ipsum.</h1>
+<h3><a name="toc-1"></a>In nisi purus, varius in, mollis eget, interdum in, ipsum.</h3>
 <p>Vivamus lobortis. <strong>Mauris dui dui, rutrum in, egestas nec, porttitor vehicula, risus!</strong> Vivamus aliquam ultrices metus. <em>Donec ultricies, metus eget volutpat condimentum;</em> neque orci mattis dolor, non posuere eros dui et orci. Duis aliquam. Fusce sit amet nisl. Duis tempor dapibus diam? In venenatis congue mi? Aliquam metus erat; facilisis a, suscipit a, pretium vitae; ligula? Ut id metus a pede adipiscing commodo! <tt>**Praesent ultricies urna et sapien.** //Donec adipiscing.//</tt> Donec sit amet lacus.</p>
 <pre> lkdsjflsdjflsdkjflskdjlfk </pre>
index 50f0106..5177937 100644 (file)
@@ -1,4 +1,4 @@
-<h2><a name="toc-1"></a>Testing some tables</h2>
+<h4><a name="toc-1"></a>Testing some tables</h4>
 <p>Phasellus urna erat; venenatis ac, iaculis sed, pretium ut, pede. Suspendisse mauris tellus, rhoncus a, tempor id, mattis non, nibh. Aliquam magna odio; hendrerit at, eleifend sed, dignissim quis, orci. Donec mollis, ante sit amet convallis porta, augue nibh viverra magna, ac scelerisque dui ligula eu felis. Sed eget magna. Proin eget ligula. Vestibulum ornare; sem molestie congue sollicitudin, mi velit porta est, pellentesque dignissim libero est at velit. Donec congue adipiscing massa? Nunc eget nisi eget elit facilisis ornare. Vestibulum et felis id leo feugiat sagittis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tellus velit, luctus et, tempor non, tempor vitae, magna. Aliquam viverra tortor sit amet tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque nibh risus, dictum eu, tempor sit amet, posuere et, nulla.</p>
 <p>Well formed table...</p>
 <table>
index 80b9303..ab18969 100644 (file)
@@ -1,14 +1,14 @@
-<h1><a name="toc-1"></a>Top-level heading (1)</h1>
-<h2><a name="toc-2"></a>This a test for creole 0.1 (2)</h2>
-<h3><a name="toc-3"></a>This is a Subheading (3)</h3>
-<h4>Subsub (4)</h4>
-<h5>Subsubsub (5)</h5>
+<h3><a name="toc-1"></a>Top-level heading (1)</h3>
+<h4><a name="toc-2"></a>This a test for creole 0.1 (2)</h4>
+<h5><a name="toc-3"></a>This is a Subheading (3)</h5>
+<h6>Subsub (4)</h6>
+<h6>Subsubsub (5)</h6>
 <p>The ending equal signs should not be displayed:</p>
 <p>Top-level heading (1)</p>
-<h2><a name="toc-4"></a>This a test for creole 0.1 (2)</h2>
-<h3><a name="toc-5"></a>This is a Subheading (3)</h3>
-<h4>Subsub (4)</h4>
-<h5>Subsubsub (5)</h5>
+<h4><a name="toc-4"></a>This a test for creole 0.1 (2)</h4>
+<h5><a name="toc-5"></a>This is a Subheading (3)</h5>
+<h6>Subsub (4)</h6>
+<h6>Subsubsub (5)</h6>
 <p>You can make things <strong>bold</strong> or <em>italic</em> or <strong><em>both</em></strong> or <em><strong>both</strong></em>.</p>
 <p>Character formatting extends across line breaks: <strong>bold,
 this is still bold. This line deliberately does not end in star-star.</strong></p>
@@ -86,15 +86,15 @@ Guitar Chord C:
 ||---|---|---|
 </pre>
 <p>You can also use it inline nowiki <tt> in a sentence </tt> like this.</p>
-<h1><a name="toc-6"></a>Escapes</h1>
+<h3><a name="toc-6"></a>Escapes</h3>
 <p>Normal Link: <a href="http://wikicreole.org/">http://wikicreole.org/</a> - now same link, but escaped: http://wikicreole.org/ </p>
 <p>Normal asterisks: **not bold**</p>
 <p>a tilde alone: ~</p>
 <p>a tilde escapes itself: ~xxx</p>
-<h3><a name="toc-7"></a>Creole 0.2</h3>
+<h5><a name="toc-7"></a>Creole 0.2</h5>
 <p>This should be a flower with the ALT text &quot;this is a flower&quot; if your wiki supports ALT text on images:</p>
 <p><div class="wiki_image_left"><p></p><img src="Red-Flower.jpg" alt="here is a red flower" /></div></p>
-<h3><a name="toc-8"></a>Creole 0.4</h3>
+<h5><a name="toc-8"></a>Creole 0.4</h5>
 <p>Tables are done like this:</p>
 <table>
 <thead>
@@ -123,7 +123,7 @@ Guitar Chord C:
 Pone: xyz<br />
 Fax: +45<br />
 Mobile: abc</p>
-<h3><a name="toc-9"></a>Creole 0.5</h3>
+<h5><a name="toc-9"></a>Creole 0.5</h5>
 <table>
 <thead>
 <tr>
@@ -142,5 +142,5 @@ Mobile: abc</p>
 </tr>
 </tbody>
 </table>
-<h3><a name="toc-10"></a>Creole 1.0</h3>
+<h5><a name="toc-10"></a>Creole 1.0</h5>
 <p>If interwiki links are setup in your wiki, this links to the WikiCreole page about Creole 1.0 test cases: <a href="http://WikiCreole%3ACreole1.0TestCases">WikiCreole:Creole1.0TestCases</a>.</p>
index bbfcab1..37426e4 100644 (file)
@@ -1,4 +1,4 @@
-<h1><a name="toc-1"></a>Header1</h1>
+<h3><a name="toc-1"></a>Header1</h3>
 <p>
 Etiam eget nibh leo. In luctus orci quis tellus sagittis egestas. Praesent et turpis augue, ac accumsan orci? Pellentesque porttitor sodales tortor; vitae faucibus dui auctor vel. Phasellus sit amet sem leo; eu adipiscing ipsum. Aliquam vehicula ipsum at diam imperdiet a condimentum urna commodo? Nunc ac lacus non lorem porttitor malesuada et sit amet diam! Aenean pulvinar lectus et dolor dignissim viverra placerat nisl mattis! Nunc non leo a massa imperdiet porta vel eu tellus. Sed ac est quis orci viverra cursus. Nam tellus mauris, facilisis nec faucibus sit amet, consequat in felis. Ut volutpat lacinia est ut fringilla. Pellentesque augue dui, aliquet et ornare euismod, egestas nec arcu! Vivamus gravida, lorem vitae suscipit condimentum, turpis arcu iaculis tortor; vel ullamcorper lorem ante id nisi. Ut sit amet sem tempor quam dignissim interdum. Nam aliquam, odio vitae volutpat semper; sapien turpis feugiat neque, ac ullamcorper felis enim vitae arcu. Morbi viverra feugiat justo, at ullamcorper ipsum posuere non.
 </p>
@@ -8,7 +8,7 @@ Proin ultricies gravida dui a mattis. Integer nec nisl ante. Mauris euismod, tor
 <p>
 Curabitur dolor ligula, suscipit et eleifend nec, faucibus varius sapien. Quisque ornare felis ac leo tincidunt quis malesuada elit lobortis? Suspendisse potenti. Vestibulum tempus porta dui, at ullamcorper mauris sollicitudin vel? In convallis risus id elit ultrices pellentesque. Sed id quam lectus. Duis tincidunt egestas urna, in tempor tortor rhoncus ac. Sed commodo, nunc sit amet sodales vulputate, purus nisi malesuada urna, ut cursus nisl nunc vel enim. Mauris ut imperdiet risus. Integer sagittis; odio at laoreet venenatis, purus neque fermentum nisi, non elementum urna libero sed ipsum.
 </p>
-<h1><a name="toc-2"></a>Header2</h1>
+<h3><a name="toc-2"></a>Header2</h3>
 <p>
 Etiam eget nibh leo. In luctus orci quis tellus sagittis egestas. Praesent et turpis augue, ac accumsan orci? Pellentesque porttitor sodales tortor; vitae faucibus dui auctor vel. Phasellus sit amet sem leo; eu adipiscing ipsum. Aliquam vehicula ipsum at diam imperdiet a condimentum urna commodo? Nunc ac lacus non lorem porttitor malesuada et sit amet diam! Aenean pulvinar lectus et dolor dignissim viverra placerat nisl mattis! Nunc non leo a massa imperdiet porta vel eu tellus. Sed ac est quis orci viverra cursus. Nam tellus mauris, facilisis nec faucibus sit amet, consequat in felis. Ut volutpat lacinia est ut fringilla. Pellentesque augue dui, aliquet et ornare euismod, egestas nec arcu! Vivamus gravida, lorem vitae suscipit condimentum, turpis arcu iaculis tortor; vel ullamcorper lorem ante id nisi. Ut sit amet sem tempor quam dignissim interdum. Nam aliquam, odio vitae volutpat semper; sapien turpis feugiat neque, ac ullamcorper felis enim vitae arcu. Morbi viverra feugiat justo, at ullamcorper ipsum posuere non.
 </p>
diff --git a/mod/wiki/tests/fixtures/output/html/3 b/mod/wiki/tests/fixtures/output/html/3
new file mode 100644 (file)
index 0000000..37426e4
--- /dev/null
@@ -0,0 +1,20 @@
+<h3><a name="toc-1"></a>Header1</h3>
+<p>
+Etiam eget nibh leo. In luctus orci quis tellus sagittis egestas. Praesent et turpis augue, ac accumsan orci? Pellentesque porttitor sodales tortor; vitae faucibus dui auctor vel. Phasellus sit amet sem leo; eu adipiscing ipsum. Aliquam vehicula ipsum at diam imperdiet a condimentum urna commodo? Nunc ac lacus non lorem porttitor malesuada et sit amet diam! Aenean pulvinar lectus et dolor dignissim viverra placerat nisl mattis! Nunc non leo a massa imperdiet porta vel eu tellus. Sed ac est quis orci viverra cursus. Nam tellus mauris, facilisis nec faucibus sit amet, consequat in felis. Ut volutpat lacinia est ut fringilla. Pellentesque augue dui, aliquet et ornare euismod, egestas nec arcu! Vivamus gravida, lorem vitae suscipit condimentum, turpis arcu iaculis tortor; vel ullamcorper lorem ante id nisi. Ut sit amet sem tempor quam dignissim interdum. Nam aliquam, odio vitae volutpat semper; sapien turpis feugiat neque, ac ullamcorper felis enim vitae arcu. Morbi viverra feugiat justo, at ullamcorper ipsum posuere non.
+</p>
+<p>
+Proin ultricies gravida dui a mattis. Integer nec nisl ante. Mauris euismod, tortor et fermentum semper; est mi adipiscing erat, non pellentesque orci dui ac arcu. Nam vitae metus augue. Integer magna nibh, elementum nec molestie eget; commodo sed turpis. Duis neque mi, vehicula sed aliquet id, ultricies sed tortor. Aliquam pharetra ante sapien. Etiam accumsan ipsum sed dolor bibendum congue sollicitudin enim fringilla. Nulla eros risus, auctor placerat vestibulum eget, tincidunt ac eros. Duis ut turpis leo, sit amet ornare arcu. Aliquam eu lorem in arcu accumsan iaculis. Integer placerat lacus in nibh sollicitudin euismod? Sed a urna vel dui sagittis varius cursus sit amet dolor. Nulla ut sem at magna fringilla hendrerit sed nec sapien. Aenean nisi elit, feugiat vel euismod non, laoreet sit amet ligula. Aenean a dui quam.
+</p>
+<p>
+Curabitur dolor ligula, suscipit et eleifend nec, faucibus varius sapien. Quisque ornare felis ac leo tincidunt quis malesuada elit lobortis? Suspendisse potenti. Vestibulum tempus porta dui, at ullamcorper mauris sollicitudin vel? In convallis risus id elit ultrices pellentesque. Sed id quam lectus. Duis tincidunt egestas urna, in tempor tortor rhoncus ac. Sed commodo, nunc sit amet sodales vulputate, purus nisi malesuada urna, ut cursus nisl nunc vel enim. Mauris ut imperdiet risus. Integer sagittis; odio at laoreet venenatis, purus neque fermentum nisi, non elementum urna libero sed ipsum.
+</p>
+<h3><a name="toc-2"></a>Header2</h3>
+<p>
+Etiam eget nibh leo. In luctus orci quis tellus sagittis egestas. Praesent et turpis augue, ac accumsan orci? Pellentesque porttitor sodales tortor; vitae faucibus dui auctor vel. Phasellus sit amet sem leo; eu adipiscing ipsum. Aliquam vehicula ipsum at diam imperdiet a condimentum urna commodo? Nunc ac lacus non lorem porttitor malesuada et sit amet diam! Aenean pulvinar lectus et dolor dignissim viverra placerat nisl mattis! Nunc non leo a massa imperdiet porta vel eu tellus. Sed ac est quis orci viverra cursus. Nam tellus mauris, facilisis nec faucibus sit amet, consequat in felis. Ut volutpat lacinia est ut fringilla. Pellentesque augue dui, aliquet et ornare euismod, egestas nec arcu! Vivamus gravida, lorem vitae suscipit condimentum, turpis arcu iaculis tortor; vel ullamcorper lorem ante id nisi. Ut sit amet sem tempor quam dignissim interdum. Nam aliquam, odio vitae volutpat semper; sapien turpis feugiat neque, ac ullamcorper felis enim vitae arcu. Morbi viverra feugiat justo, at ullamcorper ipsum posuere non.
+</p>
+<p>
+Proin ultricies gravida dui a mattis. Integer nec nisl ante. Mauris euismod, tortor et fermentum semper; est mi adipiscing erat, non pellentesque orci dui ac arcu. Nam vitae metus augue. Integer magna nibh, elementum nec molestie eget; commodo sed turpis. Duis neque mi, vehicula sed aliquet id, ultricies sed tortor. Aliquam pharetra ante sapien. Etiam accumsan ipsum sed dolor bibendum congue sollicitudin enim fringilla. Nulla eros risus, auctor placerat vestibulum eget, tincidunt ac eros. Duis ut turpis leo, sit amet ornare arcu. Aliquam eu lorem in arcu accumsan iaculis. Integer placerat lacus in nibh sollicitudin euismod? Sed a urna vel dui sagittis varius cursus sit amet dolor. Nulla ut sem at magna fringilla hendrerit sed nec sapien. Aenean nisi elit, feugiat vel euismod non, laoreet sit amet ligula. Aenean a dui quam.
+</p>
+<p>
+Curabitur dolor ligula, suscipit et eleifend nec, faucibus varius sapien. Quisque ornare felis ac leo tincidunt quis malesuada elit lobortis? Suspendisse potenti. Vestibulum tempus porta dui, at ullamcorper mauris sollicitudin vel? In convallis risus id elit ultrices pellentesque. Sed id quam lectus. Duis tincidunt egestas urna, in tempor tortor rhoncus ac. Sed commodo, nunc sit amet sodales vulputate, purus nisi malesuada urna, ut cursus nisl nunc vel enim. Mauris ut imperdiet risus. Integer sagittis; odio at laoreet venenatis, purus neque fermentum nisi, non elementum urna libero sed ipsum.
+</p>
index 6b1303f..fd48b34 100644 (file)
@@ -1,9 +1,9 @@
-<h1><a name="toc-1"></a>Header 1</h1>
+<h3><a name="toc-1"></a>Header 1</h3>
 <p>First paragraph with no formats.</p>
 <p><strong>This paragraph has bold text.</strong></p>
 <p>== False header =</p>
 <p><em>This part of the paragraph is italicized.</em> But not this part.</p>
-<h2><a name="toc-2"></a>Header 2</h2>
+<h4><a name="toc-2"></a>Header 2</h4>
 <p>Some mix of <em>italics</em> and <strong>bold</strong>, and some <em><strong>italics & bold</strong></em>.</p>
 <p>And that <em>italics and <strong>both</strong></em>.</p>
 <p>And this: <em>italics and</em> <em><strong>both</strong></em>.</p>
index 5b2c07d..2378668 100644 (file)
@@ -1,12 +1,12 @@
-<h1><a name="toc-1"></a>Links</h1>
-<h2><a name="toc-2"></a>Internal links</h2>
+<h3><a name="toc-1"></a>Links</h3>
+<h4><a name="toc-2"></a>Internal links</h4>
 <p>Some <a href="http://links">links</a>. <a href="http://link">Another Link</a>.</p>
-<h3><a name="toc-3"></a>Anchors</h3>
+<h5><a name="toc-3"></a>Anchors</h5>
 <p>This is an <a href="#External+links">anchor</a> to the external links section.</p>
 <p>And this is an <a href="http://link#Section">anchor to another page</a>.</p>
-<h2><a name="toc-4"></a>External links</h2>
+<h4><a name="toc-4"></a>External links</h4>
 <p>A link to <a href="http://www.google.com">http://www.google.com</a> , and a link to <a href="http://www.apple.com">apple</a>. </p>
 <p>The same link to <a href="http://www.apple.com">Apple Corporation</a>.</p>
-<h2><a name="toc-5"></a>Attachments & images</h2>
+<h4><a name="toc-5"></a>Attachments & images</h4>
 <p>That's an <a href="attachment.png" class="wiki-attachment">attachment</a>.</p>
 <p>And that's an <div class="wiki_image_left"><p></p><img src="image.png" alt="image" /></div>.</p>
index 1c38e68..a433def 100644 (file)
@@ -1,5 +1,5 @@
-<h1><a name="toc-1"></a>Lists</h1>
-<h2><a name="toc-2"></a>Unordered lists</h2>
+<h3><a name="toc-1"></a>Lists</h3>
+<h4><a name="toc-2"></a>Unordered lists</h4>
 <ul>
 <li>1
 <ul>
@@ -20,7 +20,7 @@
 </li>
 <li><em>italic</em></li>
 </ul>
-<h2><a name="toc-3"></a>Ordered lists</h2>
+<h4><a name="toc-3"></a>Ordered lists</h4>
 <ol>
 <li>1
 <ol>
index 678b53a..909c2c1 100644 (file)
@@ -64,7 +64,7 @@ class mod_wiki_wikiparser_test extends basic_testcase {
         $result['parsed_text'] = preg_replace('~[\r\n]~', '', $result['parsed_text']);
         $output                = preg_replace('~[\r\n]~', '', $output);
 
-        $this->assertEquals($output, $result['parsed_text']);
+        $this->assertEquals($output, $result['parsed_text'], 'Failed asserting that two strings are equal. Markup = '.$markup.", num = $num");
         return true;
     }
 
@@ -89,8 +89,8 @@ class mod_wiki_wikiparser_test extends basic_testcase {
 
         // Test section name using HTML entities.
         $input = '<h1>Code &amp; Test</h1>';
-        $output = '<h1><a name="toc-1"></a>Code &amp; Test <a href="edit.php?pageid=&amp;section=Code+%26amp%3B+Test" '.
-            'class="wiki_edit_section">[edit]</a></h1>' . "\n";
+        $output = '<h3><a name="toc-1"></a>Code &amp; Test <a href="edit.php?pageid=&amp;section=Code+%26amp%3B+Test" '.
+            'class="wiki_edit_section">[edit]</a></h3>' . "\n";
         $toc = '<div class="wiki-toc"><p class="wiki-toc-title">Table of contents</p><p class="wiki-toc-section-1 '.
             'wiki-toc-section">1. <a href="#toc-1">Code &amp; Test <a href="edit.php?pageid=&amp;section=Code+%26amp%3B+'.
             'Test" class="wiki_edit_section">[edit]</a></a></p></div>';
@@ -102,8 +102,8 @@ class mod_wiki_wikiparser_test extends basic_testcase {
 
         // Test section name using non-ASCII characters.
         $input = '<h1>Another áéíóú瀠test</h1>';
-        $output = '<h1><a name="toc-1"></a>Another áéíóú瀠test <a href="edit.php?pageid=&amp;section=Another+%C'.
-            '3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%A7%E2%82%AC+test" class="wiki_edit_section">[edit]</a></h1>' . "\n";
+        $output = '<h3><a name="toc-1"></a>Another áéíóú瀠test <a href="edit.php?pageid=&amp;section=Another+%C'.
+            '3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%A7%E2%82%AC+test" class="wiki_edit_section">[edit]</a></h3>' . "\n";
         $toc = '<div class="wiki-toc"><p class="wiki-toc-title">Table of contents</p><p class="wiki-toc-section-1 '.
             'wiki-toc-section">1. <a href="#toc-1">Another áéíóú瀠test <a href="edit.php?pageid=&amp;section=Another+%C'.
             '3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%A7%E2%82%AC+test" class="wiki_edit_section">[edit]</a></a></p></div>';
@@ -115,8 +115,8 @@ class mod_wiki_wikiparser_test extends basic_testcase {
 
         // Test section name with a URL.
         $input = '<h1>Another http://moodle.org test</h1>';
-        $output = '<h1><a name="toc-1"></a>Another <a href="http://moodle.org">http://moodle.org</a> test <a href="edit.php'.
-            '?pageid=&amp;section=Another+http%3A%2F%2Fmoodle.org+test" class="wiki_edit_section">[edit]</a></h1>' . "\n";
+        $output = '<h3><a name="toc-1"></a>Another <a href="http://moodle.org">http://moodle.org</a> test <a href="edit.php'.
+            '?pageid=&amp;section=Another+http%3A%2F%2Fmoodle.org+test" class="wiki_edit_section">[edit]</a></h3>' . "\n";
         $toc = '<div class="wiki-toc"><p class="wiki-toc-title">Table of contents</p><p class="wiki-toc-section-1 '.
             'wiki-toc-section">1. <a href="#toc-1">Another http://moodle.org test <a href="edit.php?pageid=&amp;section='.
             'Another+http%3A%2F%2Fmoodle.org+test" class="wiki_edit_section">[edit]</a></a></p></div>';
@@ -130,11 +130,11 @@ class mod_wiki_wikiparser_test extends basic_testcase {
 
         // Test toc section names being wikilinks.
         $input = '<h1>[[Heading 1]]</h1><h2>[[Heading A]]</h2><h2>Heading D</h2>';
-        $regexpoutput = '!<h1><a name="toc-1"></a>' .
+        $regexpoutput = '!<h3><a name="toc-1"></a>' .
             '<a class="wiki_newentry" href.*mod/wiki/create\.php\?.*title=Heading\+1.*action=new.*>Heading 1<.*' .
-            '<h2><a name="toc-2"></a>' .
+            '<h4><a name="toc-2"></a>' .
             '<a class="wiki_newentry" href.*mod/wiki/create\.php\?.*title=Heading\+A.*action=new.*>Heading A<.*' .
-            '<h2><a name="toc-3"></a>' .
+            '<h4><a name="toc-3"></a>' .
             'Heading D!ms';
         $regexptoc = '!<a href="#toc-1">Heading 1.*<a href="#toc-2">Heading A</a>.*<a href="#toc-3">Heading D</a>!ms';
         $section = wiki_parser_proxy::get_section($input, 'html', 'Another [[wikilinked]] test');
@@ -150,8 +150,8 @@ class mod_wiki_wikiparser_test extends basic_testcase {
 
         // Test section name using HTML entities.
         $input = '= Code & Test =';
-        $output = '<h1><a name="toc-1"></a>Code &amp; Test <a href="edit.php?pageid=&amp;section=Code+%26amp%3B+Test" '.
-            'class="wiki_edit_section">[edit]</a></h1>' . "\n";
+        $output = '<h3><a name="toc-1"></a>Code &amp; Test <a href="edit.php?pageid=&amp;section=Code+%26amp%3B+Test" '.
+            'class="wiki_edit_section">[edit]</a></h3>' . "\n";
         $toc = '<div class="wiki-toc"><p class="wiki-toc-title">Table of contents</p><p class="wiki-toc-section-1 '.
             'wiki-toc-section">1. <a href="#toc-1">Code &amp; Test <a href="edit.php?pageid=&amp;section=Code+%26amp%3B+'.
             'Test" class="wiki_edit_section">[edit]</a></a></p></div>';
@@ -163,8 +163,8 @@ class mod_wiki_wikiparser_test extends basic_testcase {
 
         // Test section name using non-ASCII characters.
         $input = '= Another áéíóú瀠test =';
-        $output = '<h1><a name="toc-1"></a>Another áéíóú瀠test <a href="edit.php?pageid=&amp;section=Another+%C'.
-            '3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%A7%E2%82%AC+test" class="wiki_edit_section">[edit]</a></h1>' . "\n";
+        $output = '<h3><a name="toc-1"></a>Another áéíóú瀠test <a href="edit.php?pageid=&amp;section=Another+%C'.
+            '3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%A7%E2%82%AC+test" class="wiki_edit_section">[edit]</a></h3>' . "\n";
         $toc = '<div class="wiki-toc"><p class="wiki-toc-title">Table of contents</p><p class="wiki-toc-section-1 '.
             'wiki-toc-section">1. <a href="#toc-1">Another áéíóú瀠test <a href="edit.php?pageid=&amp;section=Another+%C'.
             '3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%A7%E2%82%AC+test" class="wiki_edit_section">[edit]</a></a></p></div>';
@@ -176,8 +176,8 @@ class mod_wiki_wikiparser_test extends basic_testcase {
 
         // Test section name with a URL, creole does not support linking links in a heading.
         $input = '= Another http://moodle.org test =';
-        $output = '<h1><a name="toc-1"></a>Another http://moodle.org test <a href="edit.php'.
-            '?pageid=&amp;section=Another+http%3A%2F%2Fmoodle.org+test" class="wiki_edit_section">[edit]</a></h1>' . "\n";
+        $output = '<h3><a name="toc-1"></a>Another http://moodle.org test <a href="edit.php'.
+            '?pageid=&amp;section=Another+http%3A%2F%2Fmoodle.org+test" class="wiki_edit_section">[edit]</a></h3>' . "\n";
         $toc = '<div class="wiki-toc"><p class="wiki-toc-title">Table of contents</p><p class="wiki-toc-section-1 '.
             'wiki-toc-section">1. <a href="#toc-1">Another http://moodle.org test <a href="edit.php?pageid=&amp;section='.
             'Another+http%3A%2F%2Fmoodle.org+test" class="wiki_edit_section">[edit]</a></a></p></div>';
@@ -192,8 +192,8 @@ class mod_wiki_wikiparser_test extends basic_testcase {
 
         // Test section name using HTML entities.
         $input = '= Code & Test =';
-        $output = '<h1><a name="toc-1"></a>Code & Test <a href="edit.php?pageid=&amp;section=Code+%26+Test" '.
-            'class="wiki_edit_section">[edit]</a></h1>' . "\n";
+        $output = '<h3><a name="toc-1"></a>Code & Test <a href="edit.php?pageid=&amp;section=Code+%26+Test" '.
+            'class="wiki_edit_section">[edit]</a></h3>' . "\n";
         $toc = '<div class="wiki-toc"><p class="wiki-toc-title">Table of contents</p><p class="wiki-toc-section-1 '.
             'wiki-toc-section">1. <a href="#toc-1">Code & Test <a href="edit.php?pageid=&amp;section=Code+%26+'.
             'Test" class="wiki_edit_section">[edit]</a></a></p></div>';
@@ -205,8 +205,8 @@ class mod_wiki_wikiparser_test extends basic_testcase {
 
         // Test section name using non-ASCII characters.
         $input = '= Another áéíóú瀠test =';
-        $output = '<h1><a name="toc-1"></a>Another áéíóú瀠test <a href="edit.php?pageid=&amp;section=Another+%C'.
-            '3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%A7%E2%82%AC+test" class="wiki_edit_section">[edit]</a></h1>' . "\n";
+        $output = '<h3><a name="toc-1"></a>Another áéíóú瀠test <a href="edit.php?pageid=&amp;section=Another+%C'.
+            '3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%A7%E2%82%AC+test" class="wiki_edit_section">[edit]</a></h3>' . "\n";
         $toc = '<div class="wiki-toc"><p class="wiki-toc-title">Table of contents</p><p class="wiki-toc-section-1 '.
             'wiki-toc-section">1. <a href="#toc-1">Another áéíóú瀠test <a href="edit.php?pageid=&amp;section=Another+%C'.
             '3%A1%C3%A9%C3%AD%C3%B3%C3%BA%C3%A7%E2%82%AC+test" class="wiki_edit_section">[edit]</a></a></p></div>';
@@ -218,8 +218,8 @@ class mod_wiki_wikiparser_test extends basic_testcase {
 
         // Test section name with a URL, nwiki does not support linking links in a heading.
         $input = '= Another http://moodle.org test =';
-        $output = '<h1><a name="toc-1"></a>Another http://moodle.org test <a href="edit.php'.
-            '?pageid=&amp;section=Another+http%3A%2F%2Fmoodle.org+test" class="wiki_edit_section">[edit]</a></h1>' . "\n";
+        $output = '<h3><a name="toc-1"></a>Another http://moodle.org test <a href="edit.php'.
+            '?pageid=&amp;section=Another+http%3A%2F%2Fmoodle.org+test" class="wiki_edit_section">[edit]</a></h3>' . "\n";
         $toc = '<div class="wiki-toc"><p class="wiki-toc-title">Table of contents</p><p class="wiki-toc-section-1 '.
             'wiki-toc-section">1. <a href="#toc-1">Another http://moodle.org test <a href="edit.php?pageid=&amp;section='.
             'Another+http%3A%2F%2Fmoodle.org+test" class="wiki_edit_section">[edit]</a></a></p></div>';
@@ -228,6 +228,20 @@ class mod_wiki_wikiparser_test extends basic_testcase {
         $this->assertEquals($output, $actual['parsed_text']);
         $this->assertEquals($toc, $actual['toc']);
         $this->assertNotEquals(false, $section);
+
+        // Test section names when headings start with level 3.
+        $input = '<h3>Heading test</h3><h4>Subsection</h4>';
+        $output = '<h3><a name="toc-1"></a>Heading test <a href="edit.php?pageid=&amp;section=Heading+test" '.
+            'class="wiki_edit_section">[edit]</a></h3>'. "\n" . '<h4><a name="toc-2"></a>Subsection</h4>' . "\n";
+        $toc = '<div class="wiki-toc"><p class="wiki-toc-title">Table of contents</p><p class="wiki-toc-section-1 '.
+            'wiki-toc-section">1. <a href="#toc-1">Heading test <a href="edit.php?pageid=&amp;section=Heading+'.
+            'test" class="wiki_edit_section">[edit]</a></a></p><p class="wiki-toc-section-2 wiki-toc-section">'.
+            '1.1. <a href="#toc-2">Subsection</a></p></div>';
+        $section = wiki_parser_proxy::get_section($input, 'html', 'Heading test');
+        $actual = wiki_parser_proxy::parse($input, 'html');
+        $this->assertEquals($output, $actual['parsed_text']);
+        $this->assertEquals($toc, $actual['toc']);
+        $this->assertNotEquals(false, $section);
     }
 
 }