summaryrefslogtreecommitdiff
path: root/ikiwiki-prefix-directives
diff options
context:
space:
mode:
Diffstat (limited to 'ikiwiki-prefix-directives')
-rwxr-xr-xikiwiki-prefix-directives44
1 files changed, 44 insertions, 0 deletions
diff --git a/ikiwiki-prefix-directives b/ikiwiki-prefix-directives
new file mode 100755
index 000000000..d35c41f30
--- /dev/null
+++ b/ikiwiki-prefix-directives
@@ -0,0 +1,44 @@
+#!/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;
+}