package YAML::Nodes; use strict; use warnings; #> class Node(object): #> def __init__(self, tag, value, start_mark, end_mark): #> self.tag = tag #> self.value = value #> self.start_mark = start_mark #> self.end_mark = end_mark #> def __repr__(self): #> value = self.value #> #if isinstance(value, list): #> # if len(value) == 0: #> # value = '' #> # elif len(value) == 1: #> # value = '<1 item>' #> # else: #> # value = '<%d items>' % len(value) #> #else: #> # if len(value) > 75: #> # value = repr(value[:70]+u' ... ') #> # else: #> # value = repr(value) #> value = repr(value) #> return '%s(tag=%r, value=%s)' % (self.__class__.__name__, self.tag, value) package YAML::Node; use YAML::Base -base; use overload '""' => 'stringify'; field 'tag'; field 'value'; field 'start_mark'; field 'end_mark'; sub stringify { my $self = shift; my $class = ref($self) || $self; my $value = $self->value . ""; my $tag = $self->tag . ""; return "$class(tag=$tag, value=$value)"; } #> class ScalarNode(Node): #> id = 'scalar' #> def __init__(self, tag, value, #> start_mark=None, end_mark=None, style=None): #> self.tag = tag #> self.value = value #> self.start_mark = start_mark #> self.end_mark = end_mark #> self.style = style package YAML::Node::Scalar; use YAML::Node -base; field 'style'; #> class CollectionNode(Node): #> def __init__(self, tag, value, #> start_mark=None, end_mark=None, flow_style=None): #> self.tag = tag #> self.value = value #> self.start_mark = start_mark #> self.end_mark = end_mark #> self.flow_style = flow_style package YAML::Node::Collection; use YAML::Node -base; field 'flow_style'; #> class SequenceNode(CollectionNode): #> id = 'sequence' package YAML::Node::Sequence; use YAML::Node::Collection -base; field id => 'sequence'; #> class MappingNode(CollectionNode): #> id = 'mapping' package YAML::Node::Mapping; use YAML::Node::Collection -base; field id => 'mapping'; 1;