ikiwiki/ikiwiki-prefix-directives

48 lines
960 B
Plaintext
Raw Normal View History

#!/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;
}