Add the original source packages to maemo, source lenny
[dh-make-perl] / dev / i386 / libmodule-build-perl / libmodule-build-perl-0.2808.01 / lib / Module / Build / YAML.pm
diff --git a/dev/i386/libmodule-build-perl/libmodule-build-perl-0.2808.01/lib/Module/Build/YAML.pm b/dev/i386/libmodule-build-perl/libmodule-build-perl-0.2808.01/lib/Module/Build/YAML.pm
new file mode 100644 (file)
index 0000000..4922bd5
--- /dev/null
@@ -0,0 +1,163 @@
+package Module::Build::YAML;
+
+use strict;
+use vars qw($VERSION);
+$VERSION = '0.2808_01';
+$VERSION = eval $VERSION;
+
+use vars qw($VERSION @EXPORT @EXPORT_OK);
+$VERSION = "0.50";
+@EXPORT = ();
+@EXPORT_OK = qw(Dump Load DumpFile LoadFile);
+
+sub new {
+    my $this = shift;
+    my $class = ref($this) || $this;
+    my $self = {};
+    bless $self, $class;
+    return($self);
+}
+
+sub Dump {
+    shift if ($_[0] eq __PACKAGE__ || ref($_[0]) eq __PACKAGE__);
+    my $yaml = "";
+    foreach my $item (@_) {
+        $yaml .= "---\n";
+        $yaml .= &_yaml_chunk("", $item);
+    }
+    return $yaml;
+}
+
+sub Load {
+    shift if ($_[0] eq __PACKAGE__ || ref($_[0]) eq __PACKAGE__);
+    die "not yet implemented";
+}
+
+# This is basically copied out of YAML.pm and simplified a little.
+sub DumpFile {
+    shift if ($_[0] eq __PACKAGE__ || ref($_[0]) eq __PACKAGE__);
+    my $filename = shift;
+    local $/ = "\n"; # reset special to "sane"
+    my $mode = '>';
+    if ($filename =~ /^\s*(>{1,2})\s*(.*)$/) {
+        ($mode, $filename) = ($1, $2);
+    }
+    open my $OUT, "$mode $filename"
+      or die "Can't open $filename for writing: $!";
+    print $OUT Dump(@_);
+    close $OUT;
+}
+
+# This is basically copied out of YAML.pm and simplified a little.
+sub LoadFile {
+    shift if ($_[0] eq __PACKAGE__ || ref($_[0]) eq __PACKAGE__);
+    my $filename = shift;
+    open my $IN, $filename
+      or die "Can't open $filename for reading: $!";
+    return Load(do { local $/; <$IN> });
+    close $IN;
+}   
+
+sub _yaml_chunk {
+  my ($indent, $values) = @_;
+  my $yaml_chunk = "";
+  my $ref = ref($values);
+  my ($value, @allkeys, %keyseen);
+  if (!$ref) {  # a scalar
+    $yaml_chunk .= &_yaml_value($values) . "\n";
+  }
+  elsif ($ref eq "ARRAY") {
+    foreach $value (@$values) {
+      $yaml_chunk .= "$indent-";
+      $ref = ref($value);
+      if (!$ref) {
+        $yaml_chunk .= " " . &_yaml_value($value) . "\n";
+      }
+      else {
+        $yaml_chunk .= "\n";
+        $yaml_chunk .= &_yaml_chunk("$indent  ", $value);
+      }
+    }
+  }
+  else { # assume "HASH"
+    if ($values->{_order} && ref($values->{_order}) eq "ARRAY") {
+        @allkeys = @{$values->{_order}};
+        $values = { %$values };
+        delete $values->{_order};
+    }
+    push(@allkeys, sort keys %$values);
+    foreach my $key (@allkeys) {
+      next if (!defined $key || $key eq "" || $keyseen{$key});
+      $keyseen{$key} = 1;
+      $yaml_chunk .= "$indent$key:";
+      $value = $values->{$key};
+      $ref = ref($value);
+      if (!$ref) {
+        $yaml_chunk .= " " . &_yaml_value($value) . "\n";
+      }
+      else {
+        $yaml_chunk .= "\n";
+        $yaml_chunk .= &_yaml_chunk("$indent  ", $value);
+      }
+    }
+  }
+  return($yaml_chunk);
+}
+
+sub _yaml_value {
+  my ($value) = @_;
+  # undefs become ~
+  return '~' if not defined $value;
+
+  # empty strings will become empty strings
+  return '""' if $value eq '';
+
+  # allow simple scalars (without embedded quote chars) to be unquoted
+  # (includes $%_+=-\;:,./)
+  return $value if $value !~ /["'`~\n!\@\#^\&\*\(\)\{\}\[\]\|<>\?]/;
+
+  # quote and escape strings with special values
+  return "'$value'"
+    if $value !~ /['`~\n!\#^\&\*\(\)\{\}\[\]\|\?]/;  # nothing but " or @ or < or > (email addresses)
+
+  $value =~ s/\n/\\n/g;    # handle embedded newlines
+  $value =~ s/"/\\"/g;     # handle embedded quotes
+  return qq{"$value"};
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Module::Build::YAML - Provides just enough YAML support so that Module::Build works even if YAML.pm is not installed
+
+=head1 SYNOPSIS
+
+    use Module::Build::YAML;
+
+    ...
+
+=head1 DESCRIPTION
+
+Provides just enough YAML support so that Module::Build works even if YAML.pm is not installed.
+
+Currently, this amounts to the ability to write META.yml files when "perl Build distmeta"
+is executed via the Dump() and DumpFile() functions/methods.
+
+=head1 AUTHOR
+
+Stephen Adkins <spadkins@gmail.com>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2006. Stephen Adkins. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+See L<http://www.perl.com/perl/misc/Artistic.html>
+
+=cut
+