X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FExcel%2FTemplate%2FContext.pm;h=77cd06b4f1f45a5745ada060ce62ee76ef3ac8db;hb=87f4c76d5d7fc0440f5190f5b615aff0bfec9bbb;hp=7a66225a261dd26e06f5be956df8fefc61b3d805;hpb=37513eae9a11e4f4364f82dd067b7da534c2b18d;p=p5sagit%2FExcel-Template.git diff --git a/lib/Excel/Template/Context.pm b/lib/Excel/Template/Context.pm index 7a66225..77cd06b 100644 --- a/lib/Excel/Template/Context.pm +++ b/lib/Excel/Template/Context.pm @@ -12,10 +12,10 @@ BEGIN { use Excel::Template::Format; # This is a helper object. It is not instantiated by the user, nor does it -# represent an XML object. Rather, every container will use this object to +# represent an XML node. Rather, every container will use this object to # maintain the context for its children. -my %isAbsolute = map { $_ => !!1 } qw( +my %isAbsolute = map { $_ => ~~1 } qw( ROW COL ); @@ -26,17 +26,26 @@ sub new my $self = $class->SUPER::new(@_); $self->{ACTIVE_WORKSHEET} = undef; - $self->{ACTIVE_FORMAT} = Excel::Template::Format->blank_format($self); + $self->{FORMAT_OBJECT} = Excel::Template::Format->new; + $self->{ACTIVE_FORMAT} = $self->{FORMAT_OBJECT}->blank_format($self); $self->{WORKSHEET_NAMES} = undef; - UNIVERSAL::isa($self->{$_}, 'ARRAY') || ($self->{$_} = []) - for qw( STACK PARAM_MAP NAME_MAP ); + $self->{__MARKS} = {}; + + # Removed NAME_MAP until I figure out what the heck it's for + for (qw( STACK PARAM_MAP )) + { + next if defined $self->{$_} && ref $self->{$_} eq 'ARRAY'; + $self->{$_} = []; + } $self->{$_} = 0 for keys %isAbsolute; return $self; } +sub use_unicode { $_[0]->{UNICODE} && 1 } + sub _find_param_in_map { my $self = shift; @@ -50,7 +59,7 @@ sub _find_param_in_map next unless exists $map->{$param}; $depth--, next if $depth; - $found = !!1; + $found = ~~1; $val = $map->{$param}; last; } @@ -70,14 +79,14 @@ sub param ); } -sub named_param -{ - my $self = shift; - $self->_find_param_in_map( - 'NAME_MAP', - @_, - ); -} +#sub named_param +#{ +# my $self = shift; +# $self->_find_param_in_map( +# 'NAME_MAP', +# @_, +# ); +#} sub resolve { @@ -101,7 +110,7 @@ sub resolve # 2) A decimal number #GGG Convert this to use //x - my ($op, $val) = $obj_val =~ m!^\s*([\+\*\/\-])?\s*([\d.]*\d)\s*$!oi; + my ($op, $val) = $obj_val =~ m/^\s*([\+\*\/\-])?\s*([\d.]*\d)\s*$/oi; # Unless it's a relative value, we have what we came for. return $obj_val unless $op; @@ -114,7 +123,7 @@ sub resolve return $prev_val unless defined $obj_val; # Prevent divide-by-zero issues. - return $val if $op eq '/' and $val == 0; + return $prev_val if $op eq '/' and $val == 0; my $new_val; for ($op) @@ -144,7 +153,7 @@ sub enter_scope $self->{$key} = $self->resolve($obj, $key); } - return !!1; + return ~~1; } sub exit_scope @@ -160,7 +169,7 @@ sub exit_scope pop @{$self->{STACK}}; - return !!1; + return ~~1; } sub get @@ -231,11 +240,25 @@ sub new_worksheet $name = ''; } - $self->active_worksheet( + return $self->active_worksheet( $self->{XLS}->add_worksheet( $name ), ); } +sub mark +{ + my $self = shift; + + if ( @_ > 1 ) + { + my %args = @_; + + @{$self->{__MARKS}}{keys %args} = values %args; + } + + return $self->{__MARKS}{$_[0]} +} + sub active_worksheet { my $self = shift; @@ -255,7 +278,7 @@ sub add_reference push @{$self->{REFERENCES}{$ref}}, [ $row, $col ]; - return !!1; + return ~~1; } sub get_all_references @@ -278,28 +301,68 @@ sub get_last_reference return @{ $self->{REFERENCES}{$ref}[-1] }; } +sub format_object { $_[0]{FORMAT_OBJECT} } + 1; __END__ =head1 NAME -Excel::Template::Context +Excel::Template::Context - Excel::Template::Context =head1 PURPOSE +This is a helper node that provides the global context for the nodes do their processing within. It provides attribute scoping, parameter resolution, and other very nice things. + +Documentation is provided for if you wish to subclass another node. + =head1 NODE NAME +None + =head1 INHERITANCE +None + =head1 ATTRIBUTES +None + =head1 CHILDREN +None + =head1 AFFECTS +Everything + =head1 DEPENDENCIES -=head1 USAGE +None + +=head1 METHODS + +=head2 active_format + +=head2 active_worksheet + +=head2 add_reference + +=head2 format_object + +=head2 get + +=head2 get_all_references + +=head2 get_last_reference + +=head2 mark + +=head2 new_worksheet + +=head2 param + +=head2 use_unicode =head1 AUTHOR