1 package Onis::Plugins::Bignumbers;
6 use Onis::Config (qw(get_config));
7 use Onis::Html (qw(html_escape get_filehandle));
8 use Onis::Language (qw(translate));
9 use Onis::Data::Core (qw(get_main_nick register_plugin));
10 use Onis::Data::Persistent ();
11 use Onis::Users (qw(nick_to_name));
12 use Onis::Plugins::Core (qw(get_core_nick_counters));
14 our $BigNumbers = Onis::Data::Persistent->new ('BigNumbers', 'nick', qw(questions uppercase smiley_happy smiley_sad));
17 register_plugin ('TEXT', \&add);
18 register_plugin ('ACTION', \&add);
19 register_plugin ('OUTPUT', \&output);
22 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
30 my $nick = $data->{'nick'};
31 my $text = $data->{'text'};
35 my @nums = $BigNumbers->get ($nick);
48 if ((uc ($text) eq $text) and ($text =~ m/[A-Z]/))
54 if ($text =~ m/( |^)[;:]-?\)( |$)/)
60 if ($text =~ m/( |^):-?\(( |$)/)
68 $BigNumbers->put ($nick, @nums);
76 for ($BigNumbers->keys ())
79 my $main = get_main_nick ($nick);
80 my ($questions, $uppercase, $smiley_happy, $smiley_sad) = $BigNumbers->get ($nick);
82 next unless (defined ($smiley_sad));
84 if (!defined ($CalcData->{$main}))
86 my ($lines, $words, $chars) = get_core_nick_counters ($main);
87 next unless (defined ($chars));
101 $CalcData->{$main}{'questions'} += $questions;
102 $CalcData->{$main}{'uppercase'} += $uppercase;
103 $CalcData->{$main}{'smiley_happy'} += $smiley_happy;
104 $CalcData->{$main}{'smiley_sad'} += $smiley_sad;
114 my $fh = get_filehandle ();
116 $trans = translate ('Big Numbers');
118 <table class="plugin bignumbers">
123 ($first, $second) = sort_by_field ('questions');
126 my $percent = 100 * $CalcData->{$first}{'questions'} / $CalcData->{$first}{'lines'};
127 my $trans = translate ('questions0: %s %2.1f%%');
129 print $fh " <tr>\n <td>";
130 printf $fh ($trans, $first, $percent);
134 $percent = 100 * $CalcData->{$second}{'questions'} / $CalcData->{$second}{'lines'};
135 $trans = translate ('questions1: %s %2.1f%%');
137 print $fh "<br />\n",
138 qq# <span class="small">#;
139 printf $fh ($trans, $second, $percent);
143 print $fh "</td>\n </tr>\n";
146 ($first, $second) = sort_by_field ('uppercase');
149 my $percent = 100 * $CalcData->{$first}{'uppercase'} / $CalcData->{$first}{'lines'};
150 my $trans = translate ('yells0: %s %2.1f%%');
152 print $fh " <tr>\n <td>";
153 printf $fh ($trans, $first, $percent);
157 $percent = 100 * $CalcData->{$second}{'uppercase'} / $CalcData->{$second}{'lines'};
158 $trans = translate ('yells1: %s %2.1f%%');
160 print $fh "<br />\n",
161 qq# <span class="small">#;
162 printf $fh ($trans, $second, $percent);
166 print $fh "</td>\n </tr>\n";
169 ($first, $second) = sort_by_field ('smiley_happy');
172 my $percent = 100 * $CalcData->{$first}{'smiley_happy'} / $CalcData->{$first}{'lines'};
173 my $trans = translate ('happy0: %s %2.1f%%');
175 print $fh " <tr>\n <td>";
176 printf $fh ($trans, $first, $percent);
180 $percent = 100 * $CalcData->{$second}{'smiley_happy'} / $CalcData->{$second}{'lines'};
181 $trans = translate ('happy1: %s %2.1f%%');
183 print $fh "<br />\n",
184 qq# <span class="small">#;
185 printf $fh ($trans, $second, $percent);
189 print $fh "</td>\n </tr>\n";
192 ($first, $second) = sort_by_field ('smiley_sad');
195 my $percent = 100 * $CalcData->{$first}{'smiley_sad'} / $CalcData->{$first}{'lines'};
196 my $trans = translate ('sad0: %s %2.1f%%');
198 print $fh " <tr>\n <td>";
199 printf $fh ($trans, $first, $percent);
203 $percent = 100 * $CalcData->{$second}{'smiley_sad'} / $CalcData->{$second}{'lines'};
204 $trans = translate ('sad1: %s %2.1f%%');
206 print $fh "<br />\n",
207 qq# <span class="small">#;
208 printf $fh ($trans, $second, $percent);
212 print $fh "</td>\n </tr>\n";
216 my @names = sort_by_field ('chars');
228 $chan_chars += $CalcData->{$_}{'chars'} || 0;
229 $chan_lines += $CalcData->{$_}{'lines'} || 0;
234 $longest = shift (@names);
238 $longest2 = shift (@names);
242 $shortest = pop (@names);
246 $shortest2 = pop (@names);
251 my $avg = $CalcData->{$longest}{'chars'} / $CalcData->{$longest}{'lines'};
252 my $trans = translate ('max chars0: %s %1.1f');
254 print $fh " <tr>\n <td>";
255 printf $fh ($trans, $longest, $avg);
259 $avg = $CalcData->{$longest2}{'chars'} / $CalcData->{$longest2}{'lines'};
260 $trans = translate ('max chars1: %s %1.1f');
262 print $fh "<br />\n",
263 qq# <span class="small">#;
264 printf $fh ($trans, $longest2, $avg);
268 $avg = $chan_chars / $chan_lines;
269 $trans = translate ('chars avg: %1.1f');
271 print $fh "<br />\n",
272 qq# <span class="small">#;
273 printf $fh ($trans, $avg);
274 print $fh "</span></td>\n </tr>\n";
279 my $avg = $CalcData->{$shortest}{'chars'} / $CalcData->{$shortest}{'lines'};
280 my $trans = translate ('min chars0: %s %1.1f');
282 print $fh " <tr>\n <td>";
283 printf $fh ($trans, $shortest, $avg);
287 $avg = $CalcData->{$shortest2}{'chars'} / $CalcData->{$shortest2}{'lines'};
288 $trans = translate ('min chars1: %s %1.1f');
290 print $fh "<br />\n",
291 qq# <span class="small">#;
292 printf $fh ($trans, $shortest2, $avg);
295 print $fh "</td>\n </tr>\n";
300 my @names = sort_by_field ('words');
310 $chan_words += $CalcData->{$_}{'words'} || 0;
311 $chan_lines += $CalcData->{$_}{'lines'} || 0;
316 $first = shift (@names);
320 $second = shift (@names);
325 my $avg = $CalcData->{$first}{'words'} / $CalcData->{$first}{'lines'};
326 my $trans = translate ('max words0: %s %1.1f');
328 print $fh " <tr>\n <td>";
329 printf $fh ($trans, $first, $avg);
333 $avg = $CalcData->{$second}{'words'} / $CalcData->{$second}{'lines'};
334 $trans = translate ('max words1: %s %1.1f');
336 print $fh "<br />\n",
337 qq# <span class="small">#;
338 printf $fh ($trans, $second, $avg);
342 $avg = $chan_words / $chan_lines;
343 $trans = translate ('words avg: %1.1f');
345 print $fh "<br />\n",
346 qq# <span class="small">#;
347 printf $fh ($trans, $avg);
348 print $fh "</span></td>\n </tr>\n";
352 print $fh "</table>\n\n";
361 ($CalcData->{$b}{$field} / $CalcData->{$b}{'lines'})
363 ($CalcData->{$a}{$field} / $CalcData->{$a}{'lines'})
366 defined ($CalcData->{$_}{'lines'})
367 and ($CalcData->{$_}{'lines'} != 0)
368 and defined ($CalcData->{$_}{$field})
370 (keys (%{$CalcData->}));
372 while (scalar (@retval) < 2)