Skip to content

Commit 3ece98a

Browse files
committed
fixed complex %INCLUDE% syntax
1 parent d73bf4e commit 3ece98a

File tree

3 files changed

+15
-11
lines changed

3 files changed

+15
-11
lines changed

t/include.txt

+2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
%INCLUDE{"Main.MyTopic"}%
22
%INCLUDE{"AnotherTopic"}%
3+
4+
%INCLUDE{ "%SYSTEMWEB%.UserReports" section="user_sig" user="%DEFAULT%" disablefixlinks="on" }%

t/vars.txt

+1
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@
1818
%JQTABPANE%
1919
%ACTIVATEDPLUGINS%
2020
%SCRIPTURL%
21+
%SYSTEMWEB%
2122

2223
%META:PREFERENCE{name="MYVAR2" type="Set" value="how are you?"}%

twiki2mediawiki.pl

+12-11
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,8 @@
145145
my $man = 'A-Za-z0-9'; # mixed alphanumeric
146146
my $iwSitePattern = "([A-Z][$man]+)";
147147
my $iwPagePattern = "((?:'[^']*')|(?:\"[^\"]*\")|(?:[${man}\_\~\%\/][$man" . '\.\/\+\_\~\,\&\;\:\=\!\?\%\#\@\-]*?))';
148-
my $varPattern = "([A-Za-z0-9_]+)";
148+
my $varPattern = "([${man}_]+)";
149+
my $wwPattern = "[A-Z][a-z]+[A-Z][$man]*";
149150
my @rules= (
150151

151152
# Remove variable-setting lines (they will already have been parsed)
@@ -181,9 +182,9 @@
181182
q#s/^%META.*//g#, # Remove remaining meta tags
182183

183184
# %INCLUDE%
184-
q#s/%INCLUDE\{"?$web\.(.*?)"?\}%/{{:<nop>$1}}/g#, # %INCLUDE{$web.XXX}% --> {{XXX}}
185-
q#s/%INCLUDE\{"?(.*?)"?\}%/{{:<nop>$1}}/g#, # %INCLUDE{XXX}% --> {{XXX}}
186-
q#s/%INCLUDE\{.*?\}%//g#, # remove remaining %INCLUDE{...}%'s
185+
q#s/%INCLUDE{\s*(?:$web\.|)([$man]*?)\s*}%/{{:<nop>$1}}/g#,
186+
q#s/%INCLUDE{\s*"(?:$web\.|)([$man]*?)".*?}%/{{:<nop>$1}}/g#,
187+
q#s/%INCLUDE{.*?}%//g#, # remove remaining %INCLUDE{...}%'s
187188
q#s/%STARTINCLUDE%/<onlyinclude>/#,
188189
q#s/%STOPINCLUDE%/<\/onlyinclude>/#,
189190

@@ -233,10 +234,10 @@
233234
#
234235
# WikiWords
235236
#
236-
q#s/$web\.([A-Z][A-Za-z0-9]*)/makeLink($1)/ge#, # $web.WikiWord -> link
237-
q#s/([A-Z][A-Za-z0-9]*)\.([A-Z][A-Za-z0-9]*)/<nop>$1.<nop>$2/g#, # OtherWebName.WikiWord -> <nop>OtherWebName.<nop>WikiWord
237+
q#s/$web\.([A-Z][${man}]*)/makeLink($1)/ge#, # $web.WikiWord -> link
238+
q#s/([A-Z][${man}]*)\.($wwPattern)/<nop>$1.<nop>$2/g#, # OtherWebName.WikiWord -> <nop>OtherWebName.<nop>WikiWord
238239
q#s/<nop>([A-Z]{1}\w+?[A-Z]{1})/!$1/g#, # change <nop> to ! in front of Twiki words.
239-
q@s/(?:^|(?<=[\s\(]))([A-Z][a-z]+[A-Z][A-Za-z0-9]*)/makeLink($1,spaceWikiWord($1))/ge@, # WikiWord -> link
240+
q@s/(?:^|(?<=[\s\(]))($wwPattern)/makeLink($1,spaceWikiWord($1))/ge@, # WikiWord -> link
240241
q#s/!([A-Z]{1}\w+?[A-Z]{1})/$1/g#, # remove ! in front of Twiki words.
241242
q#s/<nop>//g#, # remove <nop>
242243

@@ -538,7 +539,7 @@
538539
my $interwikiFile = getInterwikiFile();
539540
open INTERWIKI, "<$interwikiFile";
540541
while (<INTERWIKI>) {
541-
if (/^\|\s*([A-Z][A-Za-z0-9]+)\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|.*$/) {
542+
if (/^\|\s*([A-Z][${man}]+)\s*\|\s*(.*?)\s*\|\s*(.*?)\s*\|.*$/) {
542543
my ($prefix, $url, $tooltip) = ($1, $2, $3);
543544
$prefix = lc($prefix);
544545
$url =~ s/\$page/\$1/g;
@@ -577,7 +578,7 @@ sub _translateText {
577578
sub makeLink {
578579
my ($link, $text) = @_;
579580
my $isAnchor = ($link =~ /^#/);
580-
my $isInternal = ($link =~ /^(((Media|File):[A-Za-z0-9\.\-_,]+)|((|[A-Z][A-Za-z0-9]*\.)([A-Za-z0-9]+)(|\#[A-Za-z0-9_]+)))$/);
581+
my $isInternal = ($link =~ /^(((Media|File):[${man}\.\-_,]+)|((|[A-Z][${man}]*\.)([${man}]+)(|\#[${man}_]+)))$/);
581582
my $isInterwiki = ($link =~ /^$iwSitePattern:$iwPagePattern$/);
582583
$link = stripInterwikiQuotes($link) if $isInterwiki;
583584
return ($isAnchor || $isInternal || $isInterwiki) ? makeInternalLink($link,$text) : makeExternalLink($link,$text);
@@ -586,7 +587,7 @@ sub makeLink {
586587
sub makeInternalLink {
587588
my ($link, $text) = @_;
588589
$link =~ s/^$web\.//;
589-
if ($renamePages && $link =~ /^[A-Za-z0-9_]+$/) { $link = spaceWikiWord($link) }
590+
if ($renamePages && $link =~ /^[${man}_]+$/) { $link = spaceWikiWord($link) }
590591
$text = $text || $link;
591592
return ($link eq $text) ? "[[<nop>$link]]" : "[[<nop>$link|".protectWikiWords($text)."]]";
592593
}
@@ -614,7 +615,7 @@ sub stripInterwikiQuotes {
614615

615616
sub protectWikiWords {
616617
my ($text) = @_;
617-
$text =~ s/([A-Z][a-z]+[A-Z][A-Za-z0-9]*)/<nop>$1/g;
618+
$text =~ s/($wwPattern)/<nop>$1/g;
618619
return $text;
619620
}
620621

0 commit comments

Comments
 (0)