factored out generic commented line dumping
[ikiwiki] / IkiWiki / Setup / Standard.pm
1 #!/usr/bin/perl
2 # Standard ikiwiki setup module.
3 # Parameters to import should be all the standard ikiwiki config stuff.
4
5 package IkiWiki::Setup::Standard;
6
7 use warnings;
8 use strict;
9 use IkiWiki;
10
11 sub import {
12         IkiWiki::Setup::merge($_[1]);
13 }
14
15 sub gendump ($$) {
16         my $class=shift;
17         my $description=shift;
18
19         "#!/usr/bin/perl",
20         "# $description",
21         "#",
22         "# Passing this to ikiwiki --setup will make ikiwiki generate",
23         "# wrappers and build the wiki.",
24         "#",
25         "# Remember to re-run ikiwiki --setup any time you edit this file.",
26         "use IkiWiki::Setup::Standard {",
27         IkiWiki::Setup::commented_dump(\&dumpline),
28         "}";
29 }
30
31 sub dumpline ($$$$) {
32         my $key=shift;
33         my $value=shift;
34         my $type=shift;
35         my $prefix=shift;
36         
37         eval q{use Data::Dumper};
38         error($@) if $@;
39         local $Data::Dumper::Terse=1;
40         local $Data::Dumper::Indent=1;
41         local $Data::Dumper::Pad="\t";
42         local $Data::Dumper::Sortkeys=1;
43         local $Data::Dumper::Quotekeys=0;
44         # only the perl version preserves utf-8 in output
45         local $Data::Dumper::Useperl=1;
46         
47         my $dumpedvalue;
48         if (($type eq 'boolean' || $type eq 'integer') && $value=~/^[0-9]+$/) {
49                 # avoid quotes
50                 $dumpedvalue=$value;
51         }
52         elsif (ref $value eq 'ARRAY' && @$value && ! grep { /[^\S]/ } @$value) {
53                 # dump simple array as qw{}
54                 $dumpedvalue="[qw{".join(" ", @$value)."}]";
55         }
56         else {
57                 $dumpedvalue=Dumper($value);
58                 chomp $dumpedvalue;
59                 if (length $prefix) {
60                         # add to second and subsequent lines
61                         my @lines=split(/\n/, $dumpedvalue);
62                         $dumpedvalue="";
63                         for (my $x=0; $x <= $#lines; $x++) {
64                                 $lines[$x] =~ s/^\t//;
65                                 $dumpedvalue.="\t".($x ? $prefix : "").$lines[$x]."\n";
66                         }
67                 }
68                 $dumpedvalue=~s/^\t//;
69                 chomp $dumpedvalue;
70         }
71         
72         return "\t$prefix$key => $dumpedvalue,";
73 }
74
75 1