]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/commitdiff
Flatten scopes at creation time
authorVincent Pit <vince@profvince.com>
Thu, 14 Apr 2011 17:36:17 +0000 (19:36 +0200)
committerVincent Pit <vince@profvince.com>
Thu, 14 Apr 2011 17:36:17 +0000 (19:36 +0200)
This simplifies the folding logic and allows us to get rid of flatten().

lib/LaTeX/TikZ/Scope.pm

index 1a57c613f36fbf1513be0a3f72d5ea3d331939d7..2222349333785bed3b5b0d0964ee57d5231a9f1e 100644 (file)
@@ -49,7 +49,7 @@ has '_mods_cache' => (
 
 has 'body' => (
  is       => 'ro',
- isa      => 'LaTeX::TikZ::Scope|ArrayRef[Str]',
+ isa      => 'ArrayRef[Str]',
  required => 1,
  init_arg => 'body',
 );
@@ -69,6 +69,14 @@ around 'BUILDARGS' => sub {
   }
  }
 
+ my $body = $args{body};
+ if ($my_tc->check($body)) {
+  push @$mods, $body->mods;
+  $args{body} = $body->body;
+ }
+
+ $args{mods} = $mods;
+
  $class->$orig(%args);
 };
 
@@ -89,23 +97,8 @@ sub BUILD {
 
 =head1 METHODS
 
-=head2 C<flatten>
-
 =cut
 
-sub flatten {
- my ($scope) = @_;
-
- do {
-  my $body = $scope->body;
-  return $scope unless $my_tc->check($body);
-  $scope = $scope->new(
-   mods => [ $scope->mods, $body->mods ],
-   body => $body->body,
-  );
- } while (1);
-}
-
 my $inter = Sub::Name::subname('inter' => sub {
  my ($lh, $rh) = @_;
 
@@ -135,8 +128,6 @@ my $inter = Sub::Name::subname('inter' => sub {
 sub instantiate {
  my ($scope) = @_;
 
- $scope = $scope->flatten;
-
  my ($layer, @clips, @raw_mods);
  for ($scope->mods) {
   my $type = $_->type;
@@ -192,10 +183,8 @@ sub fold {
  my (@left, @right);
 
  if ($my_tc->check($left)) {
-  $left = $left->flatten;
 
   if ($my_tc->check($right)) {
-   $right = $right->flatten;
 
    my ($only_left, $common, $only_right) = $inter->(
     $left->_mods_cache,