1 package YAML::Dumper::Base;
 
   8 has spec_version    => default => sub {'1.0'};
 
   9 has indent_width    => default => sub {2};
 
  10 has use_header      => default => sub {1};
 
  11 has use_version     => default => sub {0};
 
  12 has sort_keys       => default => sub {1};
 
  13 has anchor_prefix   => default => sub {''};
 
  14 has dump_code       => default => sub {0};
 
  15 has use_block       => default => sub {0};
 
  16 has use_fold        => default => sub {0};
 
  17 has compress_series => default => sub {1};
 
  18 has inline_series   => default => sub {0};
 
  19 has use_aliases     => default => sub {1};
 
  20 has purity          => default => sub {0};
 
  21 has stringify       => default => sub {0};
 
  22 has quote_numeric_strings => default => sub {0};
 
  25 has stream      => default => sub {''};
 
  26 has document    => default => sub {0};
 
  27 has transferred => default => sub {{}};
 
  28 has id_refcnt   => default => sub {{}};
 
  29 has id_anchor   => default => sub {{}};
 
  30 has anchor      => default => sub {1};
 
  31 has level       => default => sub {0};
 
  32 has offset      => default => sub {[]};
 
  33 has headless    => default => sub {0};
 
  34 has blessed_map => default => sub {{}};
 
  36 # Global Options are an idea taken from Data::Dumper. Really they are just
 
  37 # sugar on top of real OO properties. They make the simple Dump/Load API
 
  39 sub set_global_options {
 
  41     $self->spec_version($YAML::SpecVersion)
 
  42       if defined $YAML::SpecVersion;
 
  43     $self->indent_width($YAML::Indent)
 
  44       if defined $YAML::Indent;
 
  45     $self->use_header($YAML::UseHeader)
 
  46       if defined $YAML::UseHeader;
 
  47     $self->use_version($YAML::UseVersion)
 
  48       if defined $YAML::UseVersion;
 
  49     $self->sort_keys($YAML::SortKeys)
 
  50       if defined $YAML::SortKeys;
 
  51     $self->anchor_prefix($YAML::AnchorPrefix)
 
  52       if defined $YAML::AnchorPrefix;
 
  53     $self->dump_code($YAML::DumpCode || $YAML::UseCode)
 
  54       if defined $YAML::DumpCode or defined $YAML::UseCode;
 
  55     $self->use_block($YAML::UseBlock)
 
  56       if defined $YAML::UseBlock;
 
  57     $self->use_fold($YAML::UseFold)
 
  58       if defined $YAML::UseFold;
 
  59     $self->compress_series($YAML::CompressSeries)
 
  60       if defined $YAML::CompressSeries;
 
  61     $self->inline_series($YAML::InlineSeries)
 
  62       if defined $YAML::InlineSeries;
 
  63     $self->use_aliases($YAML::UseAliases)
 
  64       if defined $YAML::UseAliases;
 
  65     $self->purity($YAML::Purity)
 
  66       if defined $YAML::Purity;
 
  67     $self->stringify($YAML::Stringify)
 
  68       if defined $YAML::Stringify;
 
  69     $self->quote_numeric_strings($YAML::QuoteNumericStrings)
 
  70       if defined $YAML::QuoteNumericStrings;
 
  75     $self->die('dump() not implemented in this class.');
 
  81     $ref = \$_[0] unless ref $ref;
 
  82     my (undef, undef, $node_id) = YAML::Mo::Object->node_info($ref);
 
  83     $self->{blessed_map}->{$node_id};
 
  88     my ($ref, $blessing) = @_;
 
  90     $ref = \$_[0] unless ref $ref;
 
  91     my (undef, undef, $node_id) = YAML::Mo::Object->node_info($ref);
 
  92     if (not defined $blessing) {
 
  93         $ynode = YAML::Node->new($ref);
 
  95     elsif (ref $blessing) {
 
  96         $self->die() unless ynode($blessing);
 
 101         my $transfer = $blessing . "::yaml_dump";
 
 102         $self->die() unless defined &{$transfer};
 
 103         $ynode = &{$transfer}($ref);
 
 104         $self->die() unless ynode($ynode);
 
 106     $self->{blessed_map}->{$node_id} = $ynode;
 
 107     my $object = ynode($ynode) or $self->die();