package YAML::Tokens; use strict; use warnings; use YAML::Base -base; #> class Token(object): #> def __init__(self, start_mark, end_mark): #> self.start_mark = start_mark #> self.end_mark = end_mark #> def __repr__(self): #> attributes = [key for key in self.__dict__ #> if not key.endswith('_mark')] #> attributes.sort() #> arguments = ', '.join(['%s=%r' % (key, getattr(self, key)) #> for key in attributes]) #> return '%s(%s)' % (self.__class__.__name__, arguments) package YAML::Token; use YAML::Base -base; field 'start_mark'; field 'end_mark'; use overload '""' => 'stringify'; sub stringify { my $self = shift; my $class = ref($self) || $self; my @attributes = grep not(/_mark$/), keys %$self; my $arguments = join ', ', map sprintf("%s=%s", $_, $self->{$_}), @attributes; return "$class ($arguments)"; } #> #class BOMToken(Token): #> # id = '' #> #> class DirectiveToken(Token): #> id = '' #> def __init__(self, name, value, start_mark, end_mark): #> self.name = name #> self.value = value #> self.start_mark = start_mark #> self.end_mark = end_mark package YAML::Token::Directive; use YAML::Token -base; field id => ''; field 'name'; field 'value'; #> class DocumentStartToken(Token): #> id = '' package YAML::Token::DocumentStart; use YAML::Token -base; field id => ''; #> class DocumentEndToken(Token): #> id = '' package YAML::Token::DocumentEnd; use YAML::Token -base; field id => ''; #> class StreamStartToken(Token): #> id = '' #> def __init__(self, start_mark=None, end_mark=None, #> encoding=None): #> self.start_mark = start_mark #> self.end_mark = end_mark #> self.encoding = encoding package YAML::Token::StreamStart; use YAML::Token -base; field id => ''; field 'encoding'; #> class StreamEndToken(Token): #> id = '' package YAML::Token::StreamEnd; use YAML::Token -base; field id => ''; #> class BlockSequenceStartToken(Token): #> id = '' package YAML::Token::BlockSequenceStart; use YAML::Token -base; field id => ''; #> class BlockMappingStartToken(Token): #> id = '' package YAML::Token::BlockMappingStart; use YAML::Token -base; field id => ''; #> class BlockEndToken(Token): #> id = '' package YAML::Token::BlockEnd; use YAML::Token -base; field id => ''; #> class FlowSequenceStartToken(Token): #> id = '[' package YAML::Token::FlowSequenceStart; use YAML::Token -base; field id => '['; #> class FlowMappingStartToken(Token): #> id = '{' package YAML::Token::FlowMappingStart; use YAML::Token -base; field id => '{'; #> class FlowSequenceEndToken(Token): #> id = ']' package YAML::Token::FlowSequenceEnd; use YAML::Token -base; field id => ']'; #> class FlowMappingEndToken(Token): #> id = '}' package YAML::Token::FlowMappingEnd; use YAML::Token -base; field id => '}'; #> class KeyToken(Token): #> id = '?' package YAML::Token::Key; use YAML::Token -base; field id => '?'; #> class ValueToken(Token): #> id = ':' package YAML::Token::Value; use YAML::Token -base; field id => ':'; #> class BlockEntryToken(Token): #> id = '-' package YAML::Token::BlockEntry; use YAML::Token -base; field id => '-'; #> class FlowEntryToken(Token): #> id = ',' package YAML::Token::FlowEntry; use YAML::Token -base; field id => ','; # class AliasToken(Token): # id = '' # def __init__(self, value, start_mark, end_mark): # self.value = value # self.start_mark = start_mark # self.end_mark = end_mark package YAML::Token::Alias; use YAML::Token -base; field id => ''; field 'value'; # class AnchorToken(Token): # id = '' # def __init__(self, value, start_mark, end_mark): # self.value = value # self.start_mark = start_mark # self.end_mark = end_mark package YAML::Token::Anchor; use YAML::Token -base; field id => ''; field 'value'; # class TagToken(Token): # id = '' # def __init__(self, value, start_mark, end_mark): # self.value = value # self.start_mark = start_mark # self.end_mark = end_mark package YAML::Token::Tag; use YAML::Token -base; field id => ''; field 'value'; # class ScalarToken(Token): # id = '' # def __init__(self, value, plain, start_mark, end_mark, style=None): # self.value = value # self.plain = plain # self.start_mark = start_mark # self.end_mark = end_mark # self.style = style package YAML::Token::Scalar; use YAML::Token -base; field id => ''; field 'value'; field 'plain'; field 'style'; 1;