mirror of
https://github.com/diocloid/LinkTitles.git
synced 2025-07-13 09:49:31 +02:00
Add tests for headings.
This commit is contained in:
@ -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
|
||||||
|
@ -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" ]
|
||||||
|
// ],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user