]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/commitdiff
Remove string overloading completely for scope objects
authorVincent Pit <vince@profvince.com>
Sun, 18 Jul 2010 08:11:39 +0000 (10:11 +0200)
committerVincent Pit <vince@profvince.com>
Sun, 18 Jul 2010 08:19:01 +0000 (10:19 +0200)
It isn't really suited anymore to our situation. ->draw no longer needs
to return a scope object : it can now also return a plain array reference.

lib/LaTeX/TikZ/Formatter.pm
lib/LaTeX/TikZ/Scope.pm
lib/LaTeX/TikZ/Set/Mod.pm
lib/LaTeX/TikZ/Set/Op.pm
lib/LaTeX/TikZ/Set/Sequence.pm

index 64266072622b8dac002b407a7c57fa534e13e358..6592b3833f12da2950b7dd690f14a810739a5dd7 100644 (file)
@@ -111,16 +111,12 @@ sub render {
  );
 
  my @decls;
- if (@layers) {
-  push @decls, LaTeX::TikZ::Mod::Layer->declare(@layers);
- }
- for (@other_mods) {
-  push @decls, $_->declare($tikz);
- }
+ push @decls, LaTeX::TikZ::Mod::Layer->declare(@layers) if  @layers;
+ push @decls, $_->declare($tikz)                        for @other_mods;
 
  my @content = (
   "\\begin{tikzpicture}",
-  $seq->draw($tikz)->instantiate,
+  @{ $seq->draw($tikz) },
   "\\end{tikzpicture}",
  );
 
index 05308ddb07a067041770ff797aad66eedc28815b..c07225962824d95eb027c538d991c3e09b18c79d 100644 (file)
@@ -76,7 +76,7 @@ sub body {
 }
 
 use overload (
- '.' => \&concat,
+ '@{}' => 'dereference',
 );
 
 sub flatten {
@@ -163,45 +163,54 @@ sub instantiate {
  return @body;
 }
 
-sub concat {
- my ($left, $right, $rev) = @_;
-
- $_body_tc->assert_valid($right);
+sub dereference { [ $_[0]->instantiate ] }
 
- $left = $left->flatten;
+sub fold {
+ my ($left, $right, $rev) = @_;
 
  my (@left, @right);
 
- if ($my_tc->check($right)) {
-  $right = $right->flatten;
-
-  my ($only_left, $common, $only_right) = $inter->(
-   $left->_mods_cache,
-   $right->_mods_cache,
-  );
-
-  if (@$common) {
-   my $x = $left->new
-                ->mod(@$only_left)
-                ->body($left->_body);
-   my $y = $left->new
-                ->mod(@$only_right)
-                ->body($right->_body);
-   ($x, $y) = ($y, $x) if $rev;
-   return $left->new
-               ->mod(@$common)
-               ->body($x . $y);
+ 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,
+    $right->_mods_cache,
+   );
+
+   if (@$common) {
+    my $x = $left->new
+                 ->mod(@$only_left)
+                 ->body($left->_body);
+    my $y = $left->new
+                 ->mod(@$only_right)
+                 ->body($right->_body);
+    return $left->new
+                ->mod(@$common)
+                ->body(fold($x, $y, $rev));
+   } else {
+    @right = $right->instantiate;
+   }
   } else {
-   @right = $right->instantiate;
+   $_body_tc->assert_valid($right);
+   @right = @$right;
   }
+
+  @left = $left->instantiate;
  } else {
-  @right = @$right;
+  if ($my_tc->check($right)) {
+   return fold($right, $left, 1);
+  } else {
+   $_body_tc->assert_valid($_) for $left, $right;
+   @left  = @$left;
+   @right = @$right;
+  }
  }
 
- @left = $left->instantiate;
-
- $left->new
-      ->body($rev ? [ @right, @left ] : [ @left, @right ]);
+ $rev ? [ @right, @left ] : [ @left, @right ];
 }
 
 __PACKAGE__->meta->make_immutable;
index 76583402eb474d2b48a5d7f062b6da2d8e9ae41b..8444fea9e9cda9cc95620e64864d849d99fd1f08 100644 (file)
@@ -128,9 +128,15 @@ MOD:
 
   my @mods = $set->mods_unique;
 
-  LaTeX::TikZ::Scope->new
-                    ->mod(map $_->apply($tikz), @mods)
-                    ->body($set->_set->draw($tikz))
+  my $body = $set->_set->draw($tikz);
+
+  if (@mods) {
+   $body = LaTeX::TikZ::Scope->new
+                             ->mod(map $_->apply($tikz), @mods)
+                             ->body($body);
+  }
+
+  $body;
  }
 }
 
index c7f7e1b96f9dbd5320beaa54d47b5000987175dd..2c85f0bace0788f560f46f221d32b820c682cac1 100644 (file)
@@ -15,8 +15,6 @@ Version 0.01
 
 our $VERSION = '0.01';
 
-use LaTeX::TikZ::Scope;
-
 use Any::Moose 'Role';
 
 requires qw(
@@ -26,8 +24,7 @@ requires qw(
 sub draw {
  my $set = shift;
 
- LaTeX::TikZ::Scope->new
-                   ->body([ "\\draw " . $set->path(@_) . ' ;' ]);
+ [ "\\draw " . $set->path(@_) . ' ;' ];
 }
 
 =head1 AUTHOR
index 3f14bb7a78a4dba17f6364eaed1e00315436499b..7742435548c12366c2a0385d2f4808fc551977ad 100644 (file)
@@ -17,6 +17,8 @@ our $VERSION = '0.01';
 
 use List::Util ();
 
+use LaTeX::TikZ::Scope;
+
 use Any::Moose;
 use Any::Moose 'Util::TypeConstraints'
                => [ qw/subtype as where find_type_constraint/ ];
@@ -58,14 +60,14 @@ sub add {
 sub draw {
  my $set = shift;
 
- List::Util::reduce { $a . $b } map $_->draw(@_), $set->kids;
+ List::Util::reduce { LaTeX::TikZ::Scope::fold($a, $b) }
+  map $_->draw(@_),
+   $set->kids;
 }
 
 use LaTeX::TikZ::API seq => sub {
  shift;
 
- die 'wut' if $_[0]->isa('LaTeX::TikZ::Set::Op');
-
  __PACKAGE__->new(kids => \@_);
 };