X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FLaTeX-TikZ.git;a=blobdiff_plain;f=lib%2FLaTeX%2FTikZ%2FMod%2FPattern.pm;h=426098224b321a1670d5adb08a7f18e2e3fbc725;hp=89af81dea0e057b8057dff4ecb712c129ace1327;hb=d934d1a7f7268b248687f14e0ede2723010bf243;hpb=92f8566cc72a8bfded5c55589030ddab5f215bd6 diff --git a/lib/LaTeX/TikZ/Mod/Pattern.pm b/lib/LaTeX/TikZ/Mod/Pattern.pm index 89af81d..4260982 100644 --- a/lib/LaTeX/TikZ/Mod/Pattern.pm +++ b/lib/LaTeX/TikZ/Mod/Pattern.pm @@ -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