48 lines
960 B
Perl
Executable File
48 lines
960 B
Perl
Executable File
#!/usr/bin/perl -i
|
|
use warnings;
|
|
use strict;
|
|
|
|
undef $/; # process whole files at once
|
|
|
|
my $regex = qr{
|
|
(\\?) # 1: escape?
|
|
\[\[(!?) # directive open; 2: optional prefix
|
|
([-\w]+) # 3: command
|
|
( # 4: the parameters (including initial whitespace)
|
|
\s+
|
|
(?:
|
|
(?:[-\w]+=)? # named parameter key?
|
|
(?:
|
|
""".*?""" # triple-quoted value
|
|
|
|
|
"[^"]+" # single-quoted value
|
|
|
|
|
[^\s\]]+ # unquoted value
|
|
)
|
|
\s* # whitespace or end
|
|
# of directive
|
|
)
|
|
*) # 0 or more parameters
|
|
\]\] # directive closed
|
|
}sx;
|
|
|
|
sub handle_directive {
|
|
my $escape = shift;
|
|
my $prefix = shift;
|
|
my $directive = shift;
|
|
my $args = shift;
|
|
|
|
if (length $escape) {
|
|
return "${escape}[[${prefix}${directive}${args}]]"
|
|
}
|
|
if ($directive =~ m/^(if|more|table|template|toggleable)$/) {
|
|
$args =~ s{$regex}{handle_directive($1, $2, $3, $4)}eg;
|
|
}
|
|
return "[[!${directive}${args}]]"
|
|
}
|
|
|
|
while (<>) {
|
|
s{$regex}{handle_directive($1, $2, $3, $4)}eg;
|
|
print;
|
|
}
|