blob: 1fd23cec55edcd56e2e854d23948ba71f713305c (
plain)
- #!/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();
- }
|