diff options
Diffstat (limited to 'IkiWiki/Setup/Yaml.pm')
-rw-r--r-- | IkiWiki/Setup/Yaml.pm | 49 |
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 |