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
);
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;
next unless exists $map->{$param};
$depth--, next if $depth;
- $found = !!1;
+ $found = ~~1;
$val = $map->{$param};
last;
}
);
}
-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
{
# 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;
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)
$self->{$key} = $self->resolve($obj, $key);
}
- return !!1;
+ return ~~1;
}
sub exit_scope
pop @{$self->{STACK}};
- return !!1;
+ return ~~1;
}
sub get
$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;
push @{$self->{REFERENCES}{$ref}}, [ $row, $col ];
- return !!1;
+ return ~~1;
}
sub get_all_references
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