aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/Setup/Yaml.pm
diff options
context:
space:
mode:
Diffstat (limited to 'IkiWiki/Setup/Yaml.pm')
-rw-r--r--IkiWiki/Setup/Yaml.pm49
1 files changed, 49 insertions, 0 deletions
diff --git a/IkiWiki/Setup/Yaml.pm b/IkiWiki/Setup/Yaml.pm
new file mode 100644
index 000000000..6bf20f480
--- /dev/null
+++ b/IkiWiki/Setup/Yaml.pm
@@ -0,0 +1,49 @@
+#!/usr/bin/perl
+
+package IkiWiki::Setup::Yaml;
+
+use warnings;
+use strict;
+use IkiWiki;
+use Encode;
+
+sub loaddump ($$) {
+ my $class=shift;
+ my $content=shift;
+
+ eval q{use YAML::XS};
+ die $@ if $@;
+ IkiWiki::Setup::merge(Load(encode_utf8($content)));
+}
+
+sub gendump ($@) {
+ my $class=shift;
+
+ "# IkiWiki::Setup::Yaml - YAML formatted setup file",
+ "#",
+ (map { "# $_" } @_),
+ "#",
+ IkiWiki::Setup::commented_dump(\&dumpline, "")
+}
+
+
+sub dumpline ($$$$) {
+ my $key=shift;
+ my $value=shift;
+ my $type=shift;
+ my $prefix=shift;
+
+ eval q{use YAML::XS};
+ die $@ if $@;
+ $YAML::XS::QuoteNumericStrings=0;
+
+ my $dump=decode_utf8(Dump({$key => $value}));
+ $dump=~s/^---\n//; # yaml header, we don't want
+ chomp $dump;
+ if (length $prefix) {
+ $dump=join("\n", map { $prefix.$_ } split(/\n/, $dump));
+ }
+ return $dump;
+}
+
+1