X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/0a52e8fd82d80bdd1290f49c3187d3f72db39c75..26db34e1d6df761f068819a4b7b23ef0c35c635d:/IkiWiki/Setup/Standard.pm?ds=sidebyside

diff --git a/IkiWiki/Setup/Standard.pm b/IkiWiki/Setup/Standard.pm
index 7be4f891a..d88dc9e1c 100644
--- a/IkiWiki/Setup/Standard.pm
+++ b/IkiWiki/Setup/Standard.pm
@@ -1,33 +1,102 @@
 #!/usr/bin/perl
 # Standard ikiwiki setup module.
 # Parameters to import should be all the standard ikiwiki config stuff,
-# plus hashes for cgiwrapper and svnwrapper, which specify any differing
-# config stuff for them and cause the wrappers to be made.
+# plus an array of wrappers to set up.
 
 package IkiWiki::Setup::Standard;
 
 use warnings;
 use strict;
+use IkiWiki;
 
-sub import {
-	my %setup=%{$_[1]};
+sub import { #{{{
+	$IkiWiki::Setup::raw_setup=$_[1];
+} #}}}
 
+sub dumpline ($$$$) { #{{{
+	my $key=shift;
+	my $value=shift;
+	my $type=shift;
+	my $prefix=shift;
+	
+	eval q{use Data::Dumper};
+	error($@) if $@;
+	local $Data::Dumper::Terse=1;
+	local $Data::Dumper::Indent=1;
+	local $Data::Dumper::Pad="\t";
+	local $Data::Dumper::Sortkeys=1;
+	local $Data::Dumper::Quotekeys=0;
+	
+	my $dumpedvalue;
+	if ($type eq 'boolean' || $type eq 'integer') {
+		$dumpedvalue=$value;
+	}
+	else {
+		$dumpedvalue=Dumper($value);
+		chomp $dumpedvalue;
+		$dumpedvalue=~s/^\t//;
+	}
+	
+	return "\t$prefix$key=$dumpedvalue,";
+} #}}}
+
+sub dumpvalues ($@) { #{{{
+	my $setup=shift;
+	my @ret;
+	while (@_) {
+		my $key=shift;
+		my %info=%{shift()};
 
-	::debug("generating wrappers..");
-	foreach my $wrapper (@{$setup{wrapper}}) {
-		::gen_wrapper(%::config, %setup, %{$wrapper});
+		next if $info{type} eq "internal";
+		
+		push @ret, "\t# ".$info{description} if exists $info{description};
+		
+		if (exists $setup->{$key} && defined $setup->{$key}) {
+			push @ret, dumpline($key, $setup->{$key}, $info{type}, "");
+			delete $setup->{$key};
+		}
+		elsif (exists $info{default} && defined $info{default}) {
+			push @ret, dumpline($key, $info{default}, $info{type}, "#");
+		}
+		elsif (exists $info{example}) {
+			push @ret, dumpline($key, $info{example}, $info{type}, "#");
+		}
 	}
+	return @ret;
+} #}}}
 
-	::debug("rebuilding wiki..");
-	foreach my $c (keys %setup) {
-		$::config{$c}=::possibly_foolish_untaint($setup{$c})
-			if defined $setup{$c} && ! ref $setup{$c};
+sub dump ($) { #{{{
+	my $file=IkiWiki::possibly_foolish_untaint(shift);
+	
+	my %setup=(%config);
+	my @ret;
+	
+	push @ret, "\t# basic setup";
+	push @ret, dumpvalues(\%setup, IkiWiki::getsetup());
+	push @ret, "";
+
+	foreach my $id (sort keys %{$IkiWiki::hooks{getsetup}}) {
+		# use an array rather than a hash, to preserve order
+		my @s=$IkiWiki::hooks{getsetup}{$id}{call}->();
+		return unless @s;
+		push @ret, "\t# $id plugin";
+		push @ret, dumpvalues(\%setup, @s);
+		push @ret, "";
 	}
-	$::config{rebuild}=1;
-	::refresh();
+	
+	unshift @ret, "#!/usr/bin/perl
+# Setup file for ikiwiki.
+# Passing this to ikiwiki --setup will make ikiwiki generate wrappers and
+# build the wiki.
+#
+# Remember to re-run ikiwiki --setup any time you edit this file.
+
+use IkiWiki::Setup::Standard {";
+	push @ret, "}";
 
-	::debug("done");
-	::saveindex();
-}
+	open (OUT, ">", $file) || die "$file: $!";
+	print OUT "$_\n" foreach @ret;
+	close OUT;
+} #}}}
 
 1