]> git.vpit.fr Git - perl/modules/LaTeX-TikZ.git/blob - lib/LaTeX/TikZ/Interface.pm
0a1739b2271e213005a49334c9492f4ad33c0b7c
[perl/modules/LaTeX-TikZ.git] / lib / LaTeX / TikZ / Interface.pm
1 package LaTeX::TikZ::Interface;
2
3 use strict;
4 use warnings;
5
6 =head1 NAME
7
8 LaTeX::TikZ::Interface - LaTeX::TikZ public interface register and loader.
9
10 =head1 VERSION
11
12 Version 0.02
13
14 =cut
15
16 our $VERSION = '0.02';
17
18 use Sub::Name ();
19
20 =head1 METHODS
21
22 =head2 C<< register $keyword => $code >>
23
24 Registers C<$code> to be available with C<< Tikz->$keyword >>.
25
26 =cut
27
28 sub register {
29  shift;
30
31  while (@_ >= 2) {
32   my ($name, $code) = splice @_, 0, 2;
33
34   unless (defined $name and $name =~ /^[a-z_][a-z0-9_]+$/i) {
35    require Carp;
36    Carp::confess('Invalid interface name');
37   }
38
39   if (do { no strict 'refs'; defined &{__PACKAGE__."::$name"} }) {
40    require Carp;
41    Carp::confess("'$name' is already defined in the interface");
42   }
43
44   unless (defined $code and ref $code eq 'CODE') {
45    require Carp;
46    Carp::confess('Invalid code reference');
47   }
48
49   Sub::Name::subname($name => $code);
50
51   {
52    no strict 'refs';
53    *{__PACKAGE__.'::'.$name} = $code;
54   }
55  }
56
57  return;
58 }
59
60 =head2 C<load>
61
62 Load all the modules of the L<LaTeX::TikZ> official suite that register a keyword in the interface.
63
64 =cut
65
66 sub load {
67  require LaTeX::TikZ::Formatter;      # formatter
68  require LaTeX::TikZ::Functor;        # functor
69
70  require LaTeX::TikZ::Set::Raw;       # raw
71
72  require LaTeX::TikZ::Set::Union;     # union
73  require LaTeX::TikZ::Set::Sequence;  # seq
74  require LaTeX::TikZ::Set::Chain;     # chain, join
75
76  require LaTeX::TikZ::Set::Point;     # point
77  require LaTeX::TikZ::Set::Line;      # line
78  require LaTeX::TikZ::Set::Polyline;  # polyline, closed_polyline
79  require LaTeX::TikZ::Set::Rectangle; # rectangle
80  require LaTeX::TikZ::Set::Circle;    # circle
81  require LaTeX::TikZ::Set::Arc;       # arc
82  require LaTeX::TikZ::Set::Arrow;     # arrow
83
84  require LaTeX::TikZ::Mod::Raw;       # raw_mod
85
86  require LaTeX::TikZ::Mod::Clip;      # clip
87  require LaTeX::TikZ::Mod::Layer;     # layer
88
89  require LaTeX::TikZ::Mod::Scale;     # scale
90  require LaTeX::TikZ::Mod::Width;     # width
91  require LaTeX::TikZ::Mod::Color;     # color
92  require LaTeX::TikZ::Mod::Fill;      # fill
93  require LaTeX::TikZ::Mod::Pattern;   # pattern
94 }
95
96 =head1 SEE ALSO
97
98 L<LaTeX::TikZ>.
99
100 =head1 AUTHOR
101
102 Vincent Pit, C<< <perl at profvince.com> >>, L<http://www.profvince.com>.
103
104 You can contact me by mail or on C<irc.perl.org> (vincent).
105
106 =head1 BUGS
107
108 Please report any bugs or feature requests to C<bug-latex-tikz at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=LaTeX-TikZ>.
109 I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
110
111 =head1 SUPPORT
112
113 You can find documentation for this module with the perldoc command.
114
115     perldoc LaTeX::TikZ
116
117 =head1 COPYRIGHT & LICENSE
118
119 Copyright 2010,2011,2012,2013,2014,2015 Vincent Pit, all rights reserved.
120
121 This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
122
123 =cut
124
125 1; # End of LaTeX::TikZ::Interface