]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/blobdiff - lib/LaTeX/TikZ/Set/Path.pm
First cut at the documentation
[perl/modules/LaTeX-TikZ.git] / lib / LaTeX / TikZ / Set / Path.pm
index 18b9020d120da1ef7b26eedcb3379d8e5eb94632..7a8793d1232e9cd82167e273d2c3dbe74bd9d8de 100644 (file)
@@ -15,15 +15,32 @@ Version 0.01
 
 our $VERSION = '0.01';
 
+use LaTeX::TikZ::Interface;
+use LaTeX::TikZ::Functor;
+
 use Any::Moose;
 use Any::Moose 'Util::TypeConstraints'
                => [ qw/subtype as where find_type_constraint/ ];
 
+=head1 RELATIONSHIPS
+
+This class consumes the L<LaTeX::TikZ::Set::Op> and L<LaTeX::TikZ::Set::Mutable> roles, and as such implements the L</path> and L</add> methods.
+
+=cut
+
 with qw(
  LaTeX::TikZ::Set::Op
  LaTeX::TikZ::Set::Mutable
 );
 
+=head1 ATTRIBUTES
+
+=head2 C<ops>
+
+The L<LaTeX::TikZ::Set::Op> objects that from the path.
+
+=cut
+
 subtype 'LaTeX::TikZ::Set::Path::Elements'
      => as 'Object'
      => where { $_->does('LaTeX::TikZ::Set::Op') };
@@ -37,6 +54,12 @@ has '_ops' => (
 
 sub ops { @{$_[0]->_ops} }
 
+=head1 METHODS
+
+=head2 C<add>
+
+=cut
+
 my $ltspe_tc = find_type_constraint('LaTeX::TikZ::Set::Path::Elements');
 
 sub add {
@@ -49,17 +72,30 @@ sub add {
  $set;
 }
 
+=head2 C<path>
+
+=cut
+
 sub path {
  my $set = shift;
 
  join ' ', map $_->path(@_), $set->ops;
 }
 
-use LaTeX::TikZ::Interface path => sub {
- shift;
+LaTeX::TikZ::Interface->register(
+ path => sub {
+  shift;
 
- __PACKAGE__->new(ops => \@_);
-};
+  __PACKAGE__->new(ops => \@_);
+ },
+);
+
+LaTeX::TikZ::Functor->default_rule(
+ (__PACKAGE__) => sub {
+  my ($functor, $set, @args) = @_;
+  $set->new(ops => [ map $_->$functor(@args), $set->ops ])
+ }
+);
 
 __PACKAGE__->meta->make_immutable;