Add tests for headings.

This commit is contained in:
Daniel Kraus
2017-08-30 22:23:03 +02:00
parent 9484e5b13d
commit 4c3250e021
2 changed files with 32 additions and 5 deletions

View File

@ -114,14 +114,21 @@ class Splitter {
// wiki headings ("= ... =", "== ... ==" etc.), // wiki headings ("= ... =", "== ... ==" etc.),
// urls ("http://example.com", "[http://example.com]", "[http://example.com Description]", // urls ("http://example.com", "[http://example.com]", "[http://example.com Description]",
// and email addresses ("mail@example.com"). // and email addresses ("mail@example.com").
// Since there is a user option to skip headings, we make this part of the expression
// optional. Note that in order to use preg_split(), it is important to have only one // Match WikiText headings.
// capturing subpattern (which precludes the use of conditional subpatterns). // Since there is a user option to skip headings, we make this part of the
( $this->config->parseHeadings ) ? $delimiter = '' : $delimiter = '^=+.+?=+|'; // expression optional. Note that in order to use preg_split(), it is
// important to have only one capturing subpattern (which precludes the use
// of conditional subpatterns).
// Caveat: This regex pattern should be improved to deal with balanced '='s
// only. However, this would require grouping in the pattern which does not
// agree with preg_split.
$headingsDelimiter = $this->config->parseHeadings ? '' : '^=+[^=]+=+$|';
$urlPattern = '[a-z]+?\:\/\/(?:\S+\.)+\S+(?:\/.*)?'; $urlPattern = '[a-z]+?\:\/\/(?:\S+\.)+\S+(?:\/.*)?';
$this->splitter = '/(' . // exclude from linking: $this->splitter = '/(' . // exclude from linking:
'\[\[.*?\]\]|' . // links '\[\[.*?\]\]|' . // links
$delimiter . // titles (if requested) $headingsDelimiter . // headings (if requested)
$templatesDelimiter . // templates (if requested) $templatesDelimiter . // templates (if requested)
'^ .+?\n|\n .+?\n|\n .+?$|^ .+?$|' . // preformatted text '^ .+?\n|\n .+?\n|\n .+?$|^ .+?$|' . // preformatted text
'<nowiki>.*?<.nowiki>|<code>.*?<\/code>|' . // nowiki/code '<nowiki>.*?<.nowiki>|<code>.*?<\/code>|' . // nowiki/code

View File

@ -73,6 +73,26 @@ class SplitterTest extends MediaWikiTestCase {
'With skipTemplates = true, this may be linked {{mytemplate|param={{transcluded}}}}', 'With skipTemplates = true, this may be linked {{mytemplate|param={{transcluded}}}}',
[ 'With skipTemplates = true, this may be linked ', '{{mytemplate|param={{transcluded}}}}', '' ] [ 'With skipTemplates = true, this may be linked ', '{{mytemplate|param={{transcluded}}}}', '' ]
], ],
[
true, // skipTemplates
true, // parseHeadings
"With parseHeadings = true,\n==a heading may be linked==\n",
[ "With parseHeadings = true,\n==a heading may be linked==\n" ]
],
[
true, // skipTemplates
false, // parseHeadings
// no trailing newline in the following string because it would be swallowed
"With parseHeadings = false,\n==a heading may not be linked==",
[ "With parseHeadings = false,\n", "==a heading may not be linked==", '' ]
],
// Improperly formatted headings cannot be dealt with appropriately for now
// [
// true, // skipTemplates
// false, // parseHeadings
// "With parseHeadings = false,\n==an improperly formatted heading may be linked=\n",
// [ "With parseHeadings = false,\n==an improperly formatted heading may be linked=\n" ]
// ],
]; ];
} }
} }