]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/blobdiff - lib/LaTeX/TikZ/Mod/Layer.pm
This is 0.02
[perl/modules/LaTeX-TikZ.git] / lib / LaTeX / TikZ / Mod / Layer.pm
index ca0b2bd6cc026ae40014d422dbe45317009b1579..f76e15366e66e0605300ae8ef7afbd669bd0c0f3 100644 (file)
@@ -9,27 +9,46 @@ LaTeX::TikZ::Mod::Layer - A modifier that specifies a drawing layer.
 
 =head1 VERSION
 
-Version 0.01
+Version 0.02
 
 =cut
 
-our $VERSION = '0.01';
+our $VERSION = '0.02';
 
-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';
 
+=head1 RELATIONSHIPS
+
+This class consumes the L<LaTeX::TikZ::Mod> role, and as such implements the L</tag>, L</covers>, L</declare> and L</apply> methods.
+
+=cut
+
 with 'LaTeX::TikZ::Mod';
 
+=head1 ATTRIBUTES
+
+=head2 C<name>
+
+=cut
+
 has 'name' => (
  is       => 'ro',
  isa      => 'Str',
  required => 1,
 );
 
+=head2 C<above>
+
+=cut
+
 subtype 'LaTeX::TikZ::Mod::LevelList'
      => as 'ArrayRef[LaTeX::TikZ::Mod::Layer]';
 
@@ -51,6 +70,10 @@ has '_above' => (
 
 sub above { @{$_[0]->_above} }
 
+=head2 C<below>
+
+=cut
+
 has '_below' => (
  is       => 'ro',
  isa      => 'LaTeX::TikZ::Mod::LevelList',
@@ -69,6 +92,10 @@ has '_score' => (
  builder  => '_build_score',
 );
 
+=head1 METHODS
+
+=cut
+
 my %layers;
 
 around 'new' => sub {
@@ -78,9 +105,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 +118,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 {
@@ -98,13 +129,25 @@ sub DEMOLISH {
  delete $layers{$self->name};
 }
 
+=head2 C<tag>
+
+=cut
+
 sub tag {
  my ($self) = @_;
 
  ref($self) . '/' . $self->name;
 }
 
-sub cover { $_[0]->name eq $_[1]->name }
+=head2 C<covers>
+
+=cut
+
+sub covers { $_[0]->name eq $_[1]->name }
+
+=head2 C<score>
+
+=cut
 
 {
  our %score;
@@ -155,6 +198,10 @@ sub cover { $_[0]->name eq $_[1]->name }
   $score{$name}
  }
 
+=head2 C<declare>
+
+=cut
+
  sub declare {
   shift;
 
@@ -179,6 +226,10 @@ sub cover { $_[0]->name eq $_[1]->name }
  }
 }
 
+=head2 C<apply>
+
+=cut
+
 sub apply {
  my ($self) = @_;
 
@@ -188,16 +239,23 @@ 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,
 );
 
+=head1 SEE ALSO
+
+L<LaTeX::TikZ>, L<LaTeX::TikZ::Mod>.
+
 =head1 AUTHOR
 
 Vincent Pit, C<< <perl at profvince.com> >>, L<http://www.profvince.com>.