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();