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 {
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) . "}",
+ );
}
}
)
}
-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,