]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/blobdiff - lib/LaTeX/TikZ/Mod/Layer.pm
Remove magic LaTeX::TikZ::Interface->import
[perl/modules/LaTeX-TikZ.git] / lib / LaTeX / TikZ / Mod / Layer.pm
index f8d57a2c04e0185ef7c6408573ab6ec541a7dd60..0dd0a84a76dec2a4b0f06a9c470d9ca253a31de3 100644 (file)
@@ -15,10 +15,13 @@ Version 0.01
 
 our $VERSION = '0.01';
 
-use List::Util ();
+use Scalar::Util ();
+use List::Util   ();
 
 use LaTeX::TikZ::Mod::Formatted;
 
+use LaTeX::TikZ::Interface;
+
 use Any::Moose;
 use Any::Moose 'Util::TypeConstraints';
 
@@ -78,9 +81,11 @@ around 'new' => sub {
  if (defined $name) {
   $self->meta->find_attribute_by_name('name')
              ->type_constraint->assert_valid($name);
-  confess("Can't redefine layer '$name'") if keys(%args) > 1;
   my $layer = $layers{$name};
-  return $layer if defined $layer;
+  if (defined $layer) {
+   confess("Can't redefine layer '$name'") if keys(%args) > 1;
+   return $layer;
+  }
  }
 
  return $self->$orig(%args);
@@ -89,7 +94,9 @@ around 'new' => sub {
 sub BUILD {
  my ($self) = @_;
 
- $layers{$self->name} = $self;
+ my $name = $self->name;
+ $layers{$name} = $self;
+ Scalar::Util::weaken($layers{$name});
 }
 
 sub DEMOLISH {
@@ -168,12 +175,14 @@ sub cover { $_[0]->name eq $_[1]->name }
                 map { ref() ? $_->name : $_ }
                  keys %score;
 
-  my $intro = join '',
-               map "\\pgfdeclarelayer{$_}\n",
-                grep $_ ne 'main',
-                 @layers;
+  my @intro = map "\\pgfdeclarelayer{$_}",
+               grep $_ ne 'main',
+                @layers;
 
-  $intro . "\\pgfsetlayers{" . join(',', @layers) . "}\n";
+  return (
+   @intro,
+   "\\pgfsetlayers{" . join(',', @layers) . "}",
+  );
  }
 }
 
@@ -186,11 +195,14 @@ sub apply {
  )
 }
 
-use LaTeX::TikZ::API layer => sub {
- shift;
+LaTeX::TikZ::Interface->register(
+ layer => sub {
+  shift;
 
- __PACKAGE__->new(name => $_[0]);
-};
+  my $name = shift;
+  __PACKAGE__->new(name => $name, @_);
+ },
+);
 
 __PACKAGE__->meta->make_immutable(
  inline_constructor => 0,