1 package Onis::Plugins::Bignumbers;
8 use Onis::Html (qw(get_filehandle));
9 use Onis::Language (qw(translate));
10 use Onis::Data::Core (qw(get_main_nick register_plugin nick_to_name));
11 use Onis::Data::Persistent ();
12 use Onis::Plugins::Core (qw(get_core_nick_counters));
14 @Onis::Plugins::Bignumbers::EXPORT_OK = (qw(get_bignumbers));
15 @Onis::Plugins::Bignumbers::ISA = ('Exporter');
17 our $BigNumbers = Onis::Data::Persistent->new ('BigNumbers', 'nick', qw(questions uppercase smiley_happy smiley_sad));
20 register_plugin ('TEXT', \&add);
21 register_plugin ('ACTION', \&add);
22 register_plugin ('OUTPUT', \&output);
25 print STDERR $/, __FILE__, ": $VERSION" if ($::DEBUG);
33 my $nick = $data->{'nick'};
34 my $text = $data->{'text'};
38 my @nums = $BigNumbers->get ($nick);
51 if ((uc ($text) eq $text) and ($text =~ m/[A-Z]/))
57 if ($text =~ m/( |^)[;:]-?\)( |$)/)
63 if ($text =~ m/( |^):-?\(( |$)/)
71 $BigNumbers->put ($nick, @nums);
79 for ($BigNumbers->keys ())
82 my $main = get_main_nick ($nick);
83 my ($questions, $uppercase, $smiley_happy, $smiley_sad) = $BigNumbers->get ($nick);
85 next unless (defined ($smiley_sad));
87 if (!defined ($CalcData->{$main}))
89 my $core_data = get_core_nick_counters ($main);
90 next unless (%$core_data);
94 lines => $core_data->{'lines_total'},
95 words => $core_data->{'words_total'},
96 chars => $core_data->{'chars_total'},
104 $CalcData->{$main}{'questions'} += $questions;
105 $CalcData->{$main}{'uppercase'} += $uppercase;
106 $CalcData->{$main}{'smiley_happy'} += $smiley_happy;
107 $CalcData->{$main}{'smiley_sad'} += $smiley_sad;
109 require Data::Dumper;
110 print STDOUT Data::Dumper->Dump ([$CalcData->{$main}], ["CalcData->{$main}"]);
124 my $fh = get_filehandle ();
126 $trans = translate ('Big Numbers');
128 <table class="plugin bignumbers">
133 ($first_nick, $second_nick) = sort_by_field ('questions');
136 my $percent = 100 * $CalcData->{$first_nick}{'questions'} / $CalcData->{$first_nick}{'lines'};
137 my $trans = translate ('questions0: %s %2.1f%%');
138 $first_name = nick_to_name ($first_nick) || $first_nick;
140 print $fh " <tr>\n <td>";
141 printf $fh ($trans, $first_name, $percent);
145 $percent = 100 * $CalcData->{$second_nick}{'questions'} / $CalcData->{$second_nick}{'lines'};
146 $trans = translate ('questions1: %s %2.1f%%');
147 $second_name = nick_to_name ($second_nick) || $second_nick;
149 print $fh "<br />\n",
150 qq# <span class="small">#;
151 printf $fh ($trans, $second_name, $percent);
155 print $fh "</td>\n </tr>\n";
158 ($first_nick, $second_nick) = sort_by_field ('uppercase');
161 my $percent = 100 * $CalcData->{$first_nick}{'uppercase'} / $CalcData->{$first_nick}{'lines'};
162 my $trans = translate ('yells0: %s %2.1f%%');
163 $first_name = nick_to_name ($first_nick) || $first_nick;
165 print $fh " <tr>\n <td>";
166 printf $fh ($trans, $first_name, $percent);
170 $percent = 100 * $CalcData->{$second_nick}{'uppercase'} / $CalcData->{$second_nick}{'lines'};
171 $trans = translate ('yells1: %s %2.1f%%');
172 $second_name = nick_to_name ($second_nick) || $second_nick;
174 print $fh "<br />\n",
175 qq# <span class="small">#;
176 printf $fh ($trans, $second_name, $percent);
180 print $fh "</td>\n </tr>\n";
183 ($first_nick, $second_nick) = sort_by_field ('smiley_happy');
186 my $percent = 100 * $CalcData->{$first_nick}{'smiley_happy'} / $CalcData->{$first_nick}{'lines'};
187 my $trans = translate ('happy0: %s %2.1f%%');
188 $first_name = nick_to_name ($first_nick) || $first_nick;
190 print $fh " <tr>\n <td>";
191 printf $fh ($trans, $first_name, $percent);
195 $percent = 100 * $CalcData->{$second_nick}{'smiley_happy'} / $CalcData->{$second_nick}{'lines'};
196 $trans = translate ('happy1: %s %2.1f%%');
197 $second_name = nick_to_name ($second_nick) || $second_nick;
199 print $fh "<br />\n",
200 qq# <span class="small">#;
201 printf $fh ($trans, $second_name, $percent);
205 print $fh "</td>\n </tr>\n";
208 ($first_nick, $second_nick) = sort_by_field ('smiley_sad');
211 my $percent = 100 * $CalcData->{$first_nick}{'smiley_sad'} / $CalcData->{$first_nick}{'lines'};
212 my $trans = translate ('sad0: %s %2.1f%%');
213 $first_name = nick_to_name ($first_nick) || $first_nick;
215 print $fh " <tr>\n <td>";
216 printf $fh ($trans, $first_name, $percent);
220 $percent = 100 * $CalcData->{$second_nick}{'smiley_sad'} / $CalcData->{$second_nick}{'lines'};
221 $trans = translate ('sad1: %s %2.1f%%');
222 $second_name = nick_to_name ($second_nick) || $second_nick;
224 print $fh "<br />\n",
225 qq# <span class="small">#;
226 printf $fh ($trans, $second_name, $percent);
230 print $fh "</td>\n </tr>\n";
234 my @names = sort_by_field ('chars');
246 $chan_chars += $CalcData->{$_}{'chars'} || 0;
247 $chan_lines += $CalcData->{$_}{'lines'} || 0;
252 $longest = shift (@names);
256 $longest2 = shift (@names);
260 $shortest = pop (@names);
264 $shortest2 = pop (@names);
269 my $avg = $CalcData->{$longest}{'chars'} / $CalcData->{$longest}{'lines'};
270 my $trans = translate ('max chars0: %s %1.1f');
271 $first_name = nick_to_name ($longest) || $longest;
273 print $fh " <tr>\n <td>";
274 printf $fh ($trans, $first_name, $avg);
278 $avg = $CalcData->{$longest2}{'chars'} / $CalcData->{$longest2}{'lines'};
279 $trans = translate ('max chars1: %s %1.1f');
280 $second_name = nick_to_name ($longest2) || $longest2;
282 print $fh "<br />\n",
283 qq# <span class="small">#;
284 printf $fh ($trans, $second_name, $avg);
288 $avg = $chan_chars / $chan_lines;
289 $trans = translate ('chars avg: %1.1f');
291 print $fh "<br />\n",
292 qq# <span class="small">#;
293 printf $fh ($trans, $avg);
294 print $fh "</span></td>\n </tr>\n";
299 my $avg = $CalcData->{$shortest}{'chars'} / $CalcData->{$shortest}{'lines'};
300 my $trans = translate ('min chars0: %s %1.1f');
301 $first_name = nick_to_name ($shortest) || $shortest;
303 print $fh " <tr>\n <td>";
304 printf $fh ($trans, $first_name, $avg);
308 $avg = $CalcData->{$shortest2}{'chars'} / $CalcData->{$shortest2}{'lines'};
309 $trans = translate ('min chars1: %s %1.1f');
310 $second_name = nick_to_name ($shortest2) || $shortest2;
312 print $fh "<br />\n",
313 qq# <span class="small">#;
314 printf $fh ($trans, $second_name, $avg);
317 print $fh "</td>\n </tr>\n";
322 my @names = sort_by_field ('words');
332 $chan_words += $CalcData->{$_}{'words'} || 0;
333 $chan_lines += $CalcData->{$_}{'lines'} || 0;
338 $first_nick = shift (@names);
342 $second_nick = shift (@names);
347 my $avg = $CalcData->{$first_nick}{'words'} / $CalcData->{$first_nick}{'lines'};
348 my $trans = translate ('max words0: %s %1.1f');
349 $first_name = nick_to_name ($first_nick) || $first_nick;
351 print $fh " <tr>\n <td>";
352 printf $fh ($trans, $first_name, $avg);
356 $avg = $CalcData->{$second_nick}{'words'} / $CalcData->{$second_nick}{'lines'};
357 $trans = translate ('max words1: %s %1.1f');
358 $second_name = nick_to_name ($second_nick) || $second_nick;
360 print $fh "<br />\n",
361 qq# <span class="small">#;
362 printf $fh ($trans, $second_name, $avg);
366 $avg = $chan_words / $chan_lines;
367 $trans = translate ('words avg: %1.1f');
369 print $fh "<br />\n",
370 qq# <span class="small">#;
371 printf $fh ($trans, $avg);
372 print $fh "</span></td>\n </tr>\n";
376 print $fh "</table>\n\n";
385 ($CalcData->{$b}{$field} / $CalcData->{$b}{'lines'})
387 ($CalcData->{$a}{$field} / $CalcData->{$a}{'lines'})
390 defined ($CalcData->{$_}{'lines'})
391 and ($CalcData->{$_}{'lines'} != 0)
392 and defined ($CalcData->{$_}{$field})
396 while (scalar (@retval) < 2)
408 if (!defined ($CalcData->{$nick}))
413 return ($CalcData->{$nick});