blob: 1fd23cec55edcd56e2e854d23948ba71f713305c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#!/usr/bin/perl -i
use warnings;
use strict;
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}]]"
}
sub prefix_directives {
$/=undef; # process whole files at once
while (<>) {
s{$regex}{handle_directive($1, $2, $3, $4)}eg;
print;
}
}
sub usage {
print STDERR "Usage: ikiwiki-transition type file ...\n";
print STDERR "Currently supported transition types:\n";
print STDERR " prefix_directives\n";
exit 1;
}
usage() unless @ARGV;
my $mode=shift;
if ($mode eq 'prefix_directives') {
prefix_directives(@ARGV);
}
else {
usage();
}
|