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';
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);
sub BUILD {
my ($self) = @_;
- $layers{$self->name} = $self;
+ my $name = $self->name;
+ $layers{$name} = $self;
+ Scalar::Util::weaken($layers{$name});
}
sub DEMOLISH {
)
}
-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,