]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/blobdiff - lib/LaTeX/TikZ/Mod/Pattern.pm
Complete patterns implementation, interface and tests
[perl/modules/LaTeX-TikZ.git] / lib / LaTeX / TikZ / Mod / Pattern.pm
index 89af81dea0e057b8057dff4ecb712c129ace1327..426098224b321a1670d5adb08a7f18e2e3fbc725 100644 (file)
@@ -21,7 +21,7 @@ with 'LaTeX::TikZ::Mod';
 
 has 'template' => (
  is       => 'ro',
- isa      => 'Str',
+ isa      => 'ArrayRef[Str]',
  required => 1,
 );
 
@@ -57,22 +57,39 @@ sub declare {
 
  my $tikz_id = $tikz->id;
  my $cache   = $pat->_cache->{$tikz_id};
- return $cache->[1] if defined $cache;
- $cache = $pat->_cache->{$tikz_id} = [ ];
+ return @{$cache->[1]} if defined $cache;
 
+ $cache = $pat->_cache->{$tikz_id} = [ ];
  $cache->[0] = 'pat' . $id++;
 
- my $template = $pat->template;
$template =~ s!#([^#]+)#!
+ my $template = [ map $_, @{$pat->template} ];
+ s!#([^#]+)#!
   my ($command, @opts) = split /=/, $1, 2;
   @opts = split /,/, $opts[0] if @opts;
   $handlers{lc $command}->($pat, $tikz, @opts);
- !ge;
+ !ge for @$template;
  $cache->[1] = $template;
+
+ return @$template;
 }
 
 sub apply { 'fill', 'pattern=' . $_[0]->name($_[1]) }
 
+use LaTeX::TikZ::Interface pattern => sub {
+ my $class = shift;
+
+ my %args = @_;
+ if (exists $args{class}) {
+  $class = delete $args{class};
+  $class = __PACKAGE__ . '::' . $class unless $class =~ /::/;
+  (my $pm = $class) =~ s{::}{/}g;
+  $pm .= '.pm';
+  require $pm;
+ }
+
+ $class->new(%args);
+};
+
 __PACKAGE__->meta->make_immutable;
 
 =head1 AUTHOR