소스 검색

Finally added support for 'asian' smiles ^^ (requested by Christian Garbs),
improved the smiley regexps, and implemented new most used smileys stats.

Christoph Berg 21 년 전
부모
커밋
182fab50af
6개의 변경된 파일148개의 추가작업 그리고 19개의 파일을 삭제
  1. 22 14
      docs/Changelog
  2. 70 0
      docs/pisg-doc.xml
  3. 4 0
      lang.txt
  4. 2 0
      modules/Pisg.pm
  5. 39 0
      modules/Pisg/HTMLGenerator.pm
  6. 11 5
      modules/Pisg/Parser/Logfile.pm

+ 22 - 14
docs/Changelog

@@ -1,22 +1,30 @@
 pisg (0.66) - ??
    Christoph:
+   * Features:
+     + Finally added support for 'asian' smiles ^^ (requested by Christian
+       Garbs), improved the smiley regexps, and implemented new most used
+       smileys stats.
+     + Complain about invalid -cfg options (closes SF tracker #1183072 by
+       nandmaster).
    * Cache:
      + Complain if CacheDir does not exist.
      + Note that caching does not work for "one big logfile" setups.
-   * Add correct ChartsRegexp to documentation.
-   * Change -n to -ne in --help output (thanks to Thomas Matthijs for the
-     patch).
-   * Complain about invalid -cfg options (closes SF tracker #1183072 by
-     nandmaster).
-   * Fix picking MinQuote-length quotes (closes SF tracker #1183177 by
-     nandmaster).
-   * Update supy.pm for new log format (thanks to James Vega for the patch).
-   * Add bxlog script supplied by Hannes Tarien.
-   * Continue after empty directories were found (closes SF tracker #1184874
-     by nandmaster).
-   * Latest topic was sometimes set -1 days ago (reported by Jarkko Seppelin).
-   * Most referenced nicks now works for nicks containing upper case chars
-     again (reported by Triper in SF tracker #1167424 and Scelt).
+     + Latest topic was sometimes set -1 days ago (reported by Jarkko
+       Seppelin).
+   * Parser:
+     + Update supy.pm for new log format (thanks to James Vega for the patch).
+     + Add bxlog script supplied by Hannes Tarien.
+   * Documentation:
+     + Add correct ChartsRegexp.
+   * Bugfixes:
+     + Change -n to -ne in --help output (thanks to Thomas Matthijs for the
+       patch).
+     + Fix picking MinQuote-length quotes (closes SF tracker #1183177 by
+       nandmaster).
+     + Continue after empty directories were found (closes SF tracker #1184874
+       by nandmaster).
+     + Most referenced nicks now works for nicks containing upper case chars
+       again (reported by Triper in SF tracker #1167424 and Scelt).
 
 pisg (0.65) - Fri Apr, 15th 2005
    Christoph:

+ 70 - 0
docs/pisg-doc.xml

@@ -2128,6 +2128,41 @@
     </refsect1>
     </refentry>
 
+    <!-- *** SHOWSMILEYS *** -->
+    <refentry id="ShowSmileys">
+
+    <refmeta> <refentrytitle>ShowSmileys</refentrytitle> </refmeta>
+
+    <refnamediv>
+    <refname>ShowSmileys</refname>
+    <refpurpose>show most used smileys</refpurpose>
+    </refnamediv>
+
+    <refsynopsisdiv><programlisting>
+      <![CDATA[
+        <channel="#channel">
+         Logfile = "channel.log"
+         Format = "xchat"
+         ShowSmileys = "0"
+        </channel>
+
+        <set ShowSmileys="1">
+      ]]>
+    </programlisting></refsynopsisdiv>
+
+    <refsect1>
+    <title>Description</title>
+    <para>
+    With this option, pisg will make a list of the most used smileys in the
+    channel. See also <xref linkend="SmileyHistory" />.
+    </para>
+    </refsect1>
+    <refsect1>
+    <title>Default</title>
+    <para> 0 (disabled) </para>
+    </refsect1>
+    </refentry>
+
     <!-- *** SHOWKARMA *** -->
     <refentry id="ShowKarma">
 
@@ -2976,6 +3011,41 @@
     </refsect1>
     </refentry>
 
+    <!-- *** SmileyHistory *** -->
+    <refentry id="SmileyHistory">
+
+    <refmeta> <refentrytitle>SmileyHistory</refentrytitle> </refmeta>
+
+    <refnamediv>
+    <refname>SmileyHistory</refname>
+    <refpurpose>maximum number of smileys to show in smiley stats</refpurpose>
+    </refnamediv>
+
+    <refsynopsisdiv><programlisting>
+      <![CDATA[
+        <channel="#channel">
+         logfile = "channel.log"
+         format = "mIRC"
+         SmileyHistory = "3"
+        </channel>
+
+        <set SmileyHistory="15">
+      ]]>
+    </programlisting></refsynopsisdiv>
+
+    <refsect1>
+    <title>Description</title>
+    <para>
+    At most this many smileys will appear in smiley stats.
+    See also <xref linkend="ShowSmileys" />.
+    </para>
+    </refsect1>
+    <refsect1>
+    <title>Default</title>
+    <para> 10 </para>
+    </refsect1>
+    </refentry>
+
     <!-- *** KarmaHistory *** -->
     <refentry id="KarmaHistory">
 

+ 4 - 0
lang.txt

@@ -146,6 +146,7 @@ activenickstopic = "Most active nicks"
 activenickbyhourtopic = "Most active nicks by hours"
 mostwordstopic = "Most used words"
 referencetopic = "Most referenced nicks"
+smileytopic = "Smileys :-)"
 karmatopic = "[:channel] karma"
 urlstopic = "Most referenced URLs"
 chartstopic = "[:channel] Music Charts"
@@ -175,6 +176,7 @@ show_wpl = "Words per line"
 show_cpl = "Chars per line"
 show_lastseen = "Last seen"
 lastused = "Last Used by"
+smiley = "Smiley"
 karma = "Karma"
 goodkarma = "Good karma by"
 badkarma = "Bad karma by"
@@ -314,6 +316,7 @@ activenickstopic = "Wer quatscht am meisten?"
 activenickbyhourtopic = "Wer war wann am aktivsten?"
 mostwordstopic = "Am meisten benutzte Wörter"
 referencetopic = "Begehrte Nicks :)"
+smileytopic = "Smileys :-)"
 karmatopic = "[:channel]-Karma"
 urlstopic = "Am meisten benutzte URLs"
 chartstopic = "Ohrwürmer auf [:channel]"
@@ -343,6 +346,7 @@ show_cpl = "Zeichen pro Zeile"
 numberuses = "Wie oft benutzt"
 show_lastseen = "Zuletzt gesehen"
 lastused = "Zuletzt benutzt von"
+smiley = "Smiley"
 karma = "Karma"
 goodkarma = "Gutes Karma von"
 badkarma = "Schleches Karma von"

+ 2 - 0
modules/Pisg.pm

@@ -156,6 +156,7 @@ sub get_default_config_settings
         showrandquote => 1,
         showmuw => 1,
         showmrn => 1,
+        showsmileys => 0,
         showkarma => 0,
         showmru => 1,
         showcharts => 0,
@@ -184,6 +185,7 @@ sub get_default_config_settings
         urlhistory => 5,
         chartshistory => 5,
         nickhistory => 5,
+        smileyhistory => 10,
         karmahistory => 5,
         wordhistory => 10,
         mostnickshistory => 5,

+ 39 - 0
modules/Pisg/HTMLGenerator.pm

@@ -141,6 +141,10 @@ sub create_output
         $self->_mostreferencednicks();
     }
 
+    if ($self->{cfg}->{showsmileys}) {
+        $self->_smileys();
+    }
+
     if ($self->{cfg}->{showkarma}) {
         $self->_karma();
     }
@@ -1828,6 +1832,41 @@ sub _mostreferencednicks
     }
 }
 
+sub _smileys
+{
+    my $self = shift;
+
+    my %usages;
+    foreach my $smiley (sort keys %{ $self->{stats}->{smileys} }) {
+        $usages{$smiley} = $self->{stats}->{smileys}{$smiley};
+    }
+    my @popular = sort { $usages{$b} <=> $usages{$a} } keys %usages;
+    return unless @popular;
+
+    $self->_headline($self->_template_text('smileytopic'));
+
+    _html("<table border=\"0\" width=\"$self->{cfg}->{tablewidth}\"><tr>");
+    _html("<td>&nbsp;</td><td class=\"tdtop\"><b>" . $self->_template_text('smiley') . "</b></td>");
+    _html("<td class=\"tdtop\"><b>" . $self->_template_text('numberuses') . "</b></td>");
+    _html("<td class=\"tdtop\"><b>" . $self->_template_text('lastused') . "</b></td></tr>");
+
+    for(my $i = 0; $i < $self->{cfg}->{smileyhistory}; $i++) {
+        last if $i >= @popular;
+        my $a = $i + 1;
+        my $popular   = $self->_format_word($popular[$i]);
+        my $count     = $self->{stats}->{smileys}{$popular[$i]};
+        my $lastused  = $self->_format_word($self->{stats}->{smileynicks}{$popular[$i]} || "");
+
+        my $class = ($a == 1) ? 'hirankc' : 'rankc';
+        _html("<tr><td class=\"$class\">$a</td>");
+        _html("<td class=\"hicell\">$popular</td>");
+        _html("<td class=\"hicell\">$count</td>");
+        _html("<td class=\"hicell\">$lastused</td>");
+        _html("</tr>");
+    }
+    _html("</table>");
+}
+
 sub _karma
 {
     # List showing the most referenced nicks

+ 11 - 5
modules/Pisg/Parser/Logfile.pm

@@ -396,13 +396,19 @@ sub _parse_file
                     }
 
                     # Who smiles the most?
-                    # A regex matching al lot of smilies
-                    $stats->{smiles}{$nick}++
-                        if ($saying =~ /[8;:=][ ^-o]?[)pPD\}\]>]/o);
+                    # smileys including asian-style (^^ ^_^' ^^; ^_____^ ^o^)
+                    if ($saying =~ /(>?[8;:=%]'?[-o*^][\)pPD\}\]>]|[;:]\)|\^[_o-]*\^[';])/o) {
+                        $stats->{smiles}{$nick}++;
+                        $stats->{smileys}{$1}++;
+                        $stats->{smileynicks}{$1} = $nick;
+                    }
 
-                    if ($saying =~ /[8;:=][ ^-]?[\(\[\\\/\{]/o and
+                    # asian frown: ;_;
+                    if ($saying =~ /([8;:=%]'?[-o*^][\(\[\\\/\{|]|:\(|;_+;|T_+T|-[._]+-)/o and
                         $saying !~ /\w+:\/\//o) {
                         $stats->{frowns}{$nick}++;
+                        $stats->{smileys}{$1}++;
+                        $stats->{smileynicks}{$1} = $nick;
                     }
 
                     if ($self->{cfg}->{showkarma}) {
@@ -828,7 +834,7 @@ sub _merge_stats
             $stats->{$key} = $s->{$key};
         } elsif ($key =~ /^(parsedlines|totallines)$/) { # {key} = int: add
             $stats->{$key} += $s->{$key};
-        } elsif ($key =~ /^(wordnicks|word_upcase|urlnicks|chartnicks)$/) { # {key}->{} = str: copy
+        } elsif ($key =~ /^(wordnicks|word_upcase|urlnicks|chartnicks|smileynicks)$/) { # {key}->{} = str: copy
             foreach my $subkey (keys %{$s->{$key}}) {
                 $stats->{$key}->{$subkey} = $s->{$key}->{$subkey};
             }