]> git.deb.at Git - deb/packages.git/blob - lib/Template/Plugin/Math.pm
Make the sponsors note more flexible
[deb/packages.git] / lib / Template / Plugin / Math.pm
1 #============================================================= -*-Perl-*-
2 #
3 # Template::Plugin::Math
4 #
5 # DESCRIPTION
6 #   Plugin implementing numerous mathematical functions.
7 #
8 # AUTHORS
9 #   Andy Wardley   <abw@wardley.org>
10 #
11 # COPYRIGHT
12 #   Copyright (C) 2002-2007 Andy Wardley.  All Rights Reserved.
13 #
14 #   This module is free software; you can redistribute it and/or
15 #   modify it under the same terms as Perl itself.
16 #
17 #============================================================================
18
19 package Template::Plugin::Math;
20
21 use strict;
22 use warnings;
23 use base 'Template::Plugin';
24
25 our $VERSION = 1.16;
26 our $AUTOLOAD;
27
28
29 #------------------------------------------------------------------------
30 # new($context, \%config)
31 #
32 # This constructor method creates a simple, empty object to act as a 
33 # receiver for future object calls.  No doubt there are many interesting
34 # configuration options that might be passed, but I'll leave that for 
35 # someone more knowledgable in these areas to contribute...
36 #------------------------------------------------------------------------
37
38 sub new {
39     my ($class, $context, $config) = @_;
40     $config ||= { };
41
42     bless {
43         %$config,
44     }, $class;
45 }
46
47 sub abs   { shift; CORE::abs($_[0]);          }
48 sub atan2 { shift; CORE::atan2($_[0], $_[1]); } # prototyped (ugg)
49 sub cos   { shift; CORE::cos($_[0]);          }
50 sub exp   { shift; CORE::exp($_[0]);          }
51 sub hex   { shift; CORE::hex($_[0]);          }
52 sub int   { shift; CORE::int($_[0]);          }
53 sub log   { shift; CORE::log($_[0]);          }
54 sub oct   { shift; CORE::oct($_[0]);          }
55 sub rand  { shift; CORE::rand($_[0]);         }
56 sub sin   { shift; CORE::sin($_[0]);          }
57 sub sqrt  { shift; CORE::sqrt($_[0]);         }
58 sub srand { shift; CORE::srand($_[0]);        }
59
60 # Use the Math::TrulyRandom module
61 # XXX This is *sloooooooowwwwwwww*
62 sub truly_random {
63     eval { require Math::TrulyRandom; }
64          or die(Template::Exception->new("plugin",
65             "Can't load Math::TrulyRandom"));
66     return Math::TrulyRandom::truly_random_value();
67 }
68
69 eval {
70     require Math::Trig;
71     no strict qw(refs);
72     for my $trig_func (@Math::Trig::EXPORT) {
73         my $sub = Math::Trig->can($trig_func);
74         *{$trig_func} = sub { shift; &$sub(@_) };
75     }
76 };
77
78 # To catch errors from a missing Math::Trig
79 sub AUTOLOAD { return; }
80
81 1;
82
83 __END__
84
85 =head1 NAME
86
87 Template::Plugin::Math - Plugin providing mathematical functions
88
89 =head1 SYNOPSIS
90
91     [% USE Math %]
92
93     [% Math.sqrt(9) %]
94
95 =head1 DESCRIPTION
96
97 The Math plugin provides numerous mathematical functions for use
98 within templates.
99
100 =head1 METHODS
101
102 C<Template::Plugin::Math> makes available the following functions from
103 the Perl core:
104
105 =over 4
106
107 =item abs
108
109 =item atan2
110
111 =item cos
112
113 =item exp
114
115 =item hex
116
117 =item int
118
119 =item log
120
121 =item oct
122
123 =item rand
124
125 =item sin
126
127 =item sqrt
128
129 =item srand
130
131 =back
132
133 In addition, if the L<Math::Trig> module can be loaded, the following
134 functions are also available:
135
136 =over 4
137
138 =item pi
139
140 =item tan
141
142 =item csc
143
144 =item cosec
145
146 =item sec
147
148 =item cot
149
150 =item cotan
151
152 =item asin
153
154 =item acos
155
156 =item atan
157
158 =item acsc
159
160 =item acosec
161
162 =item asec
163
164 =item acot
165
166 =item acotan
167
168 =item sinh
169
170 =item cosh
171
172 =item tanh
173
174 =item csch
175
176 =item cosech
177
178 =item sech
179
180 =item coth
181
182 =item cotanh
183
184 =item asinh
185
186 =item acosh
187
188 =item atanh
189
190 =item acsch
191
192 =item acosech
193
194 =item asech
195
196 =item acoth
197
198 =item acotanh
199
200 =item rad2deg
201
202 =item rad2grad
203
204 =item deg2rad
205
206 =item deg2grad
207
208 =item grad2rad
209
210 =item grad2deg
211
212 =back
213
214 If the L<Math::TrulyRandom> module is available, and you've got the time
215 to wait, the C<truly_random_number> method is available:
216
217     [% Math.truly_random_number %]
218
219 =head1 AUTHOR
220
221 Andy Wardley E<lt>abw@wardley.orgE<gt> L<http://wardley.org/>
222
223 =head1 COPYRIGHT
224
225 Copyright (C) 1996-2007 Andy Wardley.  All Rights Reserved.
226
227 This module is free software; you can redistribute it and/or
228 modify it under the same terms as Perl itself.
229
230 =head1 SEE ALSO
231
232 L<Template::Plugin>
233
234 =cut
235
236 # Local Variables:
237 # mode: perl
238 # perl-indent-level: 4
239 # indent-tabs-mode: nil
240 # End:
241 #
242 # vim: expandtab shiftwidth=4: