aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatěj Cepl <mcepl@redhat.com>2012-02-15 23:59:42 +0100
committerMatěj Cepl <mcepl@redhat.com>2012-02-16 00:24:01 +0100
commitd7e73ec4c238d0eb1c5493bb90c022d683123296 (patch)
treed81f22a220c40fd7528e098dd0d22060410415e0
downloadyamlish-d7e73ec4c238d0eb1c5493bb90c022d683123296.tar.gz
Initial commit with skeleton of the project.
Also added original Perl, together with PHP and Javascript ports.
-rw-r--r--.gitignore2
-rw-r--r--.gitmodules3
-rw-r--r--Data-YAML-0.0.6/Changes14
-rw-r--r--Data-YAML-0.0.6/MANIFEST16
-rw-r--r--Data-YAML-0.0.6/META.yml21
-rw-r--r--Data-YAML-0.0.6/Makefile833
-rw-r--r--Data-YAML-0.0.6/Makefile.PL22
-rw-r--r--Data-YAML-0.0.6/README22
-rw-r--r--Data-YAML-0.0.6/SIGNATURE38
-rw-r--r--Data-YAML-0.0.6/blib/arch/.exists0
-rw-r--r--Data-YAML-0.0.6/blib/arch/auto/Data/YAML/.exists0
-rw-r--r--Data-YAML-0.0.6/blib/bin/.exists0
-rw-r--r--Data-YAML-0.0.6/blib/lib/Data/.exists0
-rw-r--r--Data-YAML-0.0.6/blib/lib/Data/YAML.pm145
-rw-r--r--Data-YAML-0.0.6/blib/lib/Data/YAML/Reader.pm422
-rw-r--r--Data-YAML-0.0.6/blib/lib/Data/YAML/Writer.pm269
-rw-r--r--Data-YAML-0.0.6/blib/lib/auto/Data/YAML/.exists0
-rw-r--r--Data-YAML-0.0.6/blib/man1/.exists0
-rw-r--r--Data-YAML-0.0.6/blib/man3/.exists0
-rw-r--r--Data-YAML-0.0.6/blib/man3/Data::YAML.3pm264
-rw-r--r--Data-YAML-0.0.6/blib/man3/Data::YAML::Reader.3pm243
-rw-r--r--Data-YAML-0.0.6/blib/man3/Data::YAML::Writer.3pm261
-rw-r--r--Data-YAML-0.0.6/blib/script/.exists0
-rw-r--r--Data-YAML-0.0.6/lib/Data/YAML.pm145
-rw-r--r--Data-YAML-0.0.6/lib/Data/YAML/Reader.pm422
-rw-r--r--Data-YAML-0.0.6/lib/Data/YAML/Writer.pm269
-rw-r--r--Data-YAML-0.0.6/pm_to_blib0
-rw-r--r--Data-YAML-0.0.6/t/00.load.t8
-rw-r--r--Data-YAML-0.0.6/t/10-input.t103
-rw-r--r--Data-YAML-0.0.6/t/20-reader.t419
-rw-r--r--Data-YAML-0.0.6/t/30-output.t107
-rw-r--r--Data-YAML-0.0.6/t/40-writer.t200
-rw-r--r--Data-YAML-0.0.6/t/pod-coverage.t9
-rw-r--r--Data-YAML-0.0.6/t/pod.t6
-rw-r--r--README6
-rw-r--r--test/00.load.py10
-rw-r--r--test/10-input.py103
-rw-r--r--test/20-reader.py419
-rw-r--r--test/30-output.py107
-rw-r--r--test/40-writer.py200
-rw-r--r--test/pod-coverage.py9
-rw-r--r--test/pod.py6
m---------yamlish.js0
-rw-r--r--yamlish.py1
-rw-r--r--yamlishwriter-php-v0.0.1/Changes3
-rw-r--r--yamlishwriter-php-v0.0.1/MANIFEST10
-rw-r--r--yamlishwriter-php-v0.0.1/Makefile21
-rw-r--r--yamlishwriter-php-v0.0.1/README33
-rwxr-xr-xyamlishwriter-php-v0.0.1/dist.sh16
-rw-r--r--yamlishwriter-php-v0.0.1/lib/yamlishwriter.php125
-rw-r--r--yamlishwriter-php-v0.0.1/t/00-load.php9
-rw-r--r--yamlishwriter-php-v0.0.1/t/10-writer.php180
-rw-r--r--yamlishwriter-php-v0.0.1/t/harness.t29
-rw-r--r--yamlishwriter-php-v0.0.1/t/lib/TestLite.php79
54 files changed, 5629 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e388c1d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*.py[ocw]
+*~
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..a514517
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "yamlish.js"]
+ path = yamlish.js
+ url = git://github.com/isaacs/yamlish.git
diff --git a/Data-YAML-0.0.6/Changes b/Data-YAML-0.0.6/Changes
new file mode 100644
index 0000000..7dd53ea
--- /dev/null
+++ b/Data-YAML-0.0.6/Changes
@@ -0,0 +1,14 @@
+Revision history for Data-YAML
+
+0.0.3 2007-03-17
+ - Initial release.
+
+0.0.4 2007-03-17
+ - Added tests for input / output modes
+ - Added the tests to MANIFEST. D'oh.
+
+0.0.5 2007-03-20
+
+0.0.6 2009-03-07
+ - Fix ESCAPE_CHAR regex. Refs #31804.
+
diff --git a/Data-YAML-0.0.6/MANIFEST b/Data-YAML-0.0.6/MANIFEST
new file mode 100644
index 0000000..cd73769
--- /dev/null
+++ b/Data-YAML-0.0.6/MANIFEST
@@ -0,0 +1,16 @@
+Changes
+lib/Data/YAML.pm
+lib/Data/YAML/Reader.pm
+lib/Data/YAML/Writer.pm
+Makefile.PL
+MANIFEST
+README
+t/00.load.t
+t/10-input.t
+t/20-reader.t
+t/30-output.t
+t/40-writer.t
+t/pod-coverage.t
+t/pod.t
+META.yml Module meta-data (added by MakeMaker)
+SIGNATURE Public-key signature (added by MakeMaker)
diff --git a/Data-YAML-0.0.6/META.yml b/Data-YAML-0.0.6/META.yml
new file mode 100644
index 0000000..de934af
--- /dev/null
+++ b/Data-YAML-0.0.6/META.yml
@@ -0,0 +1,21 @@
+--- #YAML:1.0
+name: Data-YAML
+version: 0.0.6
+abstract: Easy YAML serialisation of Perl data structures
+author:
+ - Andy Armstrong <andy@hexten.net>
+license: perl
+distribution_type: module
+configure_requires:
+ ExtUtils::MakeMaker: 0
+requires:
+ Test::More: 0
+ version: 0
+no_index:
+ directory:
+ - t
+ - inc
+generated_by: ExtUtils::MakeMaker version 6.48
+meta-spec:
+ url: http://module-build.sourceforge.net/META-spec-v1.4.html
+ version: 1.4
diff --git a/Data-YAML-0.0.6/Makefile b/Data-YAML-0.0.6/Makefile
new file mode 100644
index 0000000..2364db0
--- /dev/null
+++ b/Data-YAML-0.0.6/Makefile
@@ -0,0 +1,833 @@
+# This Makefile is for the Data::YAML extension to perl.
+#
+# It was generated automatically by MakeMaker version
+# 6.55_02 (Revision: 65502) from the contents of
+# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
+#
+# ANY CHANGES MADE HERE WILL BE LOST!
+#
+# MakeMaker ARGV: ()
+#
+
+# MakeMaker Parameters:
+
+# ABSTRACT_FROM => q[lib/Data/YAML.pm]
+# AUTHOR => q[Andy Armstrong <andy@hexten.net>]
+# BUILD_REQUIRES => { }
+# LICENSE => q[perl]
+# NAME => q[Data::YAML]
+# PL_FILES => { }
+# PREREQ_PM => { Test::More=>q[0], version=>q[0] }
+# SIGN => q[1]
+# VERSION_FROM => q[lib/Data/YAML.pm]
+# clean => { FILES=>q[Data-YAML-*] }
+# dist => { COMPRESS=>q[gzip -9f], SUFFIX=>q[gz] }
+
+# --- MakeMaker post_initialize section:
+
+
+# --- MakeMaker const_config section:
+
+# These definitions are from config.sh (via /usr/lib64/perl5/Config.pm).
+# They may have been overridden via Makefile.PL or on the command line.
+AR = ar
+CC = gcc
+CCCDLFLAGS = -fPIC
+CCDLFLAGS = -Wl,-E -Wl,-rpath,/usr/lib64/perl5/CORE
+DLEXT = so
+DLSRC = dl_dlopen.xs
+EXE_EXT =
+FULL_AR = /usr/bin/ar
+LD = gcc
+LDDLFLAGS = -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic
+LDFLAGS = -fstack-protector
+LIBC =
+LIB_EXT = .a
+OBJ_EXT = .o
+OSNAME = linux
+OSVERS = 2.6.18-274.3.1.el5
+RANLIB = :
+SITELIBEXP = /usr/local/share/perl5
+SITEARCHEXP = /usr/local/lib64/perl5
+SO = so
+VENDORARCHEXP = /usr/lib64/perl5/vendor_perl
+VENDORLIBEXP = /usr/share/perl5/vendor_perl
+
+
+# --- MakeMaker constants section:
+AR_STATIC_ARGS = cr
+DIRFILESEP = /
+DFSEP = $(DIRFILESEP)
+NAME = Data::YAML
+NAME_SYM = Data_YAML
+VERSION = 0.0.6
+VERSION_MACRO = VERSION
+VERSION_SYM = 0_0_6
+DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+XS_VERSION = 0.0.6
+XS_VERSION_MACRO = XS_VERSION
+XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
+INST_ARCHLIB = blib/arch
+INST_SCRIPT = blib/script
+INST_BIN = blib/bin
+INST_LIB = blib/lib
+INST_MAN1DIR = blib/man1
+INST_MAN3DIR = blib/man3
+MAN1EXT = 1
+MAN3EXT = 3pm
+INSTALLDIRS = site
+DESTDIR =
+PREFIX = $(SITEPREFIX)
+PERLPREFIX = /usr
+SITEPREFIX = /usr/local
+VENDORPREFIX = /usr
+INSTALLPRIVLIB = /usr/share/perl5
+DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
+INSTALLSITELIB = /usr/local/share/perl5
+DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
+INSTALLVENDORLIB = /usr/share/perl5/vendor_perl
+DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
+INSTALLARCHLIB = /usr/lib64/perl5
+DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
+INSTALLSITEARCH = /usr/local/lib64/perl5
+DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
+INSTALLVENDORARCH = /usr/lib64/perl5/vendor_perl
+DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
+INSTALLBIN = /usr/bin
+DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN)
+INSTALLSITEBIN = /usr/local/bin
+DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN)
+INSTALLVENDORBIN = /usr/bin
+DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN)
+INSTALLSCRIPT = /usr/bin
+DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT)
+INSTALLSITESCRIPT = /usr/local/bin
+DESTINSTALLSITESCRIPT = $(DESTDIR)$(INSTALLSITESCRIPT)
+INSTALLVENDORSCRIPT = /usr/bin
+DESTINSTALLVENDORSCRIPT = $(DESTDIR)$(INSTALLVENDORSCRIPT)
+INSTALLMAN1DIR = /usr/share/man/man1
+DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR)
+INSTALLSITEMAN1DIR = /usr/local/share/man/man1
+DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR)
+INSTALLVENDORMAN1DIR = /usr/share/man/man1
+DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR)
+INSTALLMAN3DIR = /usr/share/man/man3
+DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR)
+INSTALLSITEMAN3DIR = /usr/local/share/man/man3
+DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
+INSTALLVENDORMAN3DIR = /usr/share/man/man3
+DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
+PERL_LIB = /usr/share/perl5
+PERL_ARCHLIB = /usr/lib64/perl5
+LIBPERL_A = libperl.a
+FIRST_MAKEFILE = Makefile
+MAKEFILE_OLD = Makefile.old
+MAKE_APERL_FILE = Makefile.aperl
+PERLMAINCC = $(CC)
+PERL_INC = /usr/lib64/perl5/CORE
+PERL = /usr/bin/perl
+FULLPERL = /usr/bin/perl
+ABSPERL = $(PERL)
+PERLRUN = $(PERL)
+FULLPERLRUN = $(FULLPERL)
+ABSPERLRUN = $(ABSPERL)
+PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+PERL_CORE = 0
+PERM_DIR = 755
+PERM_RW = 644
+PERM_RWX = 755
+
+MAKEMAKER = /usr/share/perl5/ExtUtils/MakeMaker.pm
+MM_VERSION = 6.55_02
+MM_REVISION = 65502
+
+# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
+# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
+# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
+# DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
+MAKE = make
+FULLEXT = Data/YAML
+BASEEXT = YAML
+PARENT_NAME = Data
+DLBASE = $(BASEEXT)
+VERSION_FROM = lib/Data/YAML.pm
+OBJECT =
+LDFROM = $(OBJECT)
+LINKTYPE = dynamic
+BOOTDEP =
+
+# Handy lists of source code files:
+XS_FILES =
+C_FILES =
+O_FILES =
+H_FILES =
+MAN1PODS =
+MAN3PODS = lib/Data/YAML.pm \
+ lib/Data/YAML/Reader.pm \
+ lib/Data/YAML/Writer.pm
+
+# Where is the Config information that we are using/depend on
+CONFIGDEP = $(PERL_ARCHLIB)$(DFSEP)Config.pm $(PERL_INC)$(DFSEP)config.h
+
+# Where to build things
+INST_LIBDIR = $(INST_LIB)/Data
+INST_ARCHLIBDIR = $(INST_ARCHLIB)/Data
+
+INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT)
+INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
+
+INST_STATIC =
+INST_DYNAMIC =
+INST_BOOT =
+
+# Extra linker info
+EXPORT_LIST =
+PERL_ARCHIVE =
+PERL_ARCHIVE_AFTER =
+
+
+TO_INST_PM = lib/Data/YAML.pm \
+ lib/Data/YAML/Reader.pm \
+ lib/Data/YAML/Writer.pm
+
+PM_TO_BLIB = lib/Data/YAML/Reader.pm \
+ blib/lib/Data/YAML/Reader.pm \
+ lib/Data/YAML.pm \
+ blib/lib/Data/YAML.pm \
+ lib/Data/YAML/Writer.pm \
+ blib/lib/Data/YAML/Writer.pm
+
+
+# --- MakeMaker platform_constants section:
+MM_Unix_VERSION = 6.55_02
+PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
+
+
+# --- MakeMaker tool_autosplit section:
+# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
+AUTOSPLITFILE = $(ABSPERLRUN) -e 'use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)' --
+
+
+
+# --- MakeMaker tool_xsubpp section:
+
+
+# --- MakeMaker tools_other section:
+SHELL = /bin/sh
+CHMOD = chmod
+CP = cp
+MV = mv
+NOOP = $(TRUE)
+NOECHO = @
+RM_F = rm -f
+RM_RF = rm -rf
+TEST_F = test -f
+TOUCH = touch
+UMASK_NULL = umask 0
+DEV_NULL = > /dev/null 2>&1
+MKPATH = $(ABSPERLRUN) -MExtUtils::Command -e 'mkpath' --
+EQUALIZE_TIMESTAMP = $(ABSPERLRUN) -MExtUtils::Command -e 'eqtime' --
+FALSE = false
+TRUE = true
+ECHO = echo
+ECHO_N = echo -n
+UNINST = 0
+VERBINST = 0
+MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install([ from_to => {@ARGV}, verbose => '\''$(VERBINST)'\'', uninstall_shadows => '\''$(UNINST)'\'', dir_mode => '\''$(PERM_DIR)'\'' ]);' --
+DOC_INSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'perllocal_install' --
+UNINSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'uninstall' --
+WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'warn_if_old_packlist' --
+MACROSTART =
+MACROEND =
+USEMAKEFILE = -f
+FIXIN = $(ABSPERLRUN) -MExtUtils::MY -e 'MY->fixin(shift)' --
+
+
+# --- MakeMaker makemakerdflt section:
+makemakerdflt : all
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dist section:
+TAR = tar
+TARFLAGS = cvf
+ZIP = zip
+ZIPFLAGS = -r
+COMPRESS = gzip -9f
+SUFFIX = gz
+SHAR = shar
+PREOP = $(NOECHO) $(NOOP)
+POSTOP = $(NOECHO) $(NOOP)
+TO_UNIX = $(NOECHO) $(NOOP)
+CI = ci -u
+RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+DIST_CP = best
+DIST_DEFAULT = tardist
+DISTNAME = Data-YAML
+DISTVNAME = Data-YAML-0.0.6
+
+
+# --- MakeMaker macro section:
+
+
+# --- MakeMaker depend section:
+
+
+# --- MakeMaker cflags section:
+
+
+# --- MakeMaker const_loadlibs section:
+
+
+# --- MakeMaker const_cccmd section:
+
+
+# --- MakeMaker post_constants section:
+
+
+# --- MakeMaker pasthru section:
+
+PASTHRU = LIBPERL_A="$(LIBPERL_A)"\
+ LINKTYPE="$(LINKTYPE)"\
+ PREFIX="$(PREFIX)"
+
+
+# --- MakeMaker special_targets section:
+.SUFFIXES : .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)
+
+.PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir
+
+
+
+# --- MakeMaker c_o section:
+
+
+# --- MakeMaker xs_c section:
+
+
+# --- MakeMaker xs_o section:
+
+
+# --- MakeMaker top_targets section:
+all :: pure_all manifypods
+ $(NOECHO) $(NOOP)
+
+
+pure_all :: config pm_to_blib subdirs linkext
+ $(NOECHO) $(NOOP)
+
+subdirs :: $(MYEXTLIB)
+ $(NOECHO) $(NOOP)
+
+config :: $(FIRST_MAKEFILE) blibdirs
+ $(NOECHO) $(NOOP)
+
+help :
+ perldoc ExtUtils::MakeMaker
+
+
+# --- MakeMaker blibdirs section:
+blibdirs : $(INST_LIBDIR)$(DFSEP).exists $(INST_ARCHLIB)$(DFSEP).exists $(INST_AUTODIR)$(DFSEP).exists $(INST_ARCHAUTODIR)$(DFSEP).exists $(INST_BIN)$(DFSEP).exists $(INST_SCRIPT)$(DFSEP).exists $(INST_MAN1DIR)$(DFSEP).exists $(INST_MAN3DIR)$(DFSEP).exists
+ $(NOECHO) $(NOOP)
+
+# Backwards compat with 6.18 through 6.25
+blibdirs.ts : blibdirs
+ $(NOECHO) $(NOOP)
+
+$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_LIBDIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_LIBDIR)
+ $(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists
+
+$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_ARCHLIB)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHLIB)
+ $(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists
+
+$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_AUTODIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_AUTODIR)
+ $(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists
+
+$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHAUTODIR)
+ $(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists
+
+$(INST_BIN)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_BIN)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_BIN)
+ $(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists
+
+$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_SCRIPT)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_SCRIPT)
+ $(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists
+
+$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_MAN1DIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN1DIR)
+ $(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists
+
+$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL
+ $(NOECHO) $(MKPATH) $(INST_MAN3DIR)
+ $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN3DIR)
+ $(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists
+
+
+
+# --- MakeMaker linkext section:
+
+linkext :: $(LINKTYPE)
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dlsyms section:
+
+
+# --- MakeMaker dynamic section:
+
+dynamic :: $(FIRST_MAKEFILE) $(INST_DYNAMIC) $(INST_BOOT)
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dynamic_bs section:
+
+BOOTSTRAP =
+
+
+# --- MakeMaker dynamic_lib section:
+
+
+# --- MakeMaker static section:
+
+## $(INST_PM) has been moved to the all: target.
+## It remains here for awhile to allow for old usage: "make static"
+static :: $(FIRST_MAKEFILE) $(INST_STATIC)
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker static_lib section:
+
+
+# --- MakeMaker manifypods section:
+
+POD2MAN_EXE = $(PERLRUN) "-MExtUtils::Command::MM" -e pod2man "--"
+POD2MAN = $(POD2MAN_EXE)
+
+
+manifypods : pure_all \
+ lib/Data/YAML/Reader.pm \
+ lib/Data/YAML.pm \
+ lib/Data/YAML/Writer.pm
+ $(NOECHO) $(POD2MAN) --section=3 --perm_rw=$(PERM_RW) \
+ lib/Data/YAML/Reader.pm $(INST_MAN3DIR)/Data::YAML::Reader.$(MAN3EXT) \
+ lib/Data/YAML.pm $(INST_MAN3DIR)/Data::YAML.$(MAN3EXT) \
+ lib/Data/YAML/Writer.pm $(INST_MAN3DIR)/Data::YAML::Writer.$(MAN3EXT)
+
+
+
+
+# --- MakeMaker processPL section:
+
+
+# --- MakeMaker installbin section:
+
+
+# --- MakeMaker subdirs section:
+
+# none
+
+# --- MakeMaker clean_subdirs section:
+clean_subdirs :
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker clean section:
+
+# Delete temporary files but do not touch installed files. We don't delete
+# the Makefile here so a later make realclean still has a makefile to use.
+
+clean :: clean_subdirs
+ - $(RM_F) \
+ *$(LIB_EXT) core \
+ core.[0-9] $(INST_ARCHAUTODIR)/extralibs.all \
+ core.[0-9][0-9] $(BASEEXT).bso \
+ pm_to_blib.ts core.[0-9][0-9][0-9][0-9] \
+ $(BASEEXT).x $(BOOTSTRAP) \
+ perl$(EXE_EXT) tmon.out \
+ *$(OBJ_EXT) pm_to_blib \
+ $(INST_ARCHAUTODIR)/extralibs.ld blibdirs.ts \
+ core.[0-9][0-9][0-9][0-9][0-9] *perl.core \
+ core.*perl.*.? $(MAKE_APERL_FILE) \
+ perl $(BASEEXT).def \
+ core.[0-9][0-9][0-9] mon.out \
+ lib$(BASEEXT).def perlmain.c \
+ perl.exe so_locations \
+ $(BASEEXT).exp
+ - $(RM_RF) \
+ Data-YAML-* blib
+ - $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) $(DEV_NULL)
+
+
+# --- MakeMaker realclean_subdirs section:
+realclean_subdirs :
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker realclean section:
+# Delete temporary files (via clean) and also delete dist files
+realclean purge :: clean realclean_subdirs
+ - $(RM_F) \
+ $(MAKEFILE_OLD) $(FIRST_MAKEFILE)
+ - $(RM_RF) \
+ $(DISTVNAME)
+
+
+# --- MakeMaker metafile section:
+metafile : create_distdir
+ $(NOECHO) $(ECHO) Generating META.yml
+ $(NOECHO) $(ECHO) '--- #YAML:1.0' > META_new.yml
+ $(NOECHO) $(ECHO) 'name: Data-YAML' >> META_new.yml
+ $(NOECHO) $(ECHO) 'version: 0.0.6' >> META_new.yml
+ $(NOECHO) $(ECHO) 'abstract: Easy YAML serialisation of Perl data structures' >> META_new.yml
+ $(NOECHO) $(ECHO) 'author:' >> META_new.yml
+ $(NOECHO) $(ECHO) ' - Andy Armstrong <andy@hexten.net>' >> META_new.yml
+ $(NOECHO) $(ECHO) 'license: perl' >> META_new.yml
+ $(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml
+ $(NOECHO) $(ECHO) 'configure_requires:' >> META_new.yml
+ $(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml
+ $(NOECHO) $(ECHO) 'build_requires:' >> META_new.yml
+ $(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml
+ $(NOECHO) $(ECHO) 'requires:' >> META_new.yml
+ $(NOECHO) $(ECHO) ' Test::More: 0' >> META_new.yml
+ $(NOECHO) $(ECHO) ' version: 0' >> META_new.yml
+ $(NOECHO) $(ECHO) 'no_index:' >> META_new.yml
+ $(NOECHO) $(ECHO) ' directory:' >> META_new.yml
+ $(NOECHO) $(ECHO) ' - t' >> META_new.yml
+ $(NOECHO) $(ECHO) ' - inc' >> META_new.yml
+ $(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.55_02' >> META_new.yml
+ $(NOECHO) $(ECHO) 'meta-spec:' >> META_new.yml
+ $(NOECHO) $(ECHO) ' url: http://module-build.sourceforge.net/META-spec-v1.4.html' >> META_new.yml
+ $(NOECHO) $(ECHO) ' version: 1.4' >> META_new.yml
+ -$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml
+
+
+# --- MakeMaker signature section:
+signature :
+ cpansign -s
+
+
+# --- MakeMaker dist_basics section:
+distclean :: realclean distcheck
+ $(NOECHO) $(NOOP)
+
+distcheck :
+ $(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck
+
+skipcheck :
+ $(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck
+
+manifest :
+ $(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest
+
+veryclean : realclean
+ $(RM_F) *~ */*~ *.orig */*.orig *.bak */*.bak *.old */*.old
+
+
+
+# --- MakeMaker dist_core section:
+
+dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE)
+ $(NOECHO) $(ABSPERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''' \
+ -e ' if -e '\''$(VERSION_FROM)'\'' and -M '\''$(VERSION_FROM)'\'' < -M '\''$(FIRST_MAKEFILE)'\'';' --
+
+tardist : $(DISTVNAME).tar$(SUFFIX)
+ $(NOECHO) $(NOOP)
+
+uutardist : $(DISTVNAME).tar$(SUFFIX)
+ uuencode $(DISTVNAME).tar$(SUFFIX) $(DISTVNAME).tar$(SUFFIX) > $(DISTVNAME).tar$(SUFFIX)_uu
+
+$(DISTVNAME).tar$(SUFFIX) : distdir
+ $(PREOP)
+ $(TO_UNIX)
+ $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
+ $(RM_RF) $(DISTVNAME)
+ $(COMPRESS) $(DISTVNAME).tar
+ $(POSTOP)
+
+zipdist : $(DISTVNAME).zip
+ $(NOECHO) $(NOOP)
+
+$(DISTVNAME).zip : distdir
+ $(PREOP)
+ $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
+ $(RM_RF) $(DISTVNAME)
+ $(POSTOP)
+
+shdist : distdir
+ $(PREOP)
+ $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
+ $(RM_RF) $(DISTVNAME)
+ $(POSTOP)
+
+
+# --- MakeMaker distdir section:
+create_distdir :
+ $(RM_RF) $(DISTVNAME)
+ $(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \
+ -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
+
+distdir : create_distdir distmeta distsignature
+ $(NOECHO) $(NOOP)
+
+
+
+# --- MakeMaker dist_test section:
+disttest : distdir
+ cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL
+ cd $(DISTVNAME) && $(MAKE) $(PASTHRU)
+ cd $(DISTVNAME) && $(MAKE) test $(PASTHRU)
+
+
+
+# --- MakeMaker dist_ci section:
+
+ci :
+ $(PERLRUN) "-MExtUtils::Manifest=maniread" \
+ -e "@all = keys %{ maniread() };" \
+ -e "print(qq{Executing $(CI) @all\n}); system(qq{$(CI) @all});" \
+ -e "print(qq{Executing $(RCS_LABEL) ...\n}); system(qq{$(RCS_LABEL) @all});"
+
+
+# --- MakeMaker distmeta section:
+distmeta : create_distdir metafile
+ $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \
+ -e ' or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"' --
+
+
+
+# --- MakeMaker distsignature section:
+distsignature : create_distdir
+ $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \
+ -e ' or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"' --
+ $(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE
+ cd $(DISTVNAME) && cpansign -s
+
+
+
+# --- MakeMaker install section:
+
+install :: pure_install doc_install
+ $(NOECHO) $(NOOP)
+
+install_perl :: pure_perl_install doc_perl_install
+ $(NOECHO) $(NOOP)
+
+install_site :: pure_site_install doc_site_install
+ $(NOECHO) $(NOOP)
+
+install_vendor :: pure_vendor_install doc_vendor_install
+ $(NOECHO) $(NOOP)
+
+pure_install :: pure_$(INSTALLDIRS)_install
+ $(NOECHO) $(NOOP)
+
+doc_install :: doc_$(INSTALLDIRS)_install
+ $(NOECHO) $(NOOP)
+
+pure__install : pure_site_install
+ $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+doc__install : doc_site_install
+ $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+pure_perl_install :: all
+ $(NOECHO) $(MOD_INSTALL) \
+ read $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist \
+ write $(DESTINSTALLARCHLIB)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(DESTINSTALLPRIVLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
+ $(INST_BIN) $(DESTINSTALLBIN) \
+ $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+ $(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLMAN3DIR)
+ $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+ $(SITEARCHEXP)/auto/$(FULLEXT)
+
+
+pure_site_install :: all
+ $(NOECHO) $(MOD_INSTALL) \
+ read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
+ write $(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(DESTINSTALLSITELIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \
+ $(INST_BIN) $(DESTINSTALLSITEBIN) \
+ $(INST_SCRIPT) $(DESTINSTALLSITESCRIPT) \
+ $(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR)
+ $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+ $(PERL_ARCHLIB)/auto/$(FULLEXT)
+
+pure_vendor_install :: all
+ $(NOECHO) $(MOD_INSTALL) \
+ read $(VENDORARCHEXP)/auto/$(FULLEXT)/.packlist \
+ write $(DESTINSTALLVENDORARCH)/auto/$(FULLEXT)/.packlist \
+ $(INST_LIB) $(DESTINSTALLVENDORLIB) \
+ $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
+ $(INST_BIN) $(DESTINSTALLVENDORBIN) \
+ $(INST_SCRIPT) $(DESTINSTALLVENDORSCRIPT) \
+ $(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
+ $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
+
+doc_perl_install :: all
+ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+ -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+ -$(NOECHO) $(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLPRIVLIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+doc_site_install :: all
+ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+ -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+ -$(NOECHO) $(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLSITELIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+doc_vendor_install :: all
+ $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
+ -$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
+ -$(NOECHO) $(DOC_INSTALL) \
+ "Module" "$(NAME)" \
+ "installed into" "$(INSTALLVENDORLIB)" \
+ LINKTYPE "$(LINKTYPE)" \
+ VERSION "$(VERSION)" \
+ EXE_FILES "$(EXE_FILES)" \
+ >> $(DESTINSTALLARCHLIB)/perllocal.pod
+
+
+uninstall :: uninstall_from_$(INSTALLDIRS)dirs
+ $(NOECHO) $(NOOP)
+
+uninstall_from_perldirs ::
+ $(NOECHO) $(UNINSTALL) $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_sitedirs ::
+ $(NOECHO) $(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_vendordirs ::
+ $(NOECHO) $(UNINSTALL) $(VENDORARCHEXP)/auto/$(FULLEXT)/.packlist
+
+
+# --- MakeMaker force section:
+# Phony target to force checking subdirectories.
+FORCE :
+ $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker perldepend section:
+
+
+# --- MakeMaker makefile section:
+# We take a very conservative approach here, but it's worth it.
+# We move Makefile to Makefile.old here to avoid gnu make looping.
+$(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
+ $(NOECHO) $(ECHO) "Makefile out-of-date with respect to $?"
+ $(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..."
+ -$(NOECHO) $(RM_F) $(MAKEFILE_OLD)
+ -$(NOECHO) $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD)
+ - $(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) clean $(DEV_NULL)
+ $(PERLRUN) Makefile.PL
+ $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
+ $(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <=="
+ $(FALSE)
+
+
+
+# --- MakeMaker staticmake section:
+
+# --- MakeMaker makeaperl section ---
+MAP_TARGET = perl
+FULLPERL = /usr/bin/perl
+
+$(MAP_TARGET) :: static $(MAKE_APERL_FILE)
+ $(MAKE) $(USEMAKEFILE) $(MAKE_APERL_FILE) $@
+
+$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE) pm_to_blib
+ $(NOECHO) $(ECHO) Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
+ $(NOECHO) $(PERLRUNINST) \
+ Makefile.PL DIR= \
+ MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
+ MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=
+
+
+# --- MakeMaker test section:
+
+TEST_VERBOSE=0
+TEST_TYPE=test_$(LINKTYPE)
+TEST_FILE = test.pl
+TEST_FILES = t/*.t
+TESTDB_SW = -d
+
+testdb :: testdb_$(LINKTYPE)
+
+test :: $(TEST_TYPE) subdirs-test
+
+subdirs-test ::
+ $(NOECHO) $(NOOP)
+
+
+test_dynamic :: pure_all
+ PERL_DL_NONLAZY=1 $(FULLPERLRUN) "-MExtUtils::Command::MM" "-e" "test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')" $(TEST_FILES)
+
+testdb_dynamic :: pure_all
+ PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE)
+
+test_ : test_dynamic
+
+test_static :: test_dynamic
+testdb_static :: testdb_dynamic
+
+
+# --- MakeMaker ppd section:
+# Creates a PPD (Perl Package Description) for a binary distribution.
+ppd :
+ $(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="0.0.6">' > $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <ABSTRACT>Easy YAML serialisation of Perl data structures</ABSTRACT>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <AUTHOR>Andy Armstrong &lt;andy@hexten.net&gt;</AUTHOR>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <IMPLEMENTATION>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <REQUIRE NAME="Test::More" />' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <REQUIRE NAME="version::" />' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <ARCHITECTURE NAME="x86_64-linux-thread-multi-5.10" />' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' <CODEBASE HREF="" />' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) ' </IMPLEMENTATION>' >> $(DISTNAME).ppd
+ $(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd
+
+
+# --- MakeMaker pm_to_blib section:
+
+pm_to_blib : $(FIRST_MAKEFILE) $(TO_INST_PM)
+ $(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', q[$(PM_FILTER)], '\''$(PERM_DIR)'\'')' -- \
+ lib/Data/YAML/Reader.pm blib/lib/Data/YAML/Reader.pm \
+ lib/Data/YAML.pm blib/lib/Data/YAML.pm \
+ lib/Data/YAML/Writer.pm blib/lib/Data/YAML/Writer.pm
+ $(NOECHO) $(TOUCH) pm_to_blib
+
+
+# --- MakeMaker selfdocument section:
+
+
+# --- MakeMaker postamble section:
+
+
+# End.
diff --git a/Data-YAML-0.0.6/Makefile.PL b/Data-YAML-0.0.6/Makefile.PL
new file mode 100644
index 0000000..d04335d
--- /dev/null
+++ b/Data-YAML-0.0.6/Makefile.PL
@@ -0,0 +1,22 @@
+use strict;
+use warnings;
+use ExtUtils::MakeMaker;
+
+eval 'use ExtUtils::MakeMaker::Coverage';
+warn "Optional ExtUtils::MakeMaker::Coverage not available\n" if $@;
+
+WriteMakefile(
+ ( MM->can( 'signature_target' ) ? ( SIGN => 1 ) : () ),
+ NAME => 'Data::YAML',
+ AUTHOR => 'Andy Armstrong <andy@hexten.net>',
+ LICENSE => 'perl',
+ VERSION_FROM => 'lib/Data/YAML.pm',
+ ABSTRACT_FROM => 'lib/Data/YAML.pm',
+ PL_FILES => {},
+ PREREQ_PM => {
+ 'Test::More' => 0,
+ 'version' => 0,
+ },
+ dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
+ clean => { FILES => 'Data-YAML-*' },
+);
diff --git a/Data-YAML-0.0.6/README b/Data-YAML-0.0.6/README
new file mode 100644
index 0000000..21ce3a9
--- /dev/null
+++ b/Data-YAML-0.0.6/README
@@ -0,0 +1,22 @@
+Data-YAML version 0.0.6
+
+INSTALLATION
+
+To install this module, run the following commands:
+
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+
+DEPENDENCIES
+
+None.
+
+COPYRIGHT AND LICENCE
+
+Copyright (C) 2007, Andy Armstrong
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
diff --git a/Data-YAML-0.0.6/SIGNATURE b/Data-YAML-0.0.6/SIGNATURE
new file mode 100644
index 0000000..d8abc76
--- /dev/null
+++ b/Data-YAML-0.0.6/SIGNATURE
@@ -0,0 +1,38 @@
+This file contains message digests of all files listed in MANIFEST,
+signed via the Module::Signature module, version 0.55.
+
+To verify the content in this distribution, first make sure you have
+Module::Signature installed, then type:
+
+ % cpansign -v
+
+It will check each file's integrity, as well as the signature's
+validity. If "==> Signature verified OK! <==" is not displayed,
+the distribution may already have been compromised, and you should
+not run its Makefile.PL or Build.PL.
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+SHA1 a796da56d11015113d6690491bd352c9958c5c64 Changes
+SHA1 1f4a6f38328ce9be2882634c0bdc84d6d9cb98e4 MANIFEST
+SHA1 06f48c95ab84fcd8dd0e1a92e45c48dd8b65395e META.yml
+SHA1 6a0c4a0f0093335e6e1e8f7d6fd1fcecad0c4a83 Makefile.PL
+SHA1 0aa5814a1f2c123d5b0f51643a1eff297543e589 README
+SHA1 446ba3a109b32a9091b4313fb1b70bb1e704ed76 lib/Data/YAML.pm
+SHA1 32611505ba10508d42104ee676466edd0f7ffa89 lib/Data/YAML/Reader.pm
+SHA1 ae4f9923febd88025bb2f923b1f6b6e8ec5e9982 lib/Data/YAML/Writer.pm
+SHA1 4cf9e6d03b2ba3e3ab482d138a94e95c6ecf6492 t/00.load.t
+SHA1 161ecef48d8e921399c3406cc2b2ca85442bd0e7 t/10-input.t
+SHA1 e3de4eff0004dcaf16aaed29a3df478f50a7058c t/20-reader.t
+SHA1 ae69251cc811bc4934ad08c165f34be398474e4f t/30-output.t
+SHA1 9b7b9be6fd31c4b378dd4b1a866cb68a51b1030c t/40-writer.t
+SHA1 aeaa691851a425f07ab6a8d4f825e2ad9d92b8ee t/pod-coverage.t
+SHA1 0190346d7072d458c8a10a45c19f86db641dcc48 t/pod.t
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.9 (Darwin)
+
+iEYEARECAAYFAkmzB+4ACgkQwoknRJZQnCEljwCgiQmQmQlvYQOTc118yk1GxyRk
+O2IAoMAritfzopChUsyF9HyFXCFUrfLl
+=o0s7
+-----END PGP SIGNATURE-----
diff --git a/Data-YAML-0.0.6/blib/arch/.exists b/Data-YAML-0.0.6/blib/arch/.exists
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/arch/.exists
diff --git a/Data-YAML-0.0.6/blib/arch/auto/Data/YAML/.exists b/Data-YAML-0.0.6/blib/arch/auto/Data/YAML/.exists
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/arch/auto/Data/YAML/.exists
diff --git a/Data-YAML-0.0.6/blib/bin/.exists b/Data-YAML-0.0.6/blib/bin/.exists
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/bin/.exists
diff --git a/Data-YAML-0.0.6/blib/lib/Data/.exists b/Data-YAML-0.0.6/blib/lib/Data/.exists
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/lib/Data/.exists
diff --git a/Data-YAML-0.0.6/blib/lib/Data/YAML.pm b/Data-YAML-0.0.6/blib/lib/Data/YAML.pm
new file mode 100644
index 0000000..dd6716b
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/lib/Data/YAML.pm
@@ -0,0 +1,145 @@
+package Data::YAML;
+
+use strict;
+use warnings;
+
+use vars qw{$VERSION};
+
+$VERSION = '0.0.6';
+
+1;
+
+__END__
+
+=head1 NAME
+
+Data::YAML - Easy YAML serialisation of Perl data structures
+
+=head1 VERSION
+
+This document describes Data::YAML version 0.0.6
+
+=head1 DESCRIPTION
+
+In the spirit of L<YAML::Tiny>, L<Data::YAML::Reader> and
+L<Data::YAML::Writer> provide lightweight, dependency-free YAML
+handling. While C<YAML::Tiny> is designed principally for working with
+configuration files C<Data::YAML> concentrates on the transparent round-
+tripping of YAML serialized Perl data structures.
+
+As an example of why this distinction matters consider that
+C<YAML::Tiny> doesn't handle hashes with keys containing non-printable
+characters. This is fine for configuration files but likely to cause
+problems when handling arbitrary Perl data structures. C<Data::YAML>
+handles exotic hash keys correctly.
+
+The syntax accepted by C<Data::YAML> is a subset of YAML. Specifically
+it is the same subset of YAML that L<Data::YAML::Writer> produces. See
+L<Data::YAML> for more information.
+
+=head2 YAML syntax
+
+Although YAML appears to be a simple language the entire YAML
+specification is huge. C<Data::YAML> implements a small subset of the
+complete syntax trading completeness for compactness and simplicity.
+This restricted syntax is known (to me at least) as 'YAMLish'.
+
+These examples demonstrates the full range of supported syntax.
+
+All YAML documents must begin with '---' and end with a line
+containing '...'.
+
+ --- Simple scalar
+ ...
+
+Unprintable characters are represented using standard escapes in double
+quoted strings.
+
+ --- "\t\x01\x02\n"
+ ...
+
+Array and hashes are represented thusly
+
+ ---
+ - "This"
+ - "is"
+ - "an"
+ - "array"
+ ...
+
+ ---
+ This: is
+ a: hash
+ ...
+
+Structures may nest arbitrarily
+
+ ---
+ -
+ name: 'Hash one'
+ value: 1
+ -
+ name: 'Hash two'
+ value: 2
+ ...
+
+Undef is a tilde
+
+ --- ~
+ ...
+
+=head2 Uses
+
+Use C<Data::YAML> may be used any time you need to freeze and thaw Perl
+data structures into a human readable format. The output from
+C<Data::YAML::Writer> should be readable by any YAML parser.
+
+C<Data::YAML> was originally written to allow machine-readable
+diagnostic information to be passed from test scripts to
+L<TAP::Harness>. That means that if you're writing a testing system that
+needs to output TAP version 13 or later syntax you might find
+C<Data::YAML> useful.
+
+Read more about TAP and YAMLish here: L<http://testanything.org/wiki>
+
+=head1 BUGS AND LIMITATIONS
+
+No bugs have been reported.
+
+Please report any bugs or feature requests to
+C<data-yaml@rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org>.
+
+=head1 AUTHOR
+
+Andy Armstrong C<< <andy@hexten.net> >>
+
+=head1 LICENCE AND COPYRIGHT
+
+Copyright (c) 2007, Andy Armstrong C<< <andy@hexten.net> >>. All rights reserved.
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself. See L<perlartistic>.
+
+=head1 DISCLAIMER OF WARRANTY
+
+BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
+YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+NECESSARY SERVICING, REPAIR, OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
+LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
diff --git a/Data-YAML-0.0.6/blib/lib/Data/YAML/Reader.pm b/Data-YAML-0.0.6/blib/lib/Data/YAML/Reader.pm
new file mode 100644
index 0000000..dbd5189
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/lib/Data/YAML/Reader.pm
@@ -0,0 +1,422 @@
+package Data::YAML::Reader;
+
+use strict;
+use warnings;
+use Carp;
+
+use vars qw{$VERSION};
+
+$VERSION = '0.0.6';
+
+# TODO:
+# Handle blessed object syntax
+
+# Printable characters for escapes
+my %UNESCAPES = (
+ z => "\x00",
+ a => "\x07",
+ t => "\x09",
+ n => "\x0a",
+ v => "\x0b",
+ f => "\x0c",
+ r => "\x0d",
+ e => "\x1b",
+ '\\' => '\\',
+);
+
+my $QQ_STRING = qr{ " (?:\\. | [^"])* " }x;
+my $HASH_LINE = qr{ ^ ($QQ_STRING|\S+) \s* : (?: \s+ (.+?) \s* )? $ }x;
+my $IS_HASH_KEY = qr{ ^ [\w\'\"] }x;
+my $IS_END_YAML = qr{ ^ [.][.][.] \s* $ }x;
+my $IS_QQ_STRING = qr{ ^ $QQ_STRING $ }x;
+
+# Create an empty Data::YAML::Reader object
+sub new {
+ my $class = shift;
+ bless {}, $class;
+}
+
+sub _make_reader {
+ my $self = shift;
+ my $obj = shift;
+
+ croak "Must have something to read from"
+ unless defined $obj;
+
+ if ( my $ref = ref $obj ) {
+ if ( 'CODE' eq $ref ) {
+ return $obj;
+ }
+ elsif ( 'ARRAY' eq $ref ) {
+ return sub { shift @$obj };
+ }
+ elsif ( 'SCALAR' eq $ref ) {
+ return $self->_make_reader( $$obj );
+ }
+ elsif ( 'GLOB' eq $ref || 'IO::Handle' eq $ref ) {
+ return sub {
+ my $line = <$obj>;
+ chomp $line if defined $line;
+ return $line;
+ };
+ }
+ croak "Don't know how to read $ref";
+ }
+ else {
+ my @lines = split( /\n/, $obj );
+ return sub { shift @lines };
+ }
+}
+
+sub read {
+ my $self = shift;
+ my $obj = shift;
+
+ $self->{reader} = $self->_make_reader( $obj );
+ $self->{capture} = [];
+
+ # Prime the reader
+ $self->_next;
+
+ my $doc = $self->_read;
+
+ # The terminator is mandatory otherwise we'd consume a line from the
+ # iterator that doesn't belong to us. If we want to remove this
+ # restriction we'll have to implement look-ahead in the iterators.
+ # Which might not be a bad idea.
+ my $dots = $self->_peek;
+ croak "Missing '...' at end of YAML"
+ unless $dots =~ $IS_END_YAML;
+
+ delete $self->{reader};
+ delete $self->{next};
+
+ return $doc;
+}
+
+sub get_raw {
+ my $self = shift;
+
+ if ( defined( my $capture = $self->{capture} ) ) {
+ return join( "\n", @$capture ) . "\n";
+ }
+
+ return '';
+}
+
+sub _peek {
+ my $self = shift;
+ return $self->{next} unless wantarray;
+ my $line = $self->{next};
+ $line =~ /^ (\s*) (.*) $ /x;
+ return ( $2, length $1 );
+}
+
+sub _next {
+ my $self = shift;
+ croak "_next called with no reader"
+ unless $self->{reader};
+ my $line = $self->{reader}->();
+ $self->{next} = $line;
+ push @{ $self->{capture} }, $line;
+}
+
+sub _read {
+ my $self = shift;
+
+ my $line = $self->_peek;
+
+ # Do we have a document header?
+ if ( $line =~ /^ --- (?: \s* (.+?) \s* )? $/x ) {
+ $self->_next;
+
+ return $self->_read_scalar( $1 ) if defined $1; # Inline?
+
+ my ( $next, $indent ) = $self->_peek;
+
+ if ( $next =~ /^ - /x ) {
+ return $self->_read_array( $indent );
+ }
+ elsif ( $next =~ $IS_HASH_KEY ) {
+ return $self->_read_hash( $next, $indent );
+ }
+ elsif ( $next =~ $IS_END_YAML ) {
+ croak "Premature end of YAML";
+ }
+ else {
+ croak "Unsupported YAML syntax: '$next'";
+ }
+ }
+ else {
+ croak "YAML document header not found";
+ }
+}
+
+# Parse a double quoted string
+sub _read_qq {
+ my $self = shift;
+ my $str = shift;
+
+ unless ( $str =~ s/^ " (.*?) " $/$1/x ) {
+ die "Internal: not a quoted string";
+ }
+
+ $str =~ s/\\"/"/gx;
+ $str =~ s/ \\ ( [tartan\\favez] | x([0-9a-fA-F]{2}) )
+ / (length($1) > 1) ? pack("H2", $2) : $UNESCAPES{$1} /gex;
+ return $str;
+}
+
+# Parse a scalar string to the actual scalar
+sub _read_scalar {
+ my $self = shift;
+ my $string = shift;
+
+ return undef if $string eq '~';
+
+ if ( $string eq '>' || $string eq '|' ) {
+
+ my ( $line, $indent ) = $self->_peek;
+ die "Multi-line scalar content missing" unless defined $line;
+
+ my @multiline = ( $line );
+
+ while ( 1 ) {
+ $self->_next;
+ my ( $next, $ind ) = $self->_peek;
+ last if $ind < $indent;
+ push @multiline, $next;
+ }
+
+ return join( ( $string eq '>' ? ' ' : "\n" ), @multiline ) . "\n";
+ }
+
+ if ( $string =~ /^ ' (.*) ' $/x ) {
+ ( my $rv = $1 ) =~ s/''/'/g;
+ return $rv;
+ }
+
+ if ( $string =~ $IS_QQ_STRING ) {
+ return $self->_read_qq( $string );
+ }
+
+ if ( $string =~ /^['"]/ ) {
+
+ # A quote with folding... we don't support that
+ die __PACKAGE__ . " does not support multi-line quoted scalars";
+ }
+
+ # Regular unquoted string
+ return $string;
+}
+
+sub _read_nested {
+ my $self = shift;
+
+ my ( $line, $indent ) = $self->_peek;
+
+ if ( $line =~ /^ -/x ) {
+ return $self->_read_array( $indent );
+ }
+ elsif ( $line =~ $IS_HASH_KEY ) {
+ return $self->_read_hash( $line, $indent );
+ }
+ else {
+ croak "Unsupported YAML syntax: '$line'";
+ }
+}
+
+# Parse an array
+sub _read_array {
+ my ( $self, $limit ) = @_;
+
+ my $ar = [];
+
+ while ( 1 ) {
+ my ( $line, $indent ) = $self->_peek;
+ last if $indent < $limit || !defined $line || $line =~ $IS_END_YAML;
+
+ if ( $indent > $limit ) {
+ croak "Array line over-indented";
+ }
+
+ if ( $line =~ /^ (- \s+) \S+ \s* : (?: \s+ | $ ) /x ) {
+ $indent += length $1;
+ $line =~ s/-\s+//;
+ push @$ar, $self->_read_hash( $line, $indent );
+ }
+ elsif ( $line =~ /^ - \s* (.+?) \s* $/x ) {
+ croak "Unexpected start of YAML" if $line =~ /^---/;
+ $self->_next;
+ push @$ar, $self->_read_scalar( $1 );
+ }
+ elsif ( $line =~ /^ - \s* $/x ) {
+ $self->_next;
+ push @$ar, $self->_read_nested;
+ }
+ elsif ( $line =~ $IS_HASH_KEY ) {
+ $self->_next;
+ push @$ar, $self->_read_hash( $line, $indent, );
+ }
+ else {
+ croak "Unsupported YAML syntax: '$line'";
+ }
+ }
+
+ return $ar;
+}
+
+sub _read_hash {
+ my ( $self, $line, $limit ) = @_;
+
+ my $indent;
+ my $hash = {};
+
+ while ( 1 ) {
+ croak "Badly formed hash line: '$line'"
+ unless $line =~ $HASH_LINE;
+
+ my ( $key, $value ) = ( $self->_read_scalar( $1 ), $2 );
+ $self->_next;
+
+ if ( defined $value ) {
+ $hash->{$key} = $self->_read_scalar( $value );
+ }
+ else {
+ $hash->{$key} = $self->_read_nested;
+ }
+
+ ( $line, $indent ) = $self->_peek;
+ last if $indent < $limit || !defined $line || $line =~ $IS_END_YAML;
+ }
+
+ return $hash;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Data::YAML::Reader - Parse YAML created by Data::YAML::Writer
+
+=head1 VERSION
+
+This document describes Data::YAML::Reader version 0.0.6
+
+=head1 SYNOPSIS
+
+ use Data::YAML::Reader;
+
+ my $yr = Data::YAML::Reader->new;
+
+ # Read from an array...
+ my $from_array = $yr->read( \@some_array );
+
+ # ...an open file handle...
+ my $from_handle = $yr->read( $some_file );
+
+ # ...a string containing YAML...
+ my $from_string = $yr->read( $some_string );
+
+ # ...or a closure
+ my $from_code = $yr->read( sub { return get_next_line() } );
+
+=head1 DESCRIPTION
+
+In the spirit of L<YAML::Tiny> this is a lightweight, dependency-free
+YAML reader. While C<YAML::Tiny> is designed principally for working
+with configuration files C<Data::YAML> concentrates on the transparent
+round-tripping of YAML serialized Perl data structures.
+
+The syntax accepted by C<Data::YAML::Reader> is a subset of YAML.
+Specifically it is the same subset of YAML that L<Data::YAML::Writer>
+produces. See L<Data::YAML> for more information.
+
+=head1 INTERFACE
+
+=over
+
+=item C<< new >>
+
+Creates and returns an empty C<Data::YAML::Reader> object. No options may be passed.
+
+=item C<< read( $source ) >>
+
+Read YAML and return the data structure it represents. The YAML data may be supplied by a
+
+=over
+
+=item * scalar string containing YAML source
+
+=item * the handle of an open file
+
+=item * a reference to an array of lines
+
+=item * a code reference
+
+=back
+
+In the case of a code reference a subroutine (most likely a closure)
+that returns successive lines of YAML must be supplied. Lines should
+have no trailing newline. When the YAML is exhausted the subroutine must
+return undef.
+
+Returns the data structure (specifically either a scalar, hash ref or
+array ref) that results from decoding the YAML.
+
+=item C<< get_raw >>
+
+Return the raw YAML source from the most recent C<read>.
+
+=back
+
+=head1 BUGS AND LIMITATIONS
+
+No bugs have been reported.
+
+Please report any bugs or feature requests to
+C<data-yaml@rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org>.
+
+=head1 SEE ALSO
+
+L<YAML::Tiny>, L<YAML>, L<YAML::Syck>, L<Config::Tiny>, L<CSS::Tiny>
+
+=head1 AUTHOR
+
+Andy Armstrong C<< <andy@hexten.net> >>
+
+Adam Kennedy wrote L<YAML::Tiny> which provided the template and many of
+the YAML matching regular expressions for this module.
+
+=head1 LICENCE AND COPYRIGHT
+
+Copyright (c) 2007, Andy Armstrong C<< <andy@hexten.net> >>. All rights reserved.
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself. See L<perlartistic>.
+
+=head1 DISCLAIMER OF WARRANTY
+
+BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
+YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+NECESSARY SERVICING, REPAIR, OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
+LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
diff --git a/Data-YAML-0.0.6/blib/lib/Data/YAML/Writer.pm b/Data-YAML-0.0.6/blib/lib/Data/YAML/Writer.pm
new file mode 100644
index 0000000..abce670
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/lib/Data/YAML/Writer.pm
@@ -0,0 +1,269 @@
+package Data::YAML::Writer;
+
+use strict;
+use warnings;
+use Carp;
+
+use vars qw{$VERSION};
+
+$VERSION = '0.0.6';
+
+my $ESCAPE_CHAR = qr{ [\x00-\x1f\"] }x;
+
+my @UNPRINTABLE = qw(
+ z x01 x02 x03 x04 x05 x06 a
+ x08 t n v f r x0e x0f
+ x10 x11 x12 x13 x14 x15 x16 x17
+ x18 x19 x1a e x1c x1d x1e x1f
+);
+
+# Create an empty Data::YAML::Writer object
+sub new {
+ my $class = shift;
+ bless {}, $class;
+}
+
+sub write {
+ my $self = shift;
+
+ croak "Need something to write"
+ unless @_;
+
+ my $obj = shift;
+ my $out = shift || \*STDOUT;
+
+ croak "Need a reference to something I can write to"
+ unless ref $out;
+
+ $self->{writer} = $self->_make_writer( $out );
+
+ $self->_write_obj( '---', $obj );
+ $self->_put( '...' );
+
+ delete $self->{writer};
+}
+
+sub _make_writer {
+ my $self = shift;
+ my $out = shift;
+
+ my $ref = ref $out;
+
+ if ( 'CODE' eq $ref ) {
+ return $out;
+ }
+ elsif ( 'ARRAY' eq $ref ) {
+ return sub { push @$out, shift };
+ }
+ elsif ( 'SCALAR' eq $ref ) {
+ return sub { $$out .= shift() . "\n" };
+ }
+ elsif ( 'GLOB' eq $ref || 'IO::Handle' eq $ref ) {
+ return sub { print $out shift(), "\n" };
+ }
+
+ croak "Can't write to $out";
+}
+
+sub _put {
+ my $self = shift;
+ $self->{writer}->( join '', @_ );
+}
+
+sub _enc_scalar {
+ my $self = shift;
+ my $val = shift;
+
+ return '~' unless defined $val;
+
+ if ( $val =~ /$ESCAPE_CHAR/ ) {
+ $val =~ s/\\/\\\\/g;
+ $val =~ s/"/\\"/g;
+ $val =~ s/ ( [\x00-\x1f] ) / '\\' . $UNPRINTABLE[ ord($1) ] /gex;
+ return qq{"$val"};
+ }
+
+ if ( length( $val ) == 0 or $val =~ /\s/ ) {
+ $val =~ s/'/''/;
+ return "'$val'";
+ }
+
+ return $val;
+}
+
+sub _write_obj {
+ my $self = shift;
+ my $prefix = shift;
+ my $obj = shift;
+ my $indent = shift || 0;
+
+ if ( my $ref = ref $obj ) {
+ my $pad = ' ' x $indent;
+ $self->_put( $prefix );
+ if ( 'HASH' eq $ref ) {
+ for my $key ( sort keys %$obj ) {
+ my $value = $obj->{$key};
+ $self->_write_obj( $pad . $self->_enc_scalar( $key ) . ':',
+ $value, $indent + 1 );
+ }
+ }
+ elsif ( 'ARRAY' eq $ref ) {
+ for my $value ( @$obj ) {
+ $self->_write_obj( $pad . '-', $value, $indent + 1 );
+ }
+ }
+ else {
+ croak "Don't know how to encode $ref";
+ }
+ }
+ else {
+ $self->_put( $prefix, ' ', $self->_enc_scalar( $obj ) );
+ }
+}
+
+1;
+
+__END__
+
+
+=head1 NAME
+
+Data::YAML::Writer - Easy YAML serialisation
+
+=head1 VERSION
+
+This document describes Data::YAML::Writer version 0.0.6
+
+=head1 SYNOPSIS
+
+ use Data::YAML::Writer;
+
+ my $data = {
+ one => 1,
+ two => 2,
+ three => [ 1, 2, 3 ],
+ };
+
+ my $yw = Data::YAML::Writer->new;
+
+ # Write to an array...
+ $yw->write( $data, \@some_array );
+
+ # ...an open file handle...
+ $yw->write( $data, $some_file_handle );
+
+ # ...a string ...
+ $yw->write( $data, \$some_string );
+
+ # ...or a closure
+ $yw->write( $data, sub {
+ my $line = shift;
+ print "$line\n";
+ } );
+
+
+=head1 DESCRIPTION
+
+Encodes a scalar, hash reference or array reference as YAML.
+
+In the spirit of L<YAML::Tiny> this is a lightweight, dependency-free
+YAML writer. While C<YAML::Tiny> is designed principally for working
+with configuration files C<Data::YAML> concentrates on the transparent
+round-tripping of YAML serialized Perl data structures.
+
+The syntax produced by C<Data::YAML::Writer> is a subset of YAML.
+Specifically it is the same subset of YAML that L<Data::YAML::Reader>
+consumes. See L<Data::YAML> for more information.
+
+=head1 INTERFACE
+
+=over
+
+=item C<< new >>
+
+The constructor C<new> creates and returns an empty C<Data::YAML::Writer> object.
+
+=item C<< write( $obj, $output ) >>
+
+Encode a scalar, hash reference or array reference as YAML.
+
+ my $writer = sub {
+ my $line = shift;
+ print SOMEFILE "$line\n";
+ };
+
+ my $data = {
+ one => 1,
+ two => 2,
+ three => [ 1, 2, 3 ],
+ };
+
+ my $yw = Data::YAML::Writer->new;
+ $yw->write( $data, $writer );
+
+
+The C< $output > argument may be
+
+=over
+
+=item * a reference to a scalar to append YAML to
+
+=item * the handle of an open file
+
+=item * a reference to an array into which YAML will be pushed
+
+=item * a code reference
+
+=back
+
+If you supply a code reference the subroutine will be called once for
+each line of output with the line as its only argument. Passed lines
+will have no trailing newline.
+
+=back
+
+=head1 BUGS AND LIMITATIONS
+
+No bugs have been reported.
+
+Please report any bugs or feature requests to
+C<data-yaml@rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org>.
+
+=head1 SEE ALSO
+
+L<YAML::Tiny>, L<YAML>, L<YAML::Syck>, L<Config::Tiny>, L<CSS::Tiny>
+
+=head1 AUTHOR
+
+Andy Armstrong C<< <andy@hexten.net> >>
+
+=head1 LICENCE AND COPYRIGHT
+
+Copyright (c) 2007, Andy Armstrong C<< <andy@hexten.net> >>. All rights reserved.
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself. See L<perlartistic>.
+
+=head1 DISCLAIMER OF WARRANTY
+
+BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
+YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+NECESSARY SERVICING, REPAIR, OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
+LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
diff --git a/Data-YAML-0.0.6/blib/lib/auto/Data/YAML/.exists b/Data-YAML-0.0.6/blib/lib/auto/Data/YAML/.exists
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/lib/auto/Data/YAML/.exists
diff --git a/Data-YAML-0.0.6/blib/man1/.exists b/Data-YAML-0.0.6/blib/man1/.exists
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/man1/.exists
diff --git a/Data-YAML-0.0.6/blib/man3/.exists b/Data-YAML-0.0.6/blib/man3/.exists
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/man3/.exists
diff --git a/Data-YAML-0.0.6/blib/man3/Data::YAML.3pm b/Data-YAML-0.0.6/blib/man3/Data::YAML.3pm
new file mode 100644
index 0000000..b0f422d
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/man3/Data::YAML.3pm
@@ -0,0 +1,264 @@
+.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.13)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Data::YAML 3"
+.TH Data::YAML 3 "2009-03-08" "perl v5.10.1" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Data::YAML \- Easy YAML serialisation of Perl data structures
+.SH "VERSION"
+.IX Header "VERSION"
+This document describes Data::YAML version 0.0.6
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+In the spirit of YAML::Tiny, Data::YAML::Reader and
+Data::YAML::Writer provide lightweight, dependency-free \s-1YAML\s0
+handling. While \f(CW\*(C`YAML::Tiny\*(C'\fR is designed principally for working with
+configuration files \f(CW\*(C`Data::YAML\*(C'\fR concentrates on the transparent round\-
+tripping of \s-1YAML\s0 serialized Perl data structures.
+.PP
+As an example of why this distinction matters consider that
+\&\f(CW\*(C`YAML::Tiny\*(C'\fR doesn't handle hashes with keys containing non-printable
+characters. This is fine for configuration files but likely to cause
+problems when handling arbitrary Perl data structures. \f(CW\*(C`Data::YAML\*(C'\fR
+handles exotic hash keys correctly.
+.PP
+The syntax accepted by \f(CW\*(C`Data::YAML\*(C'\fR is a subset of \s-1YAML\s0. Specifically
+it is the same subset of \s-1YAML\s0 that Data::YAML::Writer produces. See
+Data::YAML for more information.
+.SS "\s-1YAML\s0 syntax"
+.IX Subsection "YAML syntax"
+Although \s-1YAML\s0 appears to be a simple language the entire \s-1YAML\s0
+specification is huge. \f(CW\*(C`Data::YAML\*(C'\fR implements a small subset of the
+complete syntax trading completeness for compactness and simplicity.
+This restricted syntax is known (to me at least) as 'YAMLish'.
+.PP
+These examples demonstrates the full range of supported syntax.
+.PP
+All \s-1YAML\s0 documents must begin with '\-\-\-' and end with a line
+containing '...'.
+.PP
+.Vb 2
+\& \-\-\- Simple scalar
+\& ...
+.Ve
+.PP
+Unprintable characters are represented using standard escapes in double
+quoted strings.
+.PP
+.Vb 2
+\& \-\-\- "\et\ex01\ex02\en"
+\& ...
+.Ve
+.PP
+Array and hashes are represented thusly
+.PP
+.Vb 6
+\& \-\-\-
+\& \- "This"
+\& \- "is"
+\& \- "an"
+\& \- "array"
+\& ...
+\&
+\& \-\-\-
+\& This: is
+\& a: hash
+\& ...
+.Ve
+.PP
+Structures may nest arbitrarily
+.PP
+.Vb 8
+\& \-\-\-
+\& \-
+\& name: \*(AqHash one\*(Aq
+\& value: 1
+\& \-
+\& name: \*(AqHash two\*(Aq
+\& value: 2
+\& ...
+.Ve
+.PP
+Undef is a tilde
+.PP
+.Vb 2
+\& \-\-\- ~
+\& ...
+.Ve
+.SS "Uses"
+.IX Subsection "Uses"
+Use \f(CW\*(C`Data::YAML\*(C'\fR may be used any time you need to freeze and thaw Perl
+data structures into a human readable format. The output from
+\&\f(CW\*(C`Data::YAML::Writer\*(C'\fR should be readable by any \s-1YAML\s0 parser.
+.PP
+\&\f(CW\*(C`Data::YAML\*(C'\fR was originally written to allow machine-readable
+diagnostic information to be passed from test scripts to
+TAP::Harness. That means that if you're writing a testing system that
+needs to output \s-1TAP\s0 version 13 or later syntax you might find
+\&\f(CW\*(C`Data::YAML\*(C'\fR useful.
+.PP
+Read more about \s-1TAP\s0 and YAMLish here: <http://testanything.org/wiki>
+.SH "BUGS AND LIMITATIONS"
+.IX Header "BUGS AND LIMITATIONS"
+No bugs have been reported.
+.PP
+Please report any bugs or feature requests to
+\&\f(CW\*(C`data\-yaml@rt.cpan.org\*(C'\fR, or through the web interface at
+<http://rt.cpan.org>.
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Andy Armstrong \f(CW\*(C`<andy@hexten.net>\*(C'\fR
+.SH "LICENCE AND COPYRIGHT"
+.IX Header "LICENCE AND COPYRIGHT"
+Copyright (c) 2007, Andy Armstrong \f(CW\*(C`<andy@hexten.net>\*(C'\fR. All rights reserved.
+.PP
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself. See perlartistic.
+.SH "DISCLAIMER OF WARRANTY"
+.IX Header "DISCLAIMER OF WARRANTY"
+\&\s-1BECAUSE\s0 \s-1THIS\s0 \s-1SOFTWARE\s0 \s-1IS\s0 \s-1LICENSED\s0 \s-1FREE\s0 \s-1OF\s0 \s-1CHARGE\s0, \s-1THERE\s0 \s-1IS\s0 \s-1NO\s0 \s-1WARRANTY\s0
+\&\s-1FOR\s0 \s-1THE\s0 \s-1SOFTWARE\s0, \s-1TO\s0 \s-1THE\s0 \s-1EXTENT\s0 \s-1PERMITTED\s0 \s-1BY\s0 \s-1APPLICABLE\s0 \s-1LAW\s0. \s-1EXCEPT\s0 \s-1WHEN\s0
+\&\s-1OTHERWISE\s0 \s-1STATED\s0 \s-1IN\s0 \s-1WRITING\s0 \s-1THE\s0 \s-1COPYRIGHT\s0 \s-1HOLDERS\s0 \s-1AND/OR\s0 \s-1OTHER\s0 \s-1PARTIES\s0
+\&\s-1PROVIDE\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \*(L"\s-1AS\s0 \s-1IS\s0\*(R" \s-1WITHOUT\s0 \s-1WARRANTY\s0 \s-1OF\s0 \s-1ANY\s0 \s-1KIND\s0, \s-1EITHER\s0
+\&\s-1EXPRESSED\s0 \s-1OR\s0 \s-1IMPLIED\s0, \s-1INCLUDING\s0, \s-1BUT\s0 \s-1NOT\s0 \s-1LIMITED\s0 \s-1TO\s0, \s-1THE\s0 \s-1IMPLIED\s0
+\&\s-1WARRANTIES\s0 \s-1OF\s0 \s-1MERCHANTABILITY\s0 \s-1AND\s0 \s-1FITNESS\s0 \s-1FOR\s0 A \s-1PARTICULAR\s0 \s-1PURPOSE\s0. \s-1THE\s0
+\&\s-1ENTIRE\s0 \s-1RISK\s0 \s-1AS\s0 \s-1TO\s0 \s-1THE\s0 \s-1QUALITY\s0 \s-1AND\s0 \s-1PERFORMANCE\s0 \s-1OF\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1IS\s0 \s-1WITH\s0
+\&\s-1YOU\s0. \s-1SHOULD\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1PROVE\s0 \s-1DEFECTIVE\s0, \s-1YOU\s0 \s-1ASSUME\s0 \s-1THE\s0 \s-1COST\s0 \s-1OF\s0 \s-1ALL\s0
+\&\s-1NECESSARY\s0 \s-1SERVICING\s0, \s-1REPAIR\s0, \s-1OR\s0 \s-1CORRECTION\s0.
+.PP
+\&\s-1IN\s0 \s-1NO\s0 \s-1EVENT\s0 \s-1UNLESS\s0 \s-1REQUIRED\s0 \s-1BY\s0 \s-1APPLICABLE\s0 \s-1LAW\s0 \s-1OR\s0 \s-1AGREED\s0 \s-1TO\s0 \s-1IN\s0 \s-1WRITING\s0
+\&\s-1WILL\s0 \s-1ANY\s0 \s-1COPYRIGHT\s0 \s-1HOLDER\s0, \s-1OR\s0 \s-1ANY\s0 \s-1OTHER\s0 \s-1PARTY\s0 \s-1WHO\s0 \s-1MAY\s0 \s-1MODIFY\s0 \s-1AND/OR\s0
+\&\s-1REDISTRIBUTE\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1AS\s0 \s-1PERMITTED\s0 \s-1BY\s0 \s-1THE\s0 \s-1ABOVE\s0 \s-1LICENCE\s0, \s-1BE\s0
+\&\s-1LIABLE\s0 \s-1TO\s0 \s-1YOU\s0 \s-1FOR\s0 \s-1DAMAGES\s0, \s-1INCLUDING\s0 \s-1ANY\s0 \s-1GENERAL\s0, \s-1SPECIAL\s0, \s-1INCIDENTAL\s0,
+\&\s-1OR\s0 \s-1CONSEQUENTIAL\s0 \s-1DAMAGES\s0 \s-1ARISING\s0 \s-1OUT\s0 \s-1OF\s0 \s-1THE\s0 \s-1USE\s0 \s-1OR\s0 \s-1INABILITY\s0 \s-1TO\s0 \s-1USE\s0
+\&\s-1THE\s0 \s-1SOFTWARE\s0 (\s-1INCLUDING\s0 \s-1BUT\s0 \s-1NOT\s0 \s-1LIMITED\s0 \s-1TO\s0 \s-1LOSS\s0 \s-1OF\s0 \s-1DATA\s0 \s-1OR\s0 \s-1DATA\s0 \s-1BEING\s0
+\&\s-1RENDERED\s0 \s-1INACCURATE\s0 \s-1OR\s0 \s-1LOSSES\s0 \s-1SUSTAINED\s0 \s-1BY\s0 \s-1YOU\s0 \s-1OR\s0 \s-1THIRD\s0 \s-1PARTIES\s0 \s-1OR\s0 A
+\&\s-1FAILURE\s0 \s-1OF\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1TO\s0 \s-1OPERATE\s0 \s-1WITH\s0 \s-1ANY\s0 \s-1OTHER\s0 \s-1SOFTWARE\s0), \s-1EVEN\s0 \s-1IF\s0
+\&\s-1SUCH\s0 \s-1HOLDER\s0 \s-1OR\s0 \s-1OTHER\s0 \s-1PARTY\s0 \s-1HAS\s0 \s-1BEEN\s0 \s-1ADVISED\s0 \s-1OF\s0 \s-1THE\s0 \s-1POSSIBILITY\s0 \s-1OF\s0
+\&\s-1SUCH\s0 \s-1DAMAGES\s0.
diff --git a/Data-YAML-0.0.6/blib/man3/Data::YAML::Reader.3pm b/Data-YAML-0.0.6/blib/man3/Data::YAML::Reader.3pm
new file mode 100644
index 0000000..f01295e
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/man3/Data::YAML::Reader.3pm
@@ -0,0 +1,243 @@
+.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.13)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Data::YAML::Reader 3"
+.TH Data::YAML::Reader 3 "2009-03-08" "perl v5.10.1" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Data::YAML::Reader \- Parse YAML created by Data::YAML::Writer
+.SH "VERSION"
+.IX Header "VERSION"
+This document describes Data::YAML::Reader version 0.0.6
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& use Data::YAML::Reader;
+\&
+\& my $yr = Data::YAML::Reader\->new;
+\&
+\& # Read from an array...
+\& my $from_array = $yr\->read( \e@some_array );
+\&
+\& # ...an open file handle...
+\& my $from_handle = $yr\->read( $some_file );
+\&
+\& # ...a string containing YAML...
+\& my $from_string = $yr\->read( $some_string );
+\&
+\& # ...or a closure
+\& my $from_code = $yr\->read( sub { return get_next_line() } );
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+In the spirit of YAML::Tiny this is a lightweight, dependency-free
+\&\s-1YAML\s0 reader. While \f(CW\*(C`YAML::Tiny\*(C'\fR is designed principally for working
+with configuration files \f(CW\*(C`Data::YAML\*(C'\fR concentrates on the transparent
+round-tripping of \s-1YAML\s0 serialized Perl data structures.
+.PP
+The syntax accepted by \f(CW\*(C`Data::YAML::Reader\*(C'\fR is a subset of \s-1YAML\s0.
+Specifically it is the same subset of \s-1YAML\s0 that Data::YAML::Writer
+produces. See Data::YAML for more information.
+.SH "INTERFACE"
+.IX Header "INTERFACE"
+.ie n .IP """new""" 4
+.el .IP "\f(CWnew\fR" 4
+.IX Item "new"
+Creates and returns an empty \f(CW\*(C`Data::YAML::Reader\*(C'\fR object. No options may be passed.
+.ie n .IP """read( $source )""" 4
+.el .IP "\f(CWread( $source )\fR" 4
+.IX Item "read( $source )"
+Read \s-1YAML\s0 and return the data structure it represents. The \s-1YAML\s0 data may be supplied by a
+.RS 4
+.IP "\(bu" 4
+scalar string containing \s-1YAML\s0 source
+.IP "\(bu" 4
+the handle of an open file
+.IP "\(bu" 4
+a reference to an array of lines
+.IP "\(bu" 4
+a code reference
+.RE
+.RS 4
+.Sp
+In the case of a code reference a subroutine (most likely a closure)
+that returns successive lines of \s-1YAML\s0 must be supplied. Lines should
+have no trailing newline. When the \s-1YAML\s0 is exhausted the subroutine must
+return undef.
+.Sp
+Returns the data structure (specifically either a scalar, hash ref or
+array ref) that results from decoding the \s-1YAML\s0.
+.RE
+.ie n .IP """get_raw""" 4
+.el .IP "\f(CWget_raw\fR" 4
+.IX Item "get_raw"
+Return the raw \s-1YAML\s0 source from the most recent \f(CW\*(C`read\*(C'\fR.
+.SH "BUGS AND LIMITATIONS"
+.IX Header "BUGS AND LIMITATIONS"
+No bugs have been reported.
+.PP
+Please report any bugs or feature requests to
+\&\f(CW\*(C`data\-yaml@rt.cpan.org\*(C'\fR, or through the web interface at
+<http://rt.cpan.org>.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+YAML::Tiny, \s-1YAML\s0, YAML::Syck, Config::Tiny, CSS::Tiny
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Andy Armstrong \f(CW\*(C`<andy@hexten.net>\*(C'\fR
+.PP
+Adam Kennedy wrote YAML::Tiny which provided the template and many of
+the \s-1YAML\s0 matching regular expressions for this module.
+.SH "LICENCE AND COPYRIGHT"
+.IX Header "LICENCE AND COPYRIGHT"
+Copyright (c) 2007, Andy Armstrong \f(CW\*(C`<andy@hexten.net>\*(C'\fR. All rights reserved.
+.PP
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself. See perlartistic.
+.SH "DISCLAIMER OF WARRANTY"
+.IX Header "DISCLAIMER OF WARRANTY"
+\&\s-1BECAUSE\s0 \s-1THIS\s0 \s-1SOFTWARE\s0 \s-1IS\s0 \s-1LICENSED\s0 \s-1FREE\s0 \s-1OF\s0 \s-1CHARGE\s0, \s-1THERE\s0 \s-1IS\s0 \s-1NO\s0 \s-1WARRANTY\s0
+\&\s-1FOR\s0 \s-1THE\s0 \s-1SOFTWARE\s0, \s-1TO\s0 \s-1THE\s0 \s-1EXTENT\s0 \s-1PERMITTED\s0 \s-1BY\s0 \s-1APPLICABLE\s0 \s-1LAW\s0. \s-1EXCEPT\s0 \s-1WHEN\s0
+\&\s-1OTHERWISE\s0 \s-1STATED\s0 \s-1IN\s0 \s-1WRITING\s0 \s-1THE\s0 \s-1COPYRIGHT\s0 \s-1HOLDERS\s0 \s-1AND/OR\s0 \s-1OTHER\s0 \s-1PARTIES\s0
+\&\s-1PROVIDE\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \*(L"\s-1AS\s0 \s-1IS\s0\*(R" \s-1WITHOUT\s0 \s-1WARRANTY\s0 \s-1OF\s0 \s-1ANY\s0 \s-1KIND\s0, \s-1EITHER\s0
+\&\s-1EXPRESSED\s0 \s-1OR\s0 \s-1IMPLIED\s0, \s-1INCLUDING\s0, \s-1BUT\s0 \s-1NOT\s0 \s-1LIMITED\s0 \s-1TO\s0, \s-1THE\s0 \s-1IMPLIED\s0
+\&\s-1WARRANTIES\s0 \s-1OF\s0 \s-1MERCHANTABILITY\s0 \s-1AND\s0 \s-1FITNESS\s0 \s-1FOR\s0 A \s-1PARTICULAR\s0 \s-1PURPOSE\s0. \s-1THE\s0
+\&\s-1ENTIRE\s0 \s-1RISK\s0 \s-1AS\s0 \s-1TO\s0 \s-1THE\s0 \s-1QUALITY\s0 \s-1AND\s0 \s-1PERFORMANCE\s0 \s-1OF\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1IS\s0 \s-1WITH\s0
+\&\s-1YOU\s0. \s-1SHOULD\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1PROVE\s0 \s-1DEFECTIVE\s0, \s-1YOU\s0 \s-1ASSUME\s0 \s-1THE\s0 \s-1COST\s0 \s-1OF\s0 \s-1ALL\s0
+\&\s-1NECESSARY\s0 \s-1SERVICING\s0, \s-1REPAIR\s0, \s-1OR\s0 \s-1CORRECTION\s0.
+.PP
+\&\s-1IN\s0 \s-1NO\s0 \s-1EVENT\s0 \s-1UNLESS\s0 \s-1REQUIRED\s0 \s-1BY\s0 \s-1APPLICABLE\s0 \s-1LAW\s0 \s-1OR\s0 \s-1AGREED\s0 \s-1TO\s0 \s-1IN\s0 \s-1WRITING\s0
+\&\s-1WILL\s0 \s-1ANY\s0 \s-1COPYRIGHT\s0 \s-1HOLDER\s0, \s-1OR\s0 \s-1ANY\s0 \s-1OTHER\s0 \s-1PARTY\s0 \s-1WHO\s0 \s-1MAY\s0 \s-1MODIFY\s0 \s-1AND/OR\s0
+\&\s-1REDISTRIBUTE\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1AS\s0 \s-1PERMITTED\s0 \s-1BY\s0 \s-1THE\s0 \s-1ABOVE\s0 \s-1LICENCE\s0, \s-1BE\s0
+\&\s-1LIABLE\s0 \s-1TO\s0 \s-1YOU\s0 \s-1FOR\s0 \s-1DAMAGES\s0, \s-1INCLUDING\s0 \s-1ANY\s0 \s-1GENERAL\s0, \s-1SPECIAL\s0, \s-1INCIDENTAL\s0,
+\&\s-1OR\s0 \s-1CONSEQUENTIAL\s0 \s-1DAMAGES\s0 \s-1ARISING\s0 \s-1OUT\s0 \s-1OF\s0 \s-1THE\s0 \s-1USE\s0 \s-1OR\s0 \s-1INABILITY\s0 \s-1TO\s0 \s-1USE\s0
+\&\s-1THE\s0 \s-1SOFTWARE\s0 (\s-1INCLUDING\s0 \s-1BUT\s0 \s-1NOT\s0 \s-1LIMITED\s0 \s-1TO\s0 \s-1LOSS\s0 \s-1OF\s0 \s-1DATA\s0 \s-1OR\s0 \s-1DATA\s0 \s-1BEING\s0
+\&\s-1RENDERED\s0 \s-1INACCURATE\s0 \s-1OR\s0 \s-1LOSSES\s0 \s-1SUSTAINED\s0 \s-1BY\s0 \s-1YOU\s0 \s-1OR\s0 \s-1THIRD\s0 \s-1PARTIES\s0 \s-1OR\s0 A
+\&\s-1FAILURE\s0 \s-1OF\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1TO\s0 \s-1OPERATE\s0 \s-1WITH\s0 \s-1ANY\s0 \s-1OTHER\s0 \s-1SOFTWARE\s0), \s-1EVEN\s0 \s-1IF\s0
+\&\s-1SUCH\s0 \s-1HOLDER\s0 \s-1OR\s0 \s-1OTHER\s0 \s-1PARTY\s0 \s-1HAS\s0 \s-1BEEN\s0 \s-1ADVISED\s0 \s-1OF\s0 \s-1THE\s0 \s-1POSSIBILITY\s0 \s-1OF\s0
+\&\s-1SUCH\s0 \s-1DAMAGES\s0.
diff --git a/Data-YAML-0.0.6/blib/man3/Data::YAML::Writer.3pm b/Data-YAML-0.0.6/blib/man3/Data::YAML::Writer.3pm
new file mode 100644
index 0000000..2ec49e5
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/man3/Data::YAML::Writer.3pm
@@ -0,0 +1,261 @@
+.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.13)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Data::YAML::Writer 3"
+.TH Data::YAML::Writer 3 "2009-03-08" "perl v5.10.1" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Data::YAML::Writer \- Easy YAML serialisation
+.SH "VERSION"
+.IX Header "VERSION"
+This document describes Data::YAML::Writer version 0.0.6
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& use Data::YAML::Writer;
+\&
+\& my $data = {
+\& one => 1,
+\& two => 2,
+\& three => [ 1, 2, 3 ],
+\& };
+\&
+\& my $yw = Data::YAML::Writer\->new;
+\&
+\& # Write to an array...
+\& $yw\->write( $data, \e@some_array );
+\&
+\& # ...an open file handle...
+\& $yw\->write( $data, $some_file_handle );
+\&
+\& # ...a string ...
+\& $yw\->write( $data, \e$some_string );
+\&
+\& # ...or a closure
+\& $yw\->write( $data, sub {
+\& my $line = shift;
+\& print "$line\en";
+\& } );
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+Encodes a scalar, hash reference or array reference as \s-1YAML\s0.
+.PP
+In the spirit of YAML::Tiny this is a lightweight, dependency-free
+\&\s-1YAML\s0 writer. While \f(CW\*(C`YAML::Tiny\*(C'\fR is designed principally for working
+with configuration files \f(CW\*(C`Data::YAML\*(C'\fR concentrates on the transparent
+round-tripping of \s-1YAML\s0 serialized Perl data structures.
+.PP
+The syntax produced by \f(CW\*(C`Data::YAML::Writer\*(C'\fR is a subset of \s-1YAML\s0.
+Specifically it is the same subset of \s-1YAML\s0 that Data::YAML::Reader
+consumes. See Data::YAML for more information.
+.SH "INTERFACE"
+.IX Header "INTERFACE"
+.ie n .IP """new""" 4
+.el .IP "\f(CWnew\fR" 4
+.IX Item "new"
+The constructor \f(CW\*(C`new\*(C'\fR creates and returns an empty \f(CW\*(C`Data::YAML::Writer\*(C'\fR object.
+.ie n .IP """write( $obj, $output )""" 4
+.el .IP "\f(CWwrite( $obj, $output )\fR" 4
+.IX Item "write( $obj, $output )"
+Encode a scalar, hash reference or array reference as \s-1YAML\s0.
+.Sp
+.Vb 4
+\& my $writer = sub {
+\& my $line = shift;
+\& print SOMEFILE "$line\en";
+\& };
+\&
+\& my $data = {
+\& one => 1,
+\& two => 2,
+\& three => [ 1, 2, 3 ],
+\& };
+\&
+\& my $yw = Data::YAML::Writer\->new;
+\& $yw\->write( $data, $writer );
+.Ve
+.Sp
+The \f(CW $output \fR argument may be
+.RS 4
+.IP "\(bu" 4
+a reference to a scalar to append \s-1YAML\s0 to
+.IP "\(bu" 4
+the handle of an open file
+.IP "\(bu" 4
+a reference to an array into which \s-1YAML\s0 will be pushed
+.IP "\(bu" 4
+a code reference
+.RE
+.RS 4
+.Sp
+If you supply a code reference the subroutine will be called once for
+each line of output with the line as its only argument. Passed lines
+will have no trailing newline.
+.RE
+.SH "BUGS AND LIMITATIONS"
+.IX Header "BUGS AND LIMITATIONS"
+No bugs have been reported.
+.PP
+Please report any bugs or feature requests to
+\&\f(CW\*(C`data\-yaml@rt.cpan.org\*(C'\fR, or through the web interface at
+<http://rt.cpan.org>.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+YAML::Tiny, \s-1YAML\s0, YAML::Syck, Config::Tiny, CSS::Tiny
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Andy Armstrong \f(CW\*(C`<andy@hexten.net>\*(C'\fR
+.SH "LICENCE AND COPYRIGHT"
+.IX Header "LICENCE AND COPYRIGHT"
+Copyright (c) 2007, Andy Armstrong \f(CW\*(C`<andy@hexten.net>\*(C'\fR. All rights reserved.
+.PP
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself. See perlartistic.
+.SH "DISCLAIMER OF WARRANTY"
+.IX Header "DISCLAIMER OF WARRANTY"
+\&\s-1BECAUSE\s0 \s-1THIS\s0 \s-1SOFTWARE\s0 \s-1IS\s0 \s-1LICENSED\s0 \s-1FREE\s0 \s-1OF\s0 \s-1CHARGE\s0, \s-1THERE\s0 \s-1IS\s0 \s-1NO\s0 \s-1WARRANTY\s0
+\&\s-1FOR\s0 \s-1THE\s0 \s-1SOFTWARE\s0, \s-1TO\s0 \s-1THE\s0 \s-1EXTENT\s0 \s-1PERMITTED\s0 \s-1BY\s0 \s-1APPLICABLE\s0 \s-1LAW\s0. \s-1EXCEPT\s0 \s-1WHEN\s0
+\&\s-1OTHERWISE\s0 \s-1STATED\s0 \s-1IN\s0 \s-1WRITING\s0 \s-1THE\s0 \s-1COPYRIGHT\s0 \s-1HOLDERS\s0 \s-1AND/OR\s0 \s-1OTHER\s0 \s-1PARTIES\s0
+\&\s-1PROVIDE\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \*(L"\s-1AS\s0 \s-1IS\s0\*(R" \s-1WITHOUT\s0 \s-1WARRANTY\s0 \s-1OF\s0 \s-1ANY\s0 \s-1KIND\s0, \s-1EITHER\s0
+\&\s-1EXPRESSED\s0 \s-1OR\s0 \s-1IMPLIED\s0, \s-1INCLUDING\s0, \s-1BUT\s0 \s-1NOT\s0 \s-1LIMITED\s0 \s-1TO\s0, \s-1THE\s0 \s-1IMPLIED\s0
+\&\s-1WARRANTIES\s0 \s-1OF\s0 \s-1MERCHANTABILITY\s0 \s-1AND\s0 \s-1FITNESS\s0 \s-1FOR\s0 A \s-1PARTICULAR\s0 \s-1PURPOSE\s0. \s-1THE\s0
+\&\s-1ENTIRE\s0 \s-1RISK\s0 \s-1AS\s0 \s-1TO\s0 \s-1THE\s0 \s-1QUALITY\s0 \s-1AND\s0 \s-1PERFORMANCE\s0 \s-1OF\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1IS\s0 \s-1WITH\s0
+\&\s-1YOU\s0. \s-1SHOULD\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1PROVE\s0 \s-1DEFECTIVE\s0, \s-1YOU\s0 \s-1ASSUME\s0 \s-1THE\s0 \s-1COST\s0 \s-1OF\s0 \s-1ALL\s0
+\&\s-1NECESSARY\s0 \s-1SERVICING\s0, \s-1REPAIR\s0, \s-1OR\s0 \s-1CORRECTION\s0.
+.PP
+\&\s-1IN\s0 \s-1NO\s0 \s-1EVENT\s0 \s-1UNLESS\s0 \s-1REQUIRED\s0 \s-1BY\s0 \s-1APPLICABLE\s0 \s-1LAW\s0 \s-1OR\s0 \s-1AGREED\s0 \s-1TO\s0 \s-1IN\s0 \s-1WRITING\s0
+\&\s-1WILL\s0 \s-1ANY\s0 \s-1COPYRIGHT\s0 \s-1HOLDER\s0, \s-1OR\s0 \s-1ANY\s0 \s-1OTHER\s0 \s-1PARTY\s0 \s-1WHO\s0 \s-1MAY\s0 \s-1MODIFY\s0 \s-1AND/OR\s0
+\&\s-1REDISTRIBUTE\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1AS\s0 \s-1PERMITTED\s0 \s-1BY\s0 \s-1THE\s0 \s-1ABOVE\s0 \s-1LICENCE\s0, \s-1BE\s0
+\&\s-1LIABLE\s0 \s-1TO\s0 \s-1YOU\s0 \s-1FOR\s0 \s-1DAMAGES\s0, \s-1INCLUDING\s0 \s-1ANY\s0 \s-1GENERAL\s0, \s-1SPECIAL\s0, \s-1INCIDENTAL\s0,
+\&\s-1OR\s0 \s-1CONSEQUENTIAL\s0 \s-1DAMAGES\s0 \s-1ARISING\s0 \s-1OUT\s0 \s-1OF\s0 \s-1THE\s0 \s-1USE\s0 \s-1OR\s0 \s-1INABILITY\s0 \s-1TO\s0 \s-1USE\s0
+\&\s-1THE\s0 \s-1SOFTWARE\s0 (\s-1INCLUDING\s0 \s-1BUT\s0 \s-1NOT\s0 \s-1LIMITED\s0 \s-1TO\s0 \s-1LOSS\s0 \s-1OF\s0 \s-1DATA\s0 \s-1OR\s0 \s-1DATA\s0 \s-1BEING\s0
+\&\s-1RENDERED\s0 \s-1INACCURATE\s0 \s-1OR\s0 \s-1LOSSES\s0 \s-1SUSTAINED\s0 \s-1BY\s0 \s-1YOU\s0 \s-1OR\s0 \s-1THIRD\s0 \s-1PARTIES\s0 \s-1OR\s0 A
+\&\s-1FAILURE\s0 \s-1OF\s0 \s-1THE\s0 \s-1SOFTWARE\s0 \s-1TO\s0 \s-1OPERATE\s0 \s-1WITH\s0 \s-1ANY\s0 \s-1OTHER\s0 \s-1SOFTWARE\s0), \s-1EVEN\s0 \s-1IF\s0
+\&\s-1SUCH\s0 \s-1HOLDER\s0 \s-1OR\s0 \s-1OTHER\s0 \s-1PARTY\s0 \s-1HAS\s0 \s-1BEEN\s0 \s-1ADVISED\s0 \s-1OF\s0 \s-1THE\s0 \s-1POSSIBILITY\s0 \s-1OF\s0
+\&\s-1SUCH\s0 \s-1DAMAGES\s0.
diff --git a/Data-YAML-0.0.6/blib/script/.exists b/Data-YAML-0.0.6/blib/script/.exists
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Data-YAML-0.0.6/blib/script/.exists
diff --git a/Data-YAML-0.0.6/lib/Data/YAML.pm b/Data-YAML-0.0.6/lib/Data/YAML.pm
new file mode 100644
index 0000000..dd6716b
--- /dev/null
+++ b/Data-YAML-0.0.6/lib/Data/YAML.pm
@@ -0,0 +1,145 @@
+package Data::YAML;
+
+use strict;
+use warnings;
+
+use vars qw{$VERSION};
+
+$VERSION = '0.0.6';
+
+1;
+
+__END__
+
+=head1 NAME
+
+Data::YAML - Easy YAML serialisation of Perl data structures
+
+=head1 VERSION
+
+This document describes Data::YAML version 0.0.6
+
+=head1 DESCRIPTION
+
+In the spirit of L<YAML::Tiny>, L<Data::YAML::Reader> and
+L<Data::YAML::Writer> provide lightweight, dependency-free YAML
+handling. While C<YAML::Tiny> is designed principally for working with
+configuration files C<Data::YAML> concentrates on the transparent round-
+tripping of YAML serialized Perl data structures.
+
+As an example of why this distinction matters consider that
+C<YAML::Tiny> doesn't handle hashes with keys containing non-printable
+characters. This is fine for configuration files but likely to cause
+problems when handling arbitrary Perl data structures. C<Data::YAML>
+handles exotic hash keys correctly.
+
+The syntax accepted by C<Data::YAML> is a subset of YAML. Specifically
+it is the same subset of YAML that L<Data::YAML::Writer> produces. See
+L<Data::YAML> for more information.
+
+=head2 YAML syntax
+
+Although YAML appears to be a simple language the entire YAML
+specification is huge. C<Data::YAML> implements a small subset of the
+complete syntax trading completeness for compactness and simplicity.
+This restricted syntax is known (to me at least) as 'YAMLish'.
+
+These examples demonstrates the full range of supported syntax.
+
+All YAML documents must begin with '---' and end with a line
+containing '...'.
+
+ --- Simple scalar
+ ...
+
+Unprintable characters are represented using standard escapes in double
+quoted strings.
+
+ --- "\t\x01\x02\n"
+ ...
+
+Array and hashes are represented thusly
+
+ ---
+ - "This"
+ - "is"
+ - "an"
+ - "array"
+ ...
+
+ ---
+ This: is
+ a: hash
+ ...
+
+Structures may nest arbitrarily
+
+ ---
+ -
+ name: 'Hash one'
+ value: 1
+ -
+ name: 'Hash two'
+ value: 2
+ ...
+
+Undef is a tilde
+
+ --- ~
+ ...
+
+=head2 Uses
+
+Use C<Data::YAML> may be used any time you need to freeze and thaw Perl
+data structures into a human readable format. The output from
+C<Data::YAML::Writer> should be readable by any YAML parser.
+
+C<Data::YAML> was originally written to allow machine-readable
+diagnostic information to be passed from test scripts to
+L<TAP::Harness>. That means that if you're writing a testing system that
+needs to output TAP version 13 or later syntax you might find
+C<Data::YAML> useful.
+
+Read more about TAP and YAMLish here: L<http://testanything.org/wiki>
+
+=head1 BUGS AND LIMITATIONS
+
+No bugs have been reported.
+
+Please report any bugs or feature requests to
+C<data-yaml@rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org>.
+
+=head1 AUTHOR
+
+Andy Armstrong C<< <andy@hexten.net> >>
+
+=head1 LICENCE AND COPYRIGHT
+
+Copyright (c) 2007, Andy Armstrong C<< <andy@hexten.net> >>. All rights reserved.
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself. See L<perlartistic>.
+
+=head1 DISCLAIMER OF WARRANTY
+
+BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
+YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+NECESSARY SERVICING, REPAIR, OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
+LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
diff --git a/Data-YAML-0.0.6/lib/Data/YAML/Reader.pm b/Data-YAML-0.0.6/lib/Data/YAML/Reader.pm
new file mode 100644
index 0000000..dbd5189
--- /dev/null
+++ b/Data-YAML-0.0.6/lib/Data/YAML/Reader.pm
@@ -0,0 +1,422 @@
+package Data::YAML::Reader;
+
+use strict;
+use warnings;
+use Carp;
+
+use vars qw{$VERSION};
+
+$VERSION = '0.0.6';
+
+# TODO:
+# Handle blessed object syntax
+
+# Printable characters for escapes
+my %UNESCAPES = (
+ z => "\x00",
+ a => "\x07",
+ t => "\x09",
+ n => "\x0a",
+ v => "\x0b",
+ f => "\x0c",
+ r => "\x0d",
+ e => "\x1b",
+ '\\' => '\\',
+);
+
+my $QQ_STRING = qr{ " (?:\\. | [^"])* " }x;
+my $HASH_LINE = qr{ ^ ($QQ_STRING|\S+) \s* : (?: \s+ (.+?) \s* )? $ }x;
+my $IS_HASH_KEY = qr{ ^ [\w\'\"] }x;
+my $IS_END_YAML = qr{ ^ [.][.][.] \s* $ }x;
+my $IS_QQ_STRING = qr{ ^ $QQ_STRING $ }x;
+
+# Create an empty Data::YAML::Reader object
+sub new {
+ my $class = shift;
+ bless {}, $class;
+}
+
+sub _make_reader {
+ my $self = shift;
+ my $obj = shift;
+
+ croak "Must have something to read from"
+ unless defined $obj;
+
+ if ( my $ref = ref $obj ) {
+ if ( 'CODE' eq $ref ) {
+ return $obj;
+ }
+ elsif ( 'ARRAY' eq $ref ) {
+ return sub { shift @$obj };
+ }
+ elsif ( 'SCALAR' eq $ref ) {
+ return $self->_make_reader( $$obj );
+ }
+ elsif ( 'GLOB' eq $ref || 'IO::Handle' eq $ref ) {
+ return sub {
+ my $line = <$obj>;
+ chomp $line if defined $line;
+ return $line;
+ };
+ }
+ croak "Don't know how to read $ref";
+ }
+ else {
+ my @lines = split( /\n/, $obj );
+ return sub { shift @lines };
+ }
+}
+
+sub read {
+ my $self = shift;
+ my $obj = shift;
+
+ $self->{reader} = $self->_make_reader( $obj );
+ $self->{capture} = [];
+
+ # Prime the reader
+ $self->_next;
+
+ my $doc = $self->_read;
+
+ # The terminator is mandatory otherwise we'd consume a line from the
+ # iterator that doesn't belong to us. If we want to remove this
+ # restriction we'll have to implement look-ahead in the iterators.
+ # Which might not be a bad idea.
+ my $dots = $self->_peek;
+ croak "Missing '...' at end of YAML"
+ unless $dots =~ $IS_END_YAML;
+
+ delete $self->{reader};
+ delete $self->{next};
+
+ return $doc;
+}
+
+sub get_raw {
+ my $self = shift;
+
+ if ( defined( my $capture = $self->{capture} ) ) {
+ return join( "\n", @$capture ) . "\n";
+ }
+
+ return '';
+}
+
+sub _peek {
+ my $self = shift;
+ return $self->{next} unless wantarray;
+ my $line = $self->{next};
+ $line =~ /^ (\s*) (.*) $ /x;
+ return ( $2, length $1 );
+}
+
+sub _next {
+ my $self = shift;
+ croak "_next called with no reader"
+ unless $self->{reader};
+ my $line = $self->{reader}->();
+ $self->{next} = $line;
+ push @{ $self->{capture} }, $line;
+}
+
+sub _read {
+ my $self = shift;
+
+ my $line = $self->_peek;
+
+ # Do we have a document header?
+ if ( $line =~ /^ --- (?: \s* (.+?) \s* )? $/x ) {
+ $self->_next;
+
+ return $self->_read_scalar( $1 ) if defined $1; # Inline?
+
+ my ( $next, $indent ) = $self->_peek;
+
+ if ( $next =~ /^ - /x ) {
+ return $self->_read_array( $indent );
+ }
+ elsif ( $next =~ $IS_HASH_KEY ) {
+ return $self->_read_hash( $next, $indent );
+ }
+ elsif ( $next =~ $IS_END_YAML ) {
+ croak "Premature end of YAML";
+ }
+ else {
+ croak "Unsupported YAML syntax: '$next'";
+ }
+ }
+ else {
+ croak "YAML document header not found";
+ }
+}
+
+# Parse a double quoted string
+sub _read_qq {
+ my $self = shift;
+ my $str = shift;
+
+ unless ( $str =~ s/^ " (.*?) " $/$1/x ) {
+ die "Internal: not a quoted string";
+ }
+
+ $str =~ s/\\"/"/gx;
+ $str =~ s/ \\ ( [tartan\\favez] | x([0-9a-fA-F]{2}) )
+ / (length($1) > 1) ? pack("H2", $2) : $UNESCAPES{$1} /gex;
+ return $str;
+}
+
+# Parse a scalar string to the actual scalar
+sub _read_scalar {
+ my $self = shift;
+ my $string = shift;
+
+ return undef if $string eq '~';
+
+ if ( $string eq '>' || $string eq '|' ) {
+
+ my ( $line, $indent ) = $self->_peek;
+ die "Multi-line scalar content missing" unless defined $line;
+
+ my @multiline = ( $line );
+
+ while ( 1 ) {
+ $self->_next;
+ my ( $next, $ind ) = $self->_peek;
+ last if $ind < $indent;
+ push @multiline, $next;
+ }
+
+ return join( ( $string eq '>' ? ' ' : "\n" ), @multiline ) . "\n";
+ }
+
+ if ( $string =~ /^ ' (.*) ' $/x ) {
+ ( my $rv = $1 ) =~ s/''/'/g;
+ return $rv;
+ }
+
+ if ( $string =~ $IS_QQ_STRING ) {
+ return $self->_read_qq( $string );
+ }
+
+ if ( $string =~ /^['"]/ ) {
+
+ # A quote with folding... we don't support that
+ die __PACKAGE__ . " does not support multi-line quoted scalars";
+ }
+
+ # Regular unquoted string
+ return $string;
+}
+
+sub _read_nested {
+ my $self = shift;
+
+ my ( $line, $indent ) = $self->_peek;
+
+ if ( $line =~ /^ -/x ) {
+ return $self->_read_array( $indent );
+ }
+ elsif ( $line =~ $IS_HASH_KEY ) {
+ return $self->_read_hash( $line, $indent );
+ }
+ else {
+ croak "Unsupported YAML syntax: '$line'";
+ }
+}
+
+# Parse an array
+sub _read_array {
+ my ( $self, $limit ) = @_;
+
+ my $ar = [];
+
+ while ( 1 ) {
+ my ( $line, $indent ) = $self->_peek;
+ last if $indent < $limit || !defined $line || $line =~ $IS_END_YAML;
+
+ if ( $indent > $limit ) {
+ croak "Array line over-indented";
+ }
+
+ if ( $line =~ /^ (- \s+) \S+ \s* : (?: \s+ | $ ) /x ) {
+ $indent += length $1;
+ $line =~ s/-\s+//;
+ push @$ar, $self->_read_hash( $line, $indent );
+ }
+ elsif ( $line =~ /^ - \s* (.+?) \s* $/x ) {
+ croak "Unexpected start of YAML" if $line =~ /^---/;
+ $self->_next;
+ push @$ar, $self->_read_scalar( $1 );
+ }
+ elsif ( $line =~ /^ - \s* $/x ) {
+ $self->_next;
+ push @$ar, $self->_read_nested;
+ }
+ elsif ( $line =~ $IS_HASH_KEY ) {
+ $self->_next;
+ push @$ar, $self->_read_hash( $line, $indent, );
+ }
+ else {
+ croak "Unsupported YAML syntax: '$line'";
+ }
+ }
+
+ return $ar;
+}
+
+sub _read_hash {
+ my ( $self, $line, $limit ) = @_;
+
+ my $indent;
+ my $hash = {};
+
+ while ( 1 ) {
+ croak "Badly formed hash line: '$line'"
+ unless $line =~ $HASH_LINE;
+
+ my ( $key, $value ) = ( $self->_read_scalar( $1 ), $2 );
+ $self->_next;
+
+ if ( defined $value ) {
+ $hash->{$key} = $self->_read_scalar( $value );
+ }
+ else {
+ $hash->{$key} = $self->_read_nested;
+ }
+
+ ( $line, $indent ) = $self->_peek;
+ last if $indent < $limit || !defined $line || $line =~ $IS_END_YAML;
+ }
+
+ return $hash;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Data::YAML::Reader - Parse YAML created by Data::YAML::Writer
+
+=head1 VERSION
+
+This document describes Data::YAML::Reader version 0.0.6
+
+=head1 SYNOPSIS
+
+ use Data::YAML::Reader;
+
+ my $yr = Data::YAML::Reader->new;
+
+ # Read from an array...
+ my $from_array = $yr->read( \@some_array );
+
+ # ...an open file handle...
+ my $from_handle = $yr->read( $some_file );
+
+ # ...a string containing YAML...
+ my $from_string = $yr->read( $some_string );
+
+ # ...or a closure
+ my $from_code = $yr->read( sub { return get_next_line() } );
+
+=head1 DESCRIPTION
+
+In the spirit of L<YAML::Tiny> this is a lightweight, dependency-free
+YAML reader. While C<YAML::Tiny> is designed principally for working
+with configuration files C<Data::YAML> concentrates on the transparent
+round-tripping of YAML serialized Perl data structures.
+
+The syntax accepted by C<Data::YAML::Reader> is a subset of YAML.
+Specifically it is the same subset of YAML that L<Data::YAML::Writer>
+produces. See L<Data::YAML> for more information.
+
+=head1 INTERFACE
+
+=over
+
+=item C<< new >>
+
+Creates and returns an empty C<Data::YAML::Reader> object. No options may be passed.
+
+=item C<< read( $source ) >>
+
+Read YAML and return the data structure it represents. The YAML data may be supplied by a
+
+=over
+
+=item * scalar string containing YAML source
+
+=item * the handle of an open file
+
+=item * a reference to an array of lines
+
+=item * a code reference
+
+=back
+
+In the case of a code reference a subroutine (most likely a closure)
+that returns successive lines of YAML must be supplied. Lines should
+have no trailing newline. When the YAML is exhausted the subroutine must
+return undef.
+
+Returns the data structure (specifically either a scalar, hash ref or
+array ref) that results from decoding the YAML.
+
+=item C<< get_raw >>
+
+Return the raw YAML source from the most recent C<read>.
+
+=back
+
+=head1 BUGS AND LIMITATIONS
+
+No bugs have been reported.
+
+Please report any bugs or feature requests to
+C<data-yaml@rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org>.
+
+=head1 SEE ALSO
+
+L<YAML::Tiny>, L<YAML>, L<YAML::Syck>, L<Config::Tiny>, L<CSS::Tiny>
+
+=head1 AUTHOR
+
+Andy Armstrong C<< <andy@hexten.net> >>
+
+Adam Kennedy wrote L<YAML::Tiny> which provided the template and many of
+the YAML matching regular expressions for this module.
+
+=head1 LICENCE AND COPYRIGHT
+
+Copyright (c) 2007, Andy Armstrong C<< <andy@hexten.net> >>. All rights reserved.
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself. See L<perlartistic>.
+
+=head1 DISCLAIMER OF WARRANTY
+
+BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
+YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+NECESSARY SERVICING, REPAIR, OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
+LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
diff --git a/Data-YAML-0.0.6/lib/Data/YAML/Writer.pm b/Data-YAML-0.0.6/lib/Data/YAML/Writer.pm
new file mode 100644
index 0000000..abce670
--- /dev/null
+++ b/Data-YAML-0.0.6/lib/Data/YAML/Writer.pm
@@ -0,0 +1,269 @@
+package Data::YAML::Writer;
+
+use strict;
+use warnings;
+use Carp;
+
+use vars qw{$VERSION};
+
+$VERSION = '0.0.6';
+
+my $ESCAPE_CHAR = qr{ [\x00-\x1f\"] }x;
+
+my @UNPRINTABLE = qw(
+ z x01 x02 x03 x04 x05 x06 a
+ x08 t n v f r x0e x0f
+ x10 x11 x12 x13 x14 x15 x16 x17
+ x18 x19 x1a e x1c x1d x1e x1f
+);
+
+# Create an empty Data::YAML::Writer object
+sub new {
+ my $class = shift;
+ bless {}, $class;
+}
+
+sub write {
+ my $self = shift;
+
+ croak "Need something to write"
+ unless @_;
+
+ my $obj = shift;
+ my $out = shift || \*STDOUT;
+
+ croak "Need a reference to something I can write to"
+ unless ref $out;
+
+ $self->{writer} = $self->_make_writer( $out );
+
+ $self->_write_obj( '---', $obj );
+ $self->_put( '...' );
+
+ delete $self->{writer};
+}
+
+sub _make_writer {
+ my $self = shift;
+ my $out = shift;
+
+ my $ref = ref $out;
+
+ if ( 'CODE' eq $ref ) {
+ return $out;
+ }
+ elsif ( 'ARRAY' eq $ref ) {
+ return sub { push @$out, shift };
+ }
+ elsif ( 'SCALAR' eq $ref ) {
+ return sub { $$out .= shift() . "\n" };
+ }
+ elsif ( 'GLOB' eq $ref || 'IO::Handle' eq $ref ) {
+ return sub { print $out shift(), "\n" };
+ }
+
+ croak "Can't write to $out";
+}
+
+sub _put {
+ my $self = shift;
+ $self->{writer}->( join '', @_ );
+}
+
+sub _enc_scalar {
+ my $self = shift;
+ my $val = shift;
+
+ return '~' unless defined $val;
+
+ if ( $val =~ /$ESCAPE_CHAR/ ) {
+ $val =~ s/\\/\\\\/g;
+ $val =~ s/"/\\"/g;
+ $val =~ s/ ( [\x00-\x1f] ) / '\\' . $UNPRINTABLE[ ord($1) ] /gex;
+ return qq{"$val"};
+ }
+
+ if ( length( $val ) == 0 or $val =~ /\s/ ) {
+ $val =~ s/'/''/;
+ return "'$val'";
+ }
+
+ return $val;
+}
+
+sub _write_obj {
+ my $self = shift;
+ my $prefix = shift;
+ my $obj = shift;
+ my $indent = shift || 0;
+
+ if ( my $ref = ref $obj ) {
+ my $pad = ' ' x $indent;
+ $self->_put( $prefix );
+ if ( 'HASH' eq $ref ) {
+ for my $key ( sort keys %$obj ) {
+ my $value = $obj->{$key};
+ $self->_write_obj( $pad . $self->_enc_scalar( $key ) . ':',
+ $value, $indent + 1 );
+ }
+ }
+ elsif ( 'ARRAY' eq $ref ) {
+ for my $value ( @$obj ) {
+ $self->_write_obj( $pad . '-', $value, $indent + 1 );
+ }
+ }
+ else {
+ croak "Don't know how to encode $ref";
+ }
+ }
+ else {
+ $self->_put( $prefix, ' ', $self->_enc_scalar( $obj ) );
+ }
+}
+
+1;
+
+__END__
+
+
+=head1 NAME
+
+Data::YAML::Writer - Easy YAML serialisation
+
+=head1 VERSION
+
+This document describes Data::YAML::Writer version 0.0.6
+
+=head1 SYNOPSIS
+
+ use Data::YAML::Writer;
+
+ my $data = {
+ one => 1,
+ two => 2,
+ three => [ 1, 2, 3 ],
+ };
+
+ my $yw = Data::YAML::Writer->new;
+
+ # Write to an array...
+ $yw->write( $data, \@some_array );
+
+ # ...an open file handle...
+ $yw->write( $data, $some_file_handle );
+
+ # ...a string ...
+ $yw->write( $data, \$some_string );
+
+ # ...or a closure
+ $yw->write( $data, sub {
+ my $line = shift;
+ print "$line\n";
+ } );
+
+
+=head1 DESCRIPTION
+
+Encodes a scalar, hash reference or array reference as YAML.
+
+In the spirit of L<YAML::Tiny> this is a lightweight, dependency-free
+YAML writer. While C<YAML::Tiny> is designed principally for working
+with configuration files C<Data::YAML> concentrates on the transparent
+round-tripping of YAML serialized Perl data structures.
+
+The syntax produced by C<Data::YAML::Writer> is a subset of YAML.
+Specifically it is the same subset of YAML that L<Data::YAML::Reader>
+consumes. See L<Data::YAML> for more information.
+
+=head1 INTERFACE
+
+=over
+
+=item C<< new >>
+
+The constructor C<new> creates and returns an empty C<Data::YAML::Writer> object.
+
+=item C<< write( $obj, $output ) >>
+
+Encode a scalar, hash reference or array reference as YAML.
+
+ my $writer = sub {
+ my $line = shift;
+ print SOMEFILE "$line\n";
+ };
+
+ my $data = {
+ one => 1,
+ two => 2,
+ three => [ 1, 2, 3 ],
+ };
+
+ my $yw = Data::YAML::Writer->new;
+ $yw->write( $data, $writer );
+
+
+The C< $output > argument may be
+
+=over
+
+=item * a reference to a scalar to append YAML to
+
+=item * the handle of an open file
+
+=item * a reference to an array into which YAML will be pushed
+
+=item * a code reference
+
+=back
+
+If you supply a code reference the subroutine will be called once for
+each line of output with the line as its only argument. Passed lines
+will have no trailing newline.
+
+=back
+
+=head1 BUGS AND LIMITATIONS
+
+No bugs have been reported.
+
+Please report any bugs or feature requests to
+C<data-yaml@rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org>.
+
+=head1 SEE ALSO
+
+L<YAML::Tiny>, L<YAML>, L<YAML::Syck>, L<Config::Tiny>, L<CSS::Tiny>
+
+=head1 AUTHOR
+
+Andy Armstrong C<< <andy@hexten.net> >>
+
+=head1 LICENCE AND COPYRIGHT
+
+Copyright (c) 2007, Andy Armstrong C<< <andy@hexten.net> >>. All rights reserved.
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself. See L<perlartistic>.
+
+=head1 DISCLAIMER OF WARRANTY
+
+BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
+YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+NECESSARY SERVICING, REPAIR, OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
+LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
diff --git a/Data-YAML-0.0.6/pm_to_blib b/Data-YAML-0.0.6/pm_to_blib
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Data-YAML-0.0.6/pm_to_blib
diff --git a/Data-YAML-0.0.6/t/00.load.t b/Data-YAML-0.0.6/t/00.load.t
new file mode 100644
index 0000000..4b0baad
--- /dev/null
+++ b/Data-YAML-0.0.6/t/00.load.t
@@ -0,0 +1,8 @@
+use Test::More tests => 2;
+
+BEGIN {
+ use_ok( 'Data::YAML::Reader' );
+ use_ok( 'Data::YAML::Writer' );
+}
+
+diag( "Testing Data::YAML $Data::YAML::Reader::VERSION" );
diff --git a/Data-YAML-0.0.6/t/10-input.t b/Data-YAML-0.0.6/t/10-input.t
new file mode 100644
index 0000000..70b230e
--- /dev/null
+++ b/Data-YAML-0.0.6/t/10-input.t
@@ -0,0 +1,103 @@
+use strict;
+use warnings;
+use Test::More tests => 12;
+use Data::Dumper;
+
+use Data::YAML::Reader;
+
+my $in = [
+ "---",
+ "bill-to:",
+ " address:",
+ " city: \"Royal Oak\"",
+ " lines: \"458 Walkman Dr.\\nSuite #292\\n\"",
+ " postal: 48046",
+ " state: MI",
+ " family: Dumars",
+ " given: Chris",
+ "comments: \"Late afternoon is best. Backup contact is Nancy Billsmer \@ 338-4338\\n\"",
+ "date: 2001-01-23",
+ "invoice: 34843",
+ "product:",
+ " -",
+ " description: Basketball",
+ " price: 450.00",
+ " quantity: 4",
+ " sku: BL394D",
+ " -",
+ " description: \"Super Hoop\"",
+ " price: 2392.00",
+ " quantity: 1",
+ " sku: BL4438H",
+ "tax: 251.42",
+ "total: 4443.52",
+ "...",
+];
+
+my $out = {
+ 'bill-to' => {
+ 'given' => 'Chris',
+ 'address' => {
+ 'city' => 'Royal Oak',
+ 'postal' => '48046',
+ 'lines' => "458 Walkman Dr.\nSuite #292\n",
+ 'state' => 'MI'
+ },
+ 'family' => 'Dumars'
+ },
+ 'invoice' => '34843',
+ 'date' => '2001-01-23',
+ 'tax' => '251.42',
+ 'product' => [
+ {
+ 'sku' => 'BL394D',
+ 'quantity' => '4',
+ 'price' => '450.00',
+ 'description' => 'Basketball'
+ },
+ {
+ 'sku' => 'BL4438H',
+ 'quantity' => '1',
+ 'price' => '2392.00',
+ 'description' => 'Super Hoop'
+ }
+ ],
+ 'comments' =>
+ "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n",
+ 'total' => '4443.52'
+};
+
+my @lines = @$in;
+my $scalar = join( "\n", @lines ) . "\n";
+
+my @source = (
+ {
+ name => 'Array reference',
+ source => $in,
+ },
+ {
+ name => 'Closure',
+ source => sub { shift @lines },
+ },
+ {
+ name => 'Scalar',
+ source => $scalar,
+ },
+ {
+ name => 'Scalar ref',
+ source => \$scalar,
+ },
+);
+
+for my $src ( @source ) {
+ my $name = $src->{name};
+ ok my $yaml = Data::YAML::Reader->new, "$name: Created";
+ isa_ok $yaml, 'Data::YAML::Reader';
+
+ my $got = eval { $yaml->read( $src->{source} ) };
+ unless ( is_deeply $got, $out, "$name: Result matches" ) {
+ local $Data::Dumper::Useqq = $Data::Dumper::Useqq = 1;
+ diag( Data::Dumper->Dump( [$got], ['$got'] ) );
+ diag( Data::Dumper->Dump( [$out], ['$expected'] ) );
+ }
+}
diff --git a/Data-YAML-0.0.6/t/20-reader.t b/Data-YAML-0.0.6/t/20-reader.t
new file mode 100644
index 0000000..fc6806f
--- /dev/null
+++ b/Data-YAML-0.0.6/t/20-reader.t
@@ -0,0 +1,419 @@
+use strict;
+use warnings;
+use Test::More;
+use Data::Dumper;
+
+use Data::YAML::Reader;
+
+my @SCHEDULE;
+
+BEGIN {
+ @SCHEDULE = (
+ {
+ name => 'Hello World',
+ in => [ '--- Hello, World', '...', ],
+ out => "Hello, World",
+ },
+ {
+ name => 'Hello World 2',
+ in => [ '--- \'Hello, \'\'World\'', '...', ],
+ out => "Hello, 'World",
+ },
+ {
+ name => 'Hello World 3',
+ in => [ '--- "Hello, World"', '...', ],
+ out => "Hello, World",
+ },
+ {
+ name => 'Hello World 4',
+ in => [ '--- "Hello, World"', '...', ],
+ out => "Hello, World",
+ },
+ {
+ name => 'Hello World 4',
+ in => [ '--- >', ' Hello,', ' World', '...', ],
+ out => "Hello, World\n",
+ },
+ {
+ name => 'Hello World 5',
+ in => [ '--- >', ' Hello,', ' World', '...', ],
+ error => qr{Missing\s+'[.][.][.]'},
+ },
+ {
+ name => 'Simple array',
+ in => [ '---', '- 1', '- 2', '- 3', '...', ],
+ out => [ '1', '2', '3' ],
+ },
+ {
+ name => 'Mixed array',
+ in => [ '---', '- 1', '- \'two\'', '- "three\n"', '...', ],
+ out => [ '1', 'two', "three\n" ],
+ },
+ {
+ name => 'Hash in array',
+ in => [ '---', '- 1', '- two: 2', '- 3', '...', ],
+ out => [ '1', { two => '2' }, '3' ],
+ },
+ {
+ name => 'Hash in array 2',
+ in => [ '---', '- 1', '- two: 2', ' three: 3', '- 4', '...', ],
+ out => [ '1', { two => '2', three => '3' }, '4' ],
+ },
+ {
+ name => 'Nested array',
+ in => [
+ '---',
+ '- one',
+ '-',
+ ' - two',
+ ' -',
+ ' - three',
+ ' - four',
+ '- five',
+ '...',
+ ],
+ out => [ 'one', [ 'two', ['three'], 'four' ], 'five' ],
+ },
+ {
+ name => 'Nested hash',
+ in => [
+ '---',
+ 'one:',
+ ' five: 5',
+ ' two:',
+ ' four: 4',
+ ' three: 3',
+ 'six: 6',
+ '...',
+ ],
+ out => {
+ one => { two => { three => '3', four => '4' }, five => '5' },
+ six => '6'
+ },
+ },
+
+ {
+ name => 'Original YAML::Tiny test',
+ in => [
+ '---',
+ 'invoice: 34843',
+ 'date : 2001-01-23',
+ 'bill-to:',
+ ' given : Chris',
+ ' family : Dumars',
+ ' address:',
+ ' lines: |',
+ ' 458 Walkman Dr.',
+ ' Suite #292',
+ ' city : Royal Oak',
+ ' state : MI',
+ ' postal : 48046',
+ 'product:',
+ ' - sku : BL394D',
+ ' quantity : 4',
+ ' description : Basketball',
+ ' price : 450.00',
+ ' - sku : BL4438H',
+ ' quantity : 1',
+ ' description : Super Hoop',
+ ' price : 2392.00',
+ 'tax : 251.42',
+ 'total: 4443.52',
+ 'comments: >',
+ ' Late afternoon is best.',
+ ' Backup contact is Nancy',
+ ' Billsmer @ 338-4338',
+ '...',
+ ],
+ out => {
+ 'bill-to' => {
+ 'given' => 'Chris',
+ 'address' => {
+ 'city' => 'Royal Oak',
+ 'postal' => '48046',
+ 'lines' => "458 Walkman Dr.\nSuite #292\n",
+ 'state' => 'MI'
+ },
+ 'family' => 'Dumars'
+ },
+ 'invoice' => '34843',
+ 'date' => '2001-01-23',
+ 'tax' => '251.42',
+ 'product' => [
+ {
+ 'sku' => 'BL394D',
+ 'quantity' => '4',
+ 'price' => '450.00',
+ 'description' => 'Basketball'
+ },
+ {
+ 'sku' => 'BL4438H',
+ 'quantity' => '1',
+ 'price' => '2392.00',
+ 'description' => 'Super Hoop'
+ }
+ ],
+ 'comments' =>
+ "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n",
+ 'total' => '4443.52'
+ }
+ },
+
+ # Tests harvested from YAML::Tiny
+ {
+ in => ['...'],
+ name => 'Regression: empty',
+ error => qr{document\s+header\s+not\s+found}
+ },
+ {
+ in => [ '# comment', '...' ],
+ name => 'Regression: only_comment',
+ error => qr{document\s+header\s+not\s+found}
+ },
+ {
+ out => undef,
+ in => [ '---', '...' ],
+ name => 'Regression: only_header',
+ error => qr{Premature\s+end}i,
+ },
+ {
+ out => undef,
+ in => [ '---', '---', '...' ],
+ name => 'Regression: two_header',
+ error => qr{Unexpected\s+start}i,
+ },
+ {
+ out => undef,
+ in => [ '--- ~', '...' ],
+ name => 'Regression: one_undef'
+ },
+ {
+ out => undef,
+ in => [ '--- ~', '...' ],
+ name => 'Regression: one_undef2'
+ },
+ {
+ in => [ '--- ~', '---', '...' ],
+ name => 'Regression: two_undef',
+ error => qr{Missing\s+'[.][.][.]'},
+ },
+ {
+ out => 'foo',
+ in => [ '--- foo', '...' ],
+ name => 'Regression: one_scalar',
+ },
+ {
+ out => 'foo',
+ in => [ '--- foo', '...' ],
+ name => 'Regression: one_scalar2',
+ },
+ {
+ in => [ '--- foo', '--- bar', '...' ],
+ name => 'Regression: two_scalar',
+ error => qr{Missing\s+'[.][.][.]'},
+ },
+ {
+ out => ['foo'],
+ in => [ '---', '- foo', '...' ],
+ name => 'Regression: one_list1'
+ },
+ {
+ out => [ 'foo', 'bar' ],
+ in => [ '---', '- foo', '- bar', '...' ],
+ name => 'Regression: one_list2'
+ },
+ {
+ out => [ undef, 'bar' ],
+ in => [ '---', '- ~', '- bar', '...' ],
+ name => 'Regression: one_listundef'
+ },
+ {
+ out => { 'foo' => 'bar' },
+ in => [ '---', 'foo: bar', '...' ],
+ name => 'Regression: one_hash1'
+ },
+ {
+ out => {
+ 'foo' => 'bar',
+ 'this' => undef
+ },
+ in => [ '---', 'foo: bar', 'this: ~', '...' ],
+ name => 'Regression: one_hash2'
+ },
+ {
+ out => { 'foo' => [ 'bar', undef, 'baz' ] },
+ in => [ '---', 'foo:', ' - bar', ' - ~', ' - baz', '...' ],
+ name => 'Regression: array_in_hash'
+ },
+ {
+ out => {
+ 'bar' => { 'foo' => 'bar' },
+ 'foo' => undef
+ },
+ in => [ '---', 'foo: ~', 'bar:', ' foo: bar', '...' ],
+ name => 'Regression: hash_in_hash'
+ },
+ {
+ out => [
+ {
+ 'foo' => undef,
+ 'this' => 'that'
+ },
+ 'foo', undef,
+ {
+ 'foo' => 'bar',
+ 'this' => 'that'
+ }
+ ],
+ in => [
+ '---',
+ '-',
+ ' foo: ~',
+ ' this: that',
+ '- foo',
+ '- ~',
+ '-',
+ ' foo: bar',
+ ' this: that',
+ '...'
+ ],
+ name => 'Regression: hash_in_array'
+ },
+ {
+ out => ['foo'],
+ in => [ '---', '- \'foo\'', '...' ],
+ name => 'Regression: single_quote1'
+ },
+ {
+ out => [' '],
+ in => [ '---', '- \' \'', '...' ],
+ name => 'Regression: single_spaces'
+ },
+ {
+ out => [''],
+ in => [ '---', '- \'\'', '...' ],
+ name => 'Regression: single_null'
+ },
+ {
+ out => ' ',
+ in => [ '--- " "', '...' ],
+ name => 'Regression: only_spaces'
+ },
+ {
+ out => [
+ undef,
+ {
+ 'foo' => 'bar',
+ 'this' => 'that'
+ },
+ 'baz'
+ ],
+ in =>
+ [ '---', '- ~', '- foo: bar', ' this: that', '- baz', '...' ],
+ name => 'Regression: inline_nested_hash'
+ },
+ {
+ name => "Unprintables",
+ in => [
+ "---",
+ "- \"\\z\\x01\\x02\\x03\\x04\\x05\\x06\\a\\x08\\t\\n\\v\\f\\r\\x0e\\x0f\"",
+ "- \"\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\e\\x1c\\x1d\\x1e\\x1f\"",
+ "- \" !\\\"#\$%&'()*+,-./\"",
+ "- 0123456789:;<=>?",
+ "- '\@ABCDEFGHIJKLMNO'",
+ "- 'PQRSTUVWXYZ[\\]^_'",
+ "- '`abcdefghijklmno'",
+ "- 'pqrstuvwxyz{|}~\177'",
+ "- \200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217",
+ "- \220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237",
+ "- \240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257",
+ "- \260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277",
+ "- \300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317",
+ "- \320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337",
+ "- \340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357",
+ "- \360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377",
+ "..."
+ ],
+ out => [
+ "\0\1\2\3\4\5\6\a\b\t\n\13\f\r\16\17",
+ "\20\21\22\23\24\25\26\27\30\31\32\e\34\35\36\37",
+ " !\"#\$%&'()*+,-./",
+ "0123456789:;<=>?",
+ "\@ABCDEFGHIJKLMNO",
+ "PQRSTUVWXYZ[\\]^_",
+ "`abcdefghijklmno",
+ "pqrstuvwxyz{|}~\177",
+ "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217",
+ "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237",
+ "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257",
+ "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277",
+ "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317",
+ "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337",
+ "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357",
+ "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"
+ ],
+ },
+ {
+ name => 'Quoted hash keys',
+ in => [
+ '---', ' "quoted": Magic!', ' "\n\t": newline, tab', '...',
+ ],
+ out => {
+ quoted => 'Magic!',
+ "\n\t" => 'newline, tab',
+ },
+ },
+ );
+
+ plan tests => @SCHEDULE * 5;
+}
+
+sub iter {
+ my $ar = shift;
+ return sub {
+ return shift @$ar;
+ };
+}
+
+for my $test ( @SCHEDULE ) {
+ my $name = $test->{name};
+ ok my $yaml = Data::YAML::Reader->new, "$name: Created";
+ isa_ok $yaml, 'Data::YAML::Reader';
+
+ # diag "$name\n";
+
+ # unless ( $test->{in} ) {
+ # pass for 1 .. 2;
+ # use YAML;
+ # diag "Input for test:\n";
+ # diag( Dump( $test->{out} ) );
+ # next;
+ # }
+
+ my $source = join( "\n", @{ $test->{in} } ) . "\n";
+
+ my $iter = iter( $test->{in} );
+ my $got = eval { $yaml->read( $iter ) };
+
+ my $raw = $yaml->get_raw;
+
+ if ( my $err = $test->{error} ) {
+ unless ( like $@, $err, "$name: Error message" ) {
+ diag "Error: $@\n";
+ }
+ ok !$got, "$name: No result";
+ pass;
+ }
+ else {
+ my $want = $test->{out};
+ unless ( ok !$@, "$name: No error" ) {
+ diag "Error: $@\n";
+ }
+ unless ( is_deeply $got, $want, "$name: Result matches" ) {
+ local $Data::Dumper::Useqq = $Data::Dumper::Useqq = 1;
+ diag( Data::Dumper->Dump( [$got], ['$got'] ) );
+ diag( Data::Dumper->Dump( [$want], ['$expected'] ) );
+ }
+ is $raw, $source, "$name: Captured source matches";
+ }
+}
diff --git a/Data-YAML-0.0.6/t/30-output.t b/Data-YAML-0.0.6/t/30-output.t
new file mode 100644
index 0000000..56cfb0a
--- /dev/null
+++ b/Data-YAML-0.0.6/t/30-output.t
@@ -0,0 +1,107 @@
+use strict;
+use warnings;
+use Test::More tests => 9;
+use Data::Dumper;
+
+use Data::YAML::Writer;
+
+my $out = [
+ "---",
+ "bill-to:",
+ " address:",
+ " city: 'Royal Oak'",
+ " lines: \"458 Walkman Dr.\\nSuite #292\\n\"",
+ " postal: 48046",
+ " state: MI",
+ " family: Dumars",
+ " given: Chris",
+ "comments: \"Late afternoon is best. Backup contact is Nancy Billsmer \@ 338-4338\\n\"",
+ "date: 2001-01-23",
+ "invoice: 34843",
+ "product:",
+ " -",
+ " description: Basketball",
+ " price: 450.00",
+ " quantity: 4",
+ " sku: BL394D",
+ " -",
+ " description: 'Super Hoop'",
+ " price: 2392.00",
+ " quantity: 1",
+ " sku: BL4438H",
+ "tax: 251.42",
+ "total: 4443.52",
+ "...",
+];
+
+my $in = {
+ 'bill-to' => {
+ 'given' => 'Chris',
+ 'address' => {
+ 'city' => 'Royal Oak',
+ 'postal' => '48046',
+ 'lines' => "458 Walkman Dr.\nSuite #292\n",
+ 'state' => 'MI'
+ },
+ 'family' => 'Dumars'
+ },
+ 'invoice' => '34843',
+ 'date' => '2001-01-23',
+ 'tax' => '251.42',
+ 'product' => [
+ {
+ 'sku' => 'BL394D',
+ 'quantity' => '4',
+ 'price' => '450.00',
+ 'description' => 'Basketball'
+ },
+ {
+ 'sku' => 'BL4438H',
+ 'quantity' => '1',
+ 'price' => '2392.00',
+ 'description' => 'Super Hoop'
+ }
+ ],
+ 'comments' =>
+ "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n",
+ 'total' => '4443.52'
+};
+
+my @buf1 = ();
+my @buf2 = ();
+my $buf3 = '';
+
+my @destination = (
+ {
+ name => 'Array reference',
+ destination => \@buf1,
+ normalise => sub { return \@buf1 },
+ },
+ {
+ name => 'Closure',
+ destination => sub { push @buf2, shift },
+ normalise => sub { return \@buf2 },
+ },
+ {
+ name => 'Scalar',
+ destination => \$buf3,
+ normalise => sub {
+ my @ar = split( /\n/, $buf3 );
+ return \@ar;
+ },
+ },
+);
+
+for my $dest ( @destination ) {
+ my $name = $dest->{name};
+ ok my $yaml = Data::YAML::Writer->new, "$name: Created";
+ isa_ok $yaml, 'Data::YAML::Writer';
+
+ $yaml->write( $in, $dest->{destination} );
+ my $got = $dest->{normalise}->();
+ unless ( is_deeply $got, $out, "$name: Result matches" ) {
+ local $Data::Dumper::Useqq = $Data::Dumper::Useqq = 1;
+ diag( Data::Dumper->Dump( [$got], ['$got'] ) );
+ diag( Data::Dumper->Dump( [$out], ['$expected'] ) );
+ }
+}
diff --git a/Data-YAML-0.0.6/t/40-writer.t b/Data-YAML-0.0.6/t/40-writer.t
new file mode 100644
index 0000000..4d70780
--- /dev/null
+++ b/Data-YAML-0.0.6/t/40-writer.t
@@ -0,0 +1,200 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More;
+use Data::Dumper;
+use Data::YAML::Reader;
+use Data::YAML::Writer;
+
+my @SCHEDULE;
+
+BEGIN {
+ @SCHEDULE = (
+ {
+ name => 'Simple scalar',
+ in => 1,
+ out => [ '--- 1', '...', ],
+ },
+ {
+ name => 'Undef',
+ in => undef,
+ out => [ '--- ~', '...', ],
+ },
+ {
+ name => 'Unprintable',
+ in => "\x01\n\t",
+ out => [ '--- "\x01\n\t"', '...', ],
+ },
+ {
+ name => 'Simple array',
+ in => [ 1, 2, 3 ],
+ out => [ '---', '- 1', '- 2', '- 3', '...', ],
+ },
+ {
+ name => 'Array, two elements, undef',
+ in => [ undef, undef ],
+ out => [ '---', '- ~', '- ~', '...', ],
+ },
+ {
+ name => 'Nested array',
+ in => [ 1, 2, [ 3, 4 ], 5 ],
+ out =>
+ [ '---', '- 1', '- 2', '-', ' - 3', ' - 4', '- 5', '...', ],
+ },
+ {
+ name => 'Simple hash',
+ in => { one => '1', two => '2', three => '3' },
+ out => [ '---', 'one: 1', 'three: 3', 'two: 2', '...', ],
+ },
+ {
+ name => 'Nested hash',
+ in => {
+ one => '1',
+ two => '2',
+ more => { three => '3', four => '4' }
+ },
+ out => [
+ '---',
+ 'more:',
+ ' four: 4',
+ ' three: 3',
+ 'one: 1',
+ 'two: 2',
+ '...',
+ ],
+ },
+ {
+ name => 'Unprintable key',
+ in => { one => '1', "\x02" => '2', three => '3' },
+ out => [ '---', '"\x02": 2', 'one: 1', 'three: 3', '...', ],
+ },
+ {
+ name => 'Empty key',
+ in => { '' => 'empty' },
+ out => [ '---', "'': empty", '...', ],
+ },
+ {
+ name => 'Empty value',
+ in => { '' => '' },
+ out => [ '---', "'': ''", '...', ],
+ },
+ {
+ name => 'Complex',
+ in => {
+ 'bill-to' => {
+ 'given' => 'Chris',
+ 'address' => {
+ 'city' => 'Royal Oak',
+ 'postal' => '48046',
+ 'lines' => "458 Walkman Dr.\nSuite #292\n",
+ 'state' => 'MI'
+ },
+ 'family' => 'Dumars'
+ },
+ 'invoice' => '34843',
+ 'date' => '2001-01-23',
+ 'tax' => '251.42',
+ 'product' => [
+ {
+ 'sku' => 'BL394D',
+ 'quantity' => '4',
+ 'price' => '450.00',
+ 'description' => 'Basketball'
+ },
+ {
+ 'sku' => 'BL4438H',
+ 'quantity' => '1',
+ 'price' => '2392.00',
+ 'description' => 'Super Hoop'
+ }
+ ],
+ 'comments' =>
+ "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n",
+ 'total' => '4443.52'
+ },
+ out => [
+ "---",
+ "bill-to:",
+ " address:",
+ " city: 'Royal Oak'",
+ " lines: \"458 Walkman Dr.\\nSuite #292\\n\"",
+ " postal: 48046",
+ " state: MI",
+ " family: Dumars",
+ " given: Chris",
+ "comments: \"Late afternoon is best. Backup contact is Nancy Billsmer \@ 338-4338\\n\"",
+ "date: 2001-01-23",
+ "invoice: 34843",
+ "product:",
+ " -",
+ " description: Basketball",
+ " price: 450.00",
+ " quantity: 4",
+ " sku: BL394D",
+ " -",
+ " description: 'Super Hoop'",
+ " price: 2392.00",
+ " quantity: 1",
+ " sku: BL4438H",
+ "tax: 251.42",
+ "total: 4443.52",
+ "...",
+ ],
+ },
+ );
+
+ plan tests => @SCHEDULE * 5;
+}
+
+sub iter {
+ my $ar = shift;
+ return sub {
+ return shift @$ar;
+ };
+}
+
+for my $test ( @SCHEDULE ) {
+ my $name = $test->{name};
+ ok my $yaml = Data::YAML::Writer->new, "$name: Created";
+ isa_ok $yaml, 'Data::YAML::Writer';
+
+ my $got = [];
+ my $writer = sub { push @$got, shift };
+
+ my $data = $test->{in};
+
+ eval { $yaml->write( $data, $writer ) };
+
+ if ( my $err = $test->{error} ) {
+ unless ( like $@, $err, "$name: Error message" ) {
+ diag "Error: $@\n";
+ }
+ is_deeply $got, [], "$name: No result";
+ pass;
+ }
+ else {
+ my $want = $test->{out};
+ unless ( ok !$@, "$name: No error" ) {
+ diag "Error: $@\n";
+ }
+ unless ( is_deeply $got, $want, "$name: Result matches" ) {
+ local $Data::Dumper::Useqq = $Data::Dumper::Useqq = 1;
+ diag( Data::Dumper->Dump( [$got], ['$got'] ) );
+ diag( Data::Dumper->Dump( [$want], ['$expected'] ) );
+ }
+
+ my $yr = Data::YAML::Reader->new;
+
+ # Now try parsing it
+ my $reader = sub { shift @$got };
+ my $parsed = $yr->read( $reader );
+
+ unless ( is_deeply $parsed, $data, "$name: Reparse OK" ) {
+ local $Data::Dumper::Useqq = $Data::Dumper::Useqq = 1;
+ diag( Data::Dumper->Dump( [$parsed], ['$parsed'] ) );
+ diag( Data::Dumper->Dump( [$data], ['$data'] ) );
+ }
+ }
+}
+
diff --git a/Data-YAML-0.0.6/t/pod-coverage.t b/Data-YAML-0.0.6/t/pod-coverage.t
new file mode 100644
index 0000000..c412996
--- /dev/null
+++ b/Data-YAML-0.0.6/t/pod-coverage.t
@@ -0,0 +1,9 @@
+#!perl -T
+
+use Test::More;
+eval "use Test::Pod::Coverage 1.04";
+plan skip_all =>
+ "Test::Pod::Coverage 1.04 required for testing POD coverage"
+ if $@;
+all_pod_coverage_ok(
+ { private => [ qr{^BUILD|DEMOLISH|AUTOMETHOD|START$}, qr{^_} ] } );
diff --git a/Data-YAML-0.0.6/t/pod.t b/Data-YAML-0.0.6/t/pod.t
new file mode 100644
index 0000000..976d7cd
--- /dev/null
+++ b/Data-YAML-0.0.6/t/pod.t
@@ -0,0 +1,6 @@
+#!perl -T
+
+use Test::More;
+eval "use Test::Pod 1.14";
+plan skip_all => "Test::Pod 1.14 required for testing POD" if $@;
+all_pod_files_ok();
diff --git a/README b/README
new file mode 100644
index 0000000..0f580f9
--- /dev/null
+++ b/README
@@ -0,0 +1,6 @@
+Based on Data-YAML version 0.0.6 (Copyright (C) 2007, Andy Armstrong), but it
+is so thoroughly rewritten that I don't consider it derived work and I don't
+feel the need to resolve what "This library is free software; you can
+redistribute it and/or modify it under the same terms as Perl itself." actually
+means.
+
diff --git a/test/00.load.py b/test/00.load.py
new file mode 100644
index 0000000..e4f3f5f
--- /dev/null
+++ b/test/00.load.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+import unittest
+
+class TestBasics(unittest.TestCase):
+ def test_import(self):
+ import yamlish
+ from yamlish import Reader
+ from yamlish import Writer
+ self.assert_(True,
+ "Testing import of yamlish, version %s." % yamlish.__version__)
diff --git a/test/10-input.py b/test/10-input.py
new file mode 100644
index 0000000..5ec8d96
--- /dev/null
+++ b/test/10-input.py
@@ -0,0 +1,103 @@
+# -*- coding: utf-8 -*-
+import unittest
+
+IN = """
+ ---
+ bill-to:
+ address:
+ city: "Royal Oak"
+ lines: "458 Walkman Dr.\nSuite #292\n"
+ postal: 48046
+ state: MI
+ family: Dumars
+ given: Chris
+ comments: "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n"
+ date: 2001-01-23
+ invoice: 34843
+ product:
+ -
+ description: Basketball
+ price: 450.00
+ quantity: 4
+ sku: BL394D
+ -
+ description: "Super Hoop"
+ price: 2392.00
+ quantity: 1
+ sku: BL4438H
+ tax: 251.42
+ total: 4443.52
+ ...
+"""
+
+OUT = {
+ 'bill-to': {
+ 'given': 'Chris',
+ 'address': {
+ 'city': 'Royal Oak',
+ 'postal': '48046',
+ 'lines': "458 Walkman Dr.\nSuite #292\n",
+ 'state': 'MI'
+ },
+ 'family': 'Dumars'
+ },
+ 'invoice': '34843',
+ 'date': '2001-01-23',
+ 'tax': '251.42',
+ 'product': [
+ {
+ 'sku': 'BL394D',
+ 'quantity': '4',
+ 'price': '450.00',
+ 'description': 'Basketball'
+ },
+ {
+ 'sku': 'BL4438H',
+ 'quantity': '1',
+ 'price': '2392.00',
+ 'description': 'Super Hoop'
+ }
+ ],
+ 'comments':
+ "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n",
+ 'total': '4443.52'
+}
+
+class TestInput(unittest.TestCase):
+ """FIXME description of this class"""
+ def test_reader(self):
+ #my @lines = @$in;
+ #my $scalar = join("\n", @lines) . "\n";
+ #
+ #my @source = (
+ # {
+ # name= > 'Array reference',
+ # source= > $in,
+ # },
+ # {
+ # name= > 'Closure',
+ # source= > sub { shift @lines },
+ # },
+ # {
+ # name= > 'Scalar',
+ # source= > $scalar,
+ # },
+ # {
+ # name= > 'Scalar ref',
+ # source= > \$scalar,
+ # },
+ #);
+ #
+ #for my $src (@source) {
+ # my $name = $src -> {name};
+ # ok my $yaml = Data::YAML::Reader -> new, "$name: Created";
+ # isa_ok $yaml, 'Data::YAML::Reader';
+ #
+ # my $got = eval { $yaml -> read($src -> {source}) };
+ # unless (is_deeply $got, $out, "$name: Result matches") {
+ # local $Data::Dumper::Useqq = $Data::Dumper::Useqq = 1;
+ # diag(Data::Dumper -> Dump([$got], ['$got']));
+ # diag(Data::Dumper -> Dump([$out], ['$expected']));
+ # }
+ #}
+ pass
diff --git a/test/20-reader.py b/test/20-reader.py
new file mode 100644
index 0000000..fc6806f
--- /dev/null
+++ b/test/20-reader.py
@@ -0,0 +1,419 @@
+use strict;
+use warnings;
+use Test::More;
+use Data::Dumper;
+
+use Data::YAML::Reader;
+
+my @SCHEDULE;
+
+BEGIN {
+ @SCHEDULE = (
+ {
+ name => 'Hello World',
+ in => [ '--- Hello, World', '...', ],
+ out => "Hello, World",
+ },
+ {
+ name => 'Hello World 2',
+ in => [ '--- \'Hello, \'\'World\'', '...', ],
+ out => "Hello, 'World",
+ },
+ {
+ name => 'Hello World 3',
+ in => [ '--- "Hello, World"', '...', ],
+ out => "Hello, World",
+ },
+ {
+ name => 'Hello World 4',
+ in => [ '--- "Hello, World"', '...', ],
+ out => "Hello, World",
+ },
+ {
+ name => 'Hello World 4',
+ in => [ '--- >', ' Hello,', ' World', '...', ],
+ out => "Hello, World\n",
+ },
+ {
+ name => 'Hello World 5',
+ in => [ '--- >', ' Hello,', ' World', '...', ],
+ error => qr{Missing\s+'[.][.][.]'},
+ },
+ {
+ name => 'Simple array',
+ in => [ '---', '- 1', '- 2', '- 3', '...', ],
+ out => [ '1', '2', '3' ],
+ },
+ {
+ name => 'Mixed array',
+ in => [ '---', '- 1', '- \'two\'', '- "three\n"', '...', ],
+ out => [ '1', 'two', "three\n" ],
+ },
+ {
+ name => 'Hash in array',
+ in => [ '---', '- 1', '- two: 2', '- 3', '...', ],
+ out => [ '1', { two => '2' }, '3' ],
+ },
+ {
+ name => 'Hash in array 2',
+ in => [ '---', '- 1', '- two: 2', ' three: 3', '- 4', '...', ],
+ out => [ '1', { two => '2', three => '3' }, '4' ],
+ },
+ {
+ name => 'Nested array',
+ in => [
+ '---',
+ '- one',
+ '-',
+ ' - two',
+ ' -',
+ ' - three',
+ ' - four',
+ '- five',
+ '...',
+ ],
+ out => [ 'one', [ 'two', ['three'], 'four' ], 'five' ],
+ },
+ {
+ name => 'Nested hash',
+ in => [
+ '---',
+ 'one:',
+ ' five: 5',
+ ' two:',
+ ' four: 4',
+ ' three: 3',
+ 'six: 6',
+ '...',
+ ],
+ out => {
+ one => { two => { three => '3', four => '4' }, five => '5' },
+ six => '6'
+ },
+ },
+
+ {
+ name => 'Original YAML::Tiny test',
+ in => [
+ '---',
+ 'invoice: 34843',
+ 'date : 2001-01-23',
+ 'bill-to:',
+ ' given : Chris',
+ ' family : Dumars',
+ ' address:',
+ ' lines: |',
+ ' 458 Walkman Dr.',
+ ' Suite #292',
+ ' city : Royal Oak',
+ ' state : MI',
+ ' postal : 48046',
+ 'product:',
+ ' - sku : BL394D',
+ ' quantity : 4',
+ ' description : Basketball',
+ ' price : 450.00',
+ ' - sku : BL4438H',
+ ' quantity : 1',
+ ' description : Super Hoop',
+ ' price : 2392.00',
+ 'tax : 251.42',
+ 'total: 4443.52',
+ 'comments: >',
+ ' Late afternoon is best.',
+ ' Backup contact is Nancy',
+ ' Billsmer @ 338-4338',
+ '...',
+ ],
+ out => {
+ 'bill-to' => {
+ 'given' => 'Chris',
+ 'address' => {
+ 'city' => 'Royal Oak',
+ 'postal' => '48046',
+ 'lines' => "458 Walkman Dr.\nSuite #292\n",
+ 'state' => 'MI'
+ },
+ 'family' => 'Dumars'
+ },
+ 'invoice' => '34843',
+ 'date' => '2001-01-23',
+ 'tax' => '251.42',
+ 'product' => [
+ {
+ 'sku' => 'BL394D',
+ 'quantity' => '4',
+ 'price' => '450.00',
+ 'description' => 'Basketball'
+ },
+ {
+ 'sku' => 'BL4438H',
+ 'quantity' => '1',
+ 'price' => '2392.00',
+ 'description' => 'Super Hoop'
+ }
+ ],
+ 'comments' =>
+ "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n",
+ 'total' => '4443.52'
+ }
+ },
+
+ # Tests harvested from YAML::Tiny
+ {
+ in => ['...'],
+ name => 'Regression: empty',
+ error => qr{document\s+header\s+not\s+found}
+ },
+ {
+ in => [ '# comment', '...' ],
+ name => 'Regression: only_comment',
+ error => qr{document\s+header\s+not\s+found}
+ },
+ {
+ out => undef,
+ in => [ '---', '...' ],
+ name => 'Regression: only_header',
+ error => qr{Premature\s+end}i,
+ },
+ {
+ out => undef,
+ in => [ '---', '---', '...' ],
+ name => 'Regression: two_header',
+ error => qr{Unexpected\s+start}i,
+ },
+ {
+ out => undef,
+ in => [ '--- ~', '...' ],
+ name => 'Regression: one_undef'
+ },
+ {
+ out => undef,
+ in => [ '--- ~', '...' ],
+ name => 'Regression: one_undef2'
+ },
+ {
+ in => [ '--- ~', '---', '...' ],
+ name => 'Regression: two_undef',
+ error => qr{Missing\s+'[.][.][.]'},
+ },
+ {
+ out => 'foo',
+ in => [ '--- foo', '...' ],
+ name => 'Regression: one_scalar',
+ },
+ {
+ out => 'foo',
+ in => [ '--- foo', '...' ],
+ name => 'Regression: one_scalar2',
+ },
+ {
+ in => [ '--- foo', '--- bar', '...' ],
+ name => 'Regression: two_scalar',
+ error => qr{Missing\s+'[.][.][.]'},
+ },
+ {
+ out => ['foo'],
+ in => [ '---', '- foo', '...' ],
+ name => 'Regression: one_list1'
+ },
+ {
+ out => [ 'foo', 'bar' ],
+ in => [ '---', '- foo', '- bar', '...' ],
+ name => 'Regression: one_list2'
+ },
+ {
+ out => [ undef, 'bar' ],
+ in => [ '---', '- ~', '- bar', '...' ],
+ name => 'Regression: one_listundef'
+ },
+ {
+ out => { 'foo' => 'bar' },
+ in => [ '---', 'foo: bar', '...' ],
+ name => 'Regression: one_hash1'
+ },
+ {
+ out => {
+ 'foo' => 'bar',
+ 'this' => undef
+ },
+ in => [ '---', 'foo: bar', 'this: ~', '...' ],
+ name => 'Regression: one_hash2'
+ },
+ {
+ out => { 'foo' => [ 'bar', undef, 'baz' ] },
+ in => [ '---', 'foo:', ' - bar', ' - ~', ' - baz', '...' ],
+ name => 'Regression: array_in_hash'
+ },
+ {
+ out => {
+ 'bar' => { 'foo' => 'bar' },
+ 'foo' => undef
+ },
+ in => [ '---', 'foo: ~', 'bar:', ' foo: bar', '...' ],
+ name => 'Regression: hash_in_hash'
+ },
+ {
+ out => [
+ {
+ 'foo' => undef,
+ 'this' => 'that'
+ },
+ 'foo', undef,
+ {
+ 'foo' => 'bar',
+ 'this' => 'that'
+ }
+ ],
+ in => [
+ '---',
+ '-',
+ ' foo: ~',
+ ' this: that',
+ '- foo',
+ '- ~',
+ '-',
+ ' foo: bar',
+ ' this: that',
+ '...'
+ ],
+ name => 'Regression: hash_in_array'
+ },
+ {
+ out => ['foo'],
+ in => [ '---', '- \'foo\'', '...' ],
+ name => 'Regression: single_quote1'
+ },
+ {
+ out => [' '],
+ in => [ '---', '- \' \'', '...' ],
+ name => 'Regression: single_spaces'
+ },
+ {
+ out => [''],
+ in => [ '---', '- \'\'', '...' ],
+ name => 'Regression: single_null'
+ },
+ {
+ out => ' ',
+ in => [ '--- " "', '...' ],
+ name => 'Regression: only_spaces'
+ },
+ {
+ out => [
+ undef,
+ {
+ 'foo' => 'bar',
+ 'this' => 'that'
+ },
+ 'baz'
+ ],
+ in =>
+ [ '---', '- ~', '- foo: bar', ' this: that', '- baz', '...' ],
+ name => 'Regression: inline_nested_hash'
+ },
+ {
+ name => "Unprintables",
+ in => [
+ "---",
+ "- \"\\z\\x01\\x02\\x03\\x04\\x05\\x06\\a\\x08\\t\\n\\v\\f\\r\\x0e\\x0f\"",
+ "- \"\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\e\\x1c\\x1d\\x1e\\x1f\"",
+ "- \" !\\\"#\$%&'()*+,-./\"",
+ "- 0123456789:;<=>?",
+ "- '\@ABCDEFGHIJKLMNO'",
+ "- 'PQRSTUVWXYZ[\\]^_'",
+ "- '`abcdefghijklmno'",
+ "- 'pqrstuvwxyz{|}~\177'",
+ "- \200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217",
+ "- \220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237",
+ "- \240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257",
+ "- \260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277",
+ "- \300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317",
+ "- \320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337",
+ "- \340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357",
+ "- \360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377",
+ "..."
+ ],
+ out => [
+ "\0\1\2\3\4\5\6\a\b\t\n\13\f\r\16\17",
+ "\20\21\22\23\24\25\26\27\30\31\32\e\34\35\36\37",
+ " !\"#\$%&'()*+,-./",
+ "0123456789:;<=>?",
+ "\@ABCDEFGHIJKLMNO",
+ "PQRSTUVWXYZ[\\]^_",
+ "`abcdefghijklmno",
+ "pqrstuvwxyz{|}~\177",
+ "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217",
+ "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237",
+ "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257",
+ "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277",
+ "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317",
+ "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337",
+ "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357",
+ "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"
+ ],
+ },
+ {
+ name => 'Quoted hash keys',
+ in => [
+ '---', ' "quoted": Magic!', ' "\n\t": newline, tab', '...',
+ ],
+ out => {
+ quoted => 'Magic!',
+ "\n\t" => 'newline, tab',
+ },
+ },
+ );
+
+ plan tests => @SCHEDULE * 5;
+}
+
+sub iter {
+ my $ar = shift;
+ return sub {
+ return shift @$ar;
+ };
+}
+
+for my $test ( @SCHEDULE ) {
+ my $name = $test->{name};
+ ok my $yaml = Data::YAML::Reader->new, "$name: Created";
+ isa_ok $yaml, 'Data::YAML::Reader';
+
+ # diag "$name\n";
+
+ # unless ( $test->{in} ) {
+ # pass for 1 .. 2;
+ # use YAML;
+ # diag "Input for test:\n";
+ # diag( Dump( $test->{out} ) );
+ # next;
+ # }
+
+ my $source = join( "\n", @{ $test->{in} } ) . "\n";
+
+ my $iter = iter( $test->{in} );
+ my $got = eval { $yaml->read( $iter ) };
+
+ my $raw = $yaml->get_raw;
+
+ if ( my $err = $test->{error} ) {
+ unless ( like $@, $err, "$name: Error message" ) {
+ diag "Error: $@\n";
+ }
+ ok !$got, "$name: No result";
+ pass;
+ }
+ else {
+ my $want = $test->{out};
+ unless ( ok !$@, "$name: No error" ) {
+ diag "Error: $@\n";
+ }
+ unless ( is_deeply $got, $want, "$name: Result matches" ) {
+ local $Data::Dumper::Useqq = $Data::Dumper::Useqq = 1;
+ diag( Data::Dumper->Dump( [$got], ['$got'] ) );
+ diag( Data::Dumper->Dump( [$want], ['$expected'] ) );
+ }
+ is $raw, $source, "$name: Captured source matches";
+ }
+}
diff --git a/test/30-output.py b/test/30-output.py
new file mode 100644
index 0000000..56cfb0a
--- /dev/null
+++ b/test/30-output.py
@@ -0,0 +1,107 @@
+use strict;
+use warnings;
+use Test::More tests => 9;
+use Data::Dumper;
+
+use Data::YAML::Writer;
+
+my $out = [
+ "---",
+ "bill-to:",
+ " address:",
+ " city: 'Royal Oak'",
+ " lines: \"458 Walkman Dr.\\nSuite #292\\n\"",
+ " postal: 48046",
+ " state: MI",
+ " family: Dumars",
+ " given: Chris",
+ "comments: \"Late afternoon is best. Backup contact is Nancy Billsmer \@ 338-4338\\n\"",
+ "date: 2001-01-23",
+ "invoice: 34843",
+ "product:",
+ " -",
+ " description: Basketball",
+ " price: 450.00",
+ " quantity: 4",
+ " sku: BL394D",
+ " -",
+ " description: 'Super Hoop'",
+ " price: 2392.00",
+ " quantity: 1",
+ " sku: BL4438H",
+ "tax: 251.42",
+ "total: 4443.52",
+ "...",
+];
+
+my $in = {
+ 'bill-to' => {
+ 'given' => 'Chris',
+ 'address' => {
+ 'city' => 'Royal Oak',
+ 'postal' => '48046',
+ 'lines' => "458 Walkman Dr.\nSuite #292\n",
+ 'state' => 'MI'
+ },
+ 'family' => 'Dumars'
+ },
+ 'invoice' => '34843',
+ 'date' => '2001-01-23',
+ 'tax' => '251.42',
+ 'product' => [
+ {
+ 'sku' => 'BL394D',
+ 'quantity' => '4',
+ 'price' => '450.00',
+ 'description' => 'Basketball'
+ },
+ {
+ 'sku' => 'BL4438H',
+ 'quantity' => '1',
+ 'price' => '2392.00',
+ 'description' => 'Super Hoop'
+ }
+ ],
+ 'comments' =>
+ "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n",
+ 'total' => '4443.52'
+};
+
+my @buf1 = ();
+my @buf2 = ();
+my $buf3 = '';
+
+my @destination = (
+ {
+ name => 'Array reference',
+ destination => \@buf1,
+ normalise => sub { return \@buf1 },
+ },
+ {
+ name => 'Closure',
+ destination => sub { push @buf2, shift },
+ normalise => sub { return \@buf2 },
+ },
+ {
+ name => 'Scalar',
+ destination => \$buf3,
+ normalise => sub {
+ my @ar = split( /\n/, $buf3 );
+ return \@ar;
+ },
+ },
+);
+
+for my $dest ( @destination ) {
+ my $name = $dest->{name};
+ ok my $yaml = Data::YAML::Writer->new, "$name: Created";
+ isa_ok $yaml, 'Data::YAML::Writer';
+
+ $yaml->write( $in, $dest->{destination} );
+ my $got = $dest->{normalise}->();
+ unless ( is_deeply $got, $out, "$name: Result matches" ) {
+ local $Data::Dumper::Useqq = $Data::Dumper::Useqq = 1;
+ diag( Data::Dumper->Dump( [$got], ['$got'] ) );
+ diag( Data::Dumper->Dump( [$out], ['$expected'] ) );
+ }
+}
diff --git a/test/40-writer.py b/test/40-writer.py
new file mode 100644
index 0000000..4d70780
--- /dev/null
+++ b/test/40-writer.py
@@ -0,0 +1,200 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More;
+use Data::Dumper;
+use Data::YAML::Reader;
+use Data::YAML::Writer;
+
+my @SCHEDULE;
+
+BEGIN {
+ @SCHEDULE = (
+ {
+ name => 'Simple scalar',
+ in => 1,
+ out => [ '--- 1', '...', ],
+ },
+ {
+ name => 'Undef',
+ in => undef,
+ out => [ '--- ~', '...', ],
+ },
+ {
+ name => 'Unprintable',
+ in => "\x01\n\t",
+ out => [ '--- "\x01\n\t"', '...', ],
+ },
+ {
+ name => 'Simple array',
+ in => [ 1, 2, 3 ],
+ out => [ '---', '- 1', '- 2', '- 3', '...', ],
+ },
+ {
+ name => 'Array, two elements, undef',
+ in => [ undef, undef ],
+ out => [ '---', '- ~', '- ~', '...', ],
+ },
+ {
+ name => 'Nested array',
+ in => [ 1, 2, [ 3, 4 ], 5 ],
+ out =>
+ [ '---', '- 1', '- 2', '-', ' - 3', ' - 4', '- 5', '...', ],
+ },
+ {
+ name => 'Simple hash',
+ in => { one => '1', two => '2', three => '3' },
+ out => [ '---', 'one: 1', 'three: 3', 'two: 2', '...', ],
+ },
+ {
+ name => 'Nested hash',
+ in => {
+ one => '1',
+ two => '2',
+ more => { three => '3', four => '4' }
+ },
+ out => [
+ '---',
+ 'more:',
+ ' four: 4',
+ ' three: 3',
+ 'one: 1',
+ 'two: 2',
+ '...',
+ ],
+ },
+ {
+ name => 'Unprintable key',
+ in => { one => '1', "\x02" => '2', three => '3' },
+ out => [ '---', '"\x02": 2', 'one: 1', 'three: 3', '...', ],
+ },
+ {
+ name => 'Empty key',
+ in => { '' => 'empty' },
+ out => [ '---', "'': empty", '...', ],
+ },
+ {
+ name => 'Empty value',
+ in => { '' => '' },
+ out => [ '---', "'': ''", '...', ],
+ },
+ {
+ name => 'Complex',
+ in => {
+ 'bill-to' => {
+ 'given' => 'Chris',
+ 'address' => {
+ 'city' => 'Royal Oak',
+ 'postal' => '48046',
+ 'lines' => "458 Walkman Dr.\nSuite #292\n",
+ 'state' => 'MI'
+ },
+ 'family' => 'Dumars'
+ },
+ 'invoice' => '34843',
+ 'date' => '2001-01-23',
+ 'tax' => '251.42',
+ 'product' => [
+ {
+ 'sku' => 'BL394D',
+ 'quantity' => '4',
+ 'price' => '450.00',
+ 'description' => 'Basketball'
+ },
+ {
+ 'sku' => 'BL4438H',
+ 'quantity' => '1',
+ 'price' => '2392.00',
+ 'description' => 'Super Hoop'
+ }
+ ],
+ 'comments' =>
+ "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n",
+ 'total' => '4443.52'
+ },
+ out => [
+ "---",
+ "bill-to:",
+ " address:",
+ " city: 'Royal Oak'",
+ " lines: \"458 Walkman Dr.\\nSuite #292\\n\"",
+ " postal: 48046",
+ " state: MI",
+ " family: Dumars",
+ " given: Chris",
+ "comments: \"Late afternoon is best. Backup contact is Nancy Billsmer \@ 338-4338\\n\"",
+ "date: 2001-01-23",
+ "invoice: 34843",
+ "product:",
+ " -",
+ " description: Basketball",
+ " price: 450.00",
+ " quantity: 4",
+ " sku: BL394D",
+ " -",
+ " description: 'Super Hoop'",
+ " price: 2392.00",
+ " quantity: 1",
+ " sku: BL4438H",
+ "tax: 251.42",
+ "total: 4443.52",
+ "...",
+ ],
+ },
+ );
+
+ plan tests => @SCHEDULE * 5;
+}
+
+sub iter {
+ my $ar = shift;
+ return sub {
+ return shift @$ar;
+ };
+}
+
+for my $test ( @SCHEDULE ) {
+ my $name = $test->{name};
+ ok my $yaml = Data::YAML::Writer->new, "$name: Created";
+ isa_ok $yaml, 'Data::YAML::Writer';
+
+ my $got = [];
+ my $writer = sub { push @$got, shift };
+
+ my $data = $test->{in};
+
+ eval { $yaml->write( $data, $writer ) };
+
+ if ( my $err = $test->{error} ) {
+ unless ( like $@, $err, "$name: Error message" ) {
+ diag "Error: $@\n";
+ }
+ is_deeply $got, [], "$name: No result";
+ pass;
+ }
+ else {
+ my $want = $test->{out};
+ unless ( ok !$@, "$name: No error" ) {
+ diag "Error: $@\n";
+ }
+ unless ( is_deeply $got, $want, "$name: Result matches" ) {
+ local $Data::Dumper::Useqq = $Data::Dumper::Useqq = 1;
+ diag( Data::Dumper->Dump( [$got], ['$got'] ) );
+ diag( Data::Dumper->Dump( [$want], ['$expected'] ) );
+ }
+
+ my $yr = Data::YAML::Reader->new;
+
+ # Now try parsing it
+ my $reader = sub { shift @$got };
+ my $parsed = $yr->read( $reader );
+
+ unless ( is_deeply $parsed, $data, "$name: Reparse OK" ) {
+ local $Data::Dumper::Useqq = $Data::Dumper::Useqq = 1;
+ diag( Data::Dumper->Dump( [$parsed], ['$parsed'] ) );
+ diag( Data::Dumper->Dump( [$data], ['$data'] ) );
+ }
+ }
+}
+
diff --git a/test/pod-coverage.py b/test/pod-coverage.py
new file mode 100644
index 0000000..c412996
--- /dev/null
+++ b/test/pod-coverage.py
@@ -0,0 +1,9 @@
+#!perl -T
+
+use Test::More;
+eval "use Test::Pod::Coverage 1.04";
+plan skip_all =>
+ "Test::Pod::Coverage 1.04 required for testing POD coverage"
+ if $@;
+all_pod_coverage_ok(
+ { private => [ qr{^BUILD|DEMOLISH|AUTOMETHOD|START$}, qr{^_} ] } );
diff --git a/test/pod.py b/test/pod.py
new file mode 100644
index 0000000..976d7cd
--- /dev/null
+++ b/test/pod.py
@@ -0,0 +1,6 @@
+#!perl -T
+
+use Test::More;
+eval "use Test::Pod 1.14";
+plan skip_all => "Test::Pod 1.14 required for testing POD" if $@;
+all_pod_files_ok();
diff --git a/yamlish.js b/yamlish.js
new file mode 160000
+Subproject 25bec9d8d5111bd6574964fbcd2bec2425460c1
diff --git a/yamlish.py b/yamlish.py
new file mode 100644
index 0000000..40a96af
--- /dev/null
+++ b/yamlish.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/yamlishwriter-php-v0.0.1/Changes b/yamlishwriter-php-v0.0.1/Changes
new file mode 100644
index 0000000..4bf0e3c
--- /dev/null
+++ b/yamlishwriter-php-v0.0.1/Changes
@@ -0,0 +1,3 @@
+0.0.1 2007-03-19
+ - Initial release
+ \ No newline at end of file
diff --git a/yamlishwriter-php-v0.0.1/MANIFEST b/yamlishwriter-php-v0.0.1/MANIFEST
new file mode 100644
index 0000000..1f7a3cc
--- /dev/null
+++ b/yamlishwriter-php-v0.0.1/MANIFEST
@@ -0,0 +1,10 @@
+./Changes
+./dist.sh
+./lib/yamlishwriter.php
+./Makefile
+./README
+./t/00-load.php
+./t/10-writer.php
+./t/harness.t
+./t/lib/TestLite.php
+./MANIFEST
diff --git a/yamlishwriter-php-v0.0.1/Makefile b/yamlishwriter-php-v0.0.1/Makefile
new file mode 100644
index 0000000..09e4803
--- /dev/null
+++ b/yamlishwriter-php-v0.0.1/Makefile
@@ -0,0 +1,21 @@
+# Makefile for YAMLish
+
+PHP = /usr/bin/php
+PROVE = prove -r t
+
+VERSION = 0.0.1
+DISTNAME = yamlishwriter-php-v$(VERSION)
+
+default:
+
+test:
+ PHP=$(PHP) $(PROVE)
+
+dist: manifest
+ ./dist.sh $(DISTNAME)
+
+manifest:
+ rm -f MANIFEST
+ find . -type f | grep -vE '\.svn|\.DS_Store|\.tmproj' > MANIFEST
+ echo './MANIFEST' >> MANIFEST
+ \ No newline at end of file
diff --git a/yamlishwriter-php-v0.0.1/README b/yamlishwriter-php-v0.0.1/README
new file mode 100644
index 0000000..bbd6204
--- /dev/null
+++ b/yamlishwriter-php-v0.0.1/README
@@ -0,0 +1,33 @@
+YAMLishWriter.php Version 0.0.1
+
+This is a simple implementation of a YAMLish writer for PHP. See
+
+ http://testanything.org/wiki/index.php/YAMLish
+
+for more information about YAMLish.
+
+You can find the YAMLishWriter class in lib/yamlishwriter.php in this
+distribution. YAMLishWriter is a self contained PHP class. To use it
+
+ // Or wherever it is on your include path
+ include('yamlishwriter.php');
+
+ // And then later
+ $writer = new YAMLishWriter;
+
+ $data = array( 'got' => 1, 'expected' => 2 );
+ $output = $writer->write($data);
+
+The returned value is an array containing the lines of YAMLish.
+
+This distribution contains a rudimentary test harness for which you'll
+need Perl prove command. To run the tests edit Makefile to reflect the
+location of your php command and then
+
+ make test
+
+Copyright 2007 Andy Armstrong, andy@hexten.net.
+
+YAMLishWriter is distributed under Perl Artistic Licence:
+
+ http://www.opensource.org/licenses/artistic-license.php
diff --git a/yamlishwriter-php-v0.0.1/dist.sh b/yamlishwriter-php-v0.0.1/dist.sh
new file mode 100755
index 0000000..5752e53
--- /dev/null
+++ b/yamlishwriter-php-v0.0.1/dist.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+distname=$1
+distarc="$distname.tar.gz"
+
+echo "Making $distarc"
+for f in `cat MANIFEST`
+do
+ d=`dirname $f`
+ mkdir -p "$distname/$d"
+ echo "Adding $f"
+ cp $f "$distname/$f"
+done
+
+tar zcf $distarc $distname
+rm -rf $distname
diff --git a/yamlishwriter-php-v0.0.1/lib/yamlishwriter.php b/yamlishwriter-php-v0.0.1/lib/yamlishwriter.php
new file mode 100644
index 0000000..62035a9
--- /dev/null
+++ b/yamlishwriter-php-v0.0.1/lib/yamlishwriter.php
@@ -0,0 +1,125 @@
+<?php
+
+ // Would be nice if this weren't a global function - but I can't find
+ // out how to make a class member work in preg_replace_callback
+ function __escape_unprintable($matched) {
+ $unprintable = array(
+ 'z', 'x01', 'x02', 'x03', 'x04', 'x05', 'x06', 'a',
+ 'x08', 't', 'n', 'v', 'f', 'r', 'x0e', 'x0f',
+ 'x10', 'x11', 'x12', 'x13', 'x14', 'x15', 'x16', 'x17',
+ 'x18', 'x19', 'x1a', 'e', 'x1c', 'x1d', 'x1e', 'x1f',
+ );
+
+ return '\\' . $unprintable[ ord( $matched[0] ) ];
+ }
+
+ class YAMLishWriter {
+ function YAMLishWriter() {
+
+ }
+
+ function write( $obj ) {
+ $out = array();
+
+ $this->_write_obj( $out, '---', $obj );
+ $out[] = '...';
+
+ return $out;
+ }
+
+ function _write_hash( &$out, $obj, $indent, $pad ) {
+ while ( list($k, $v) = each( $obj ) ) {
+ $this->_write_obj(
+ $out,
+ $pad . $this->_enc_scalar($k) . ':',
+ $v, $indent + 1
+ );
+ }
+ }
+
+ function _write_array( &$out, $obj, $indent ) {
+ $pad = '';
+ for ( $i = 0; $i < $indent; $i++ ) {
+ $pad .= ' ';
+ }
+
+ $nout = array();
+ $idx = 0;
+ while ( list($k, $v) = each( $obj ) ) {
+ if (gettype($k) != 'integer' || $k != $idx) {
+ # If we find it's not actually an array discard what we've done
+ # and write a hash instead. Usually we should find out pretty
+ # early.
+ $this->_write_hash( $out, $obj, $indent, $pad );
+ return;
+ }
+
+ $this->_write_obj( $nout, "$pad-", $v, $indent + 1);
+ $idx++;
+ }
+
+ array_splice( $out, count($out), 0, $nout );
+ }
+
+ function _enc_string ( $str ) {
+ if (preg_match('/[\x00-\x1f\"]/', $str)) {
+ $str = preg_replace('/\\\\/', '\\\\', $str);
+ $str = preg_replace('/"/', '\\"', $str);
+ $str = preg_replace_callback( '/([\x00-\x1f])/', '__escape_unprintable', $str );
+ return '"' . $str . '"';
+ }
+
+ if ( strlen($str) == 0 || preg_match( '/\s/', $str ) ) {
+ return "'" . preg_replace('/\'/', "''", $str) . "'";
+ }
+
+ return $str;
+ }
+
+ function _enc_scalar( $obj ) {
+ $type = gettype( $obj );
+ switch ($type) {
+ case 'boolean':
+ return $obj ? '1' : '0';
+
+ case 'double' :
+ case 'integer':
+ return "$obj";
+
+ case 'NULL':
+ return '~';
+
+ case 'string':
+ return $this->_enc_string( $obj );
+
+ default:
+ die('Unhandled scalar type ' . $type);
+ }
+ }
+
+ function _write_obj( &$out, $prefix, $obj, $indent = 0 ) {
+ $type = gettype( $obj );
+
+ switch ($type) {
+ case 'boolean':
+ case 'integer':
+ case 'double' :
+ case 'string':
+ case 'NULL':
+ $out[] = "$prefix " . $this->_enc_scalar( $obj );
+ break;
+
+ case 'array':
+ $out[] = $prefix;
+ $this->_write_array( $out, $obj, $indent );
+ break;
+
+ case 'object':
+ case 'resource':
+ default:
+ die('Unhandled type ' . $type);
+ }
+ }
+ }
+
+?>
diff --git a/yamlishwriter-php-v0.0.1/t/00-load.php b/yamlishwriter-php-v0.0.1/t/00-load.php
new file mode 100644
index 0000000..afe3000
--- /dev/null
+++ b/yamlishwriter-php-v0.0.1/t/00-load.php
@@ -0,0 +1,9 @@
+<?php
+
+ error_reporting(E_ALL);
+
+ include_once('./t/lib/TestLite.php');
+
+ plan(1);
+ ok(@include_once('./lib/yamlishwriter.php'), 'include library');
+?>
diff --git a/yamlishwriter-php-v0.0.1/t/10-writer.php b/yamlishwriter-php-v0.0.1/t/10-writer.php
new file mode 100644
index 0000000..146b356
--- /dev/null
+++ b/yamlishwriter-php-v0.0.1/t/10-writer.php
@@ -0,0 +1,180 @@
+<?php
+
+ error_reporting(E_ALL);
+
+ include_once('./t/lib/TestLite.php');
+
+ $schedule = array(
+ array(
+ 'name' => 'Simple scalar',
+ 'in' => 1,
+ 'out' => array(
+ '--- 1',
+ '...',
+ ),
+ ),
+ array(
+ 'name' => 'Undef',
+ 'in' => null,
+ 'out' => array(
+ '--- ~',
+ '...',
+ ),
+ ),
+ array(
+ 'name' => 'Unprintable',
+ 'in' => "\x01\n\t",
+ 'out' => array(
+ '--- "\x01\n\t"',
+ '...',
+ ),
+ ),
+ array(
+ 'name' => 'Simple array',
+ 'in' => array( 1, 2, 3 ),
+ 'out' => array(
+ '---',
+ '- 1',
+ '- 2',
+ '- 3',
+ '...',
+ ),
+ ),
+ array(
+ 'name' => 'Array, two elements, null',
+ 'in' => array( null, null ),
+ 'out' => array(
+ '---',
+ '- ~',
+ '- ~',
+ '...',
+ ),
+ ),
+ array(
+ 'name' => 'Nested array',
+ 'in' => array( 1, 2, array( 3, 4 ), 5 ),
+ 'out' => array(
+ '---',
+ '- 1',
+ '- 2',
+ '-',
+ ' - 3',
+ ' - 4',
+ '- 5',
+ '...',
+ ),
+ ),
+ array(
+ 'name' => 'Simple hash',
+ 'in' => array( 'one' => '1', 'two' => '2', 'three' => '3' ),
+ 'out' => array(
+ '---',
+ 'one: 1',
+ 'two: 2',
+ 'three: 3',
+ '...',
+ ),
+ ),
+ array(
+ 'name' => 'Nested hash',
+ 'in' => array(
+ 'one' => '1', 'two' => '2', 'more' => array( 'three' => '3', 'four' => '4' )
+ ),
+ 'out' => array(
+ '---',
+ 'one: 1',
+ 'two: 2',
+ 'more:',
+ ' three: 3',
+ ' four: 4',
+ '...',
+ ),
+ ),
+ array(
+ 'name' => 'Unprintable key',
+ 'in' => array( 'one' => '1', "\x02" => '2', 'three' => '3' ),
+ 'out' => array(
+ '---',
+ 'one: 1',
+ '"\x02": 2',
+ 'three: 3',
+ '...',
+ ),
+ ),
+ array(
+ 'name' => 'Complex',
+ 'in' => array(
+ 'bill-to' => array(
+ 'given' => 'Chris',
+ 'address' => array(
+ 'city' => 'Royal Oak',
+ 'postal' => '48046',
+ 'lines' => "458 Walkman Dr.\nSuite #292\n",
+ 'state' => 'MI'
+ ),
+ 'family' => 'Dumars'
+ ),
+ 'invoice' => '34843',
+ 'date' => '2001-01-23',
+ 'tax' => '251.42',
+ 'product' => array(
+ array(
+ 'sku' => 'BL394D',
+ 'quantity' => '4',
+ 'price' => '450.00',
+ 'description' => 'Basketball'
+ ),
+ array(
+ 'sku' => 'BL4438H',
+ 'quantity' => '1',
+ 'price' => '2392.00',
+ 'description' => 'Super Hoop'
+ )
+ ),
+ 'comments' =>
+ "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\n",
+ 'total' => '4443.52'
+ ),
+ 'out' => array(
+ "---",
+ "bill-to:",
+ " given: Chris",
+ " address:",
+ " city: 'Royal Oak'",
+ " postal: 48046",
+ " lines: \"458 Walkman Dr.\\nSuite #292\\n\"",
+ " state: MI",
+ " family: Dumars",
+ "invoice: 34843",
+ "date: 2001-01-23",
+ "tax: 251.42",
+ "product:",
+ " -",
+ " sku: BL394D",
+ " quantity: 4",
+ " price: 450.00",
+ " description: Basketball",
+ " -",
+ " sku: BL4438H",
+ " quantity: 1",
+ " price: 2392.00",
+ " description: 'Super Hoop'",
+ "comments: \"Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338\\n\"",
+ "total: 4443.52",
+ "...",
+ ),
+ ),
+ );
+
+ plan( count($schedule) * 1 );
+
+ include_once('./lib/yamlishwriter.php');
+
+ foreach ($schedule as $test) {
+ $name = $test['name'];
+ $writer = new YAMLishWriter;
+ $got = $writer->write($test['in']);
+ is_deeply_array($got, $test['out'], "$name: output matches");
+ }
+
+?>
diff --git a/yamlishwriter-php-v0.0.1/t/harness.t b/yamlishwriter-php-v0.0.1/t/harness.t
new file mode 100644
index 0000000..abc51f8
--- /dev/null
+++ b/yamlishwriter-php-v0.0.1/t/harness.t
@@ -0,0 +1,29 @@
+use strict;
+use warnings;
+
+my $php = $ENV{PHP} || 'php';
+
+my $TESTS = 't/*.php';
+
+my $planned = 0;
+
+for my $test ( glob( $TESTS ) ) {
+ warn "# $test\n";
+ my $offset = $planned;
+ my @command = ( $php, $test );
+ open my $th, '-|', @command or die "Can't run $test ($?)\n";
+ while ( defined( my $line = <$th> ) ) {
+ chomp $line;
+ if ( $line =~ /^1..(\d+)/ ) {
+ $planned += $1;
+ }
+ else {
+ $line =~ s/^((?:not\s+)?ok\s+)(\d+)/$1 . ($2 + $offset)/e;
+ print "$line\n";
+ }
+ }
+ close $th or die "Can't run $test ($?)\n";
+}
+
+# Trailing plan
+print "1..$planned\n";
diff --git a/yamlishwriter-php-v0.0.1/t/lib/TestLite.php b/yamlishwriter-php-v0.0.1/t/lib/TestLite.php
new file mode 100644
index 0000000..231001b
--- /dev/null
+++ b/yamlishwriter-php-v0.0.1/t/lib/TestLite.php
@@ -0,0 +1,79 @@
+<?php
+
+ $NEXT_TEST = 1;
+
+ function plan($tests) {
+ print "1..$tests\n";
+ }
+
+ function ok($ok, $message = null) {
+ global $NEXT_TEST;
+ $out = "ok " . ($NEXT_TEST++);
+ if (!$ok) {
+ $out = 'not ' . $out;
+ }
+ if ($message) {
+ $out .= " $message";
+ }
+ print "$out\n";
+ }
+
+ function pass($message) {
+ ok(true, $message);
+ }
+
+ function fail($message) {
+ ok(false, $message);
+ }
+
+ function diag($message) {
+ $stdout = fopen('php://stderr', 'w');
+ fwrite( $stdout, "# $message\n" );
+ fclose( $stdout );
+ }
+
+ function is_deeply_array( $got, $expected, $message ) {
+ if ( gettype($got) != 'array' ) {
+ fail($message);
+ diag('$got is not an array');
+ return;
+ }
+
+ if ( gettype($expected) != 'array' ) {
+ fail($message);
+ diag('$expected is not an array');
+ return;
+ }
+
+ $ok = true;
+ $diag = array();
+ $got_c = count( $got );
+ $expected_c = count( $expected );
+
+ if ($got_c != $expected_c) {
+ $ok = false;
+ $diag[] = 'Array sizes differ:';
+ $diag[] = ' $got: ' . $got_c;
+ $diag[] = ' $expected: ' . $expected_c;
+ }
+
+ $count = max( $got_c, $expected_c );
+
+ for ($i = 0; $i < $count; $i++) {
+ if ( $got[$i] != $expected[$i] ) {
+ if ($ok) {
+ $ok = false;
+ $diag[] = 'Arrays differ:';
+ }
+ $diag[] = " \$got[$i]: $got[$i]";
+ $diag[] = " \$expected[$i]: $expected[$i]";
+ }
+ }
+
+ ok($ok, $message);
+ foreach ($diag as $d) {
+ diag($d);
+ }
+ }
+
+?>