45 lines
939 B
Plaintext
45 lines
939 B
Plaintext
|
#!/usr/bin/perl -i
|
||
|
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;
|
||
|
}
|