Commits

Anonymous committed 0894d4a

Importing the files into Mail-LMLM

  • Participants

Comments (0)

Files changed (32)

File modules/Mail-LMLM/COPYING

+This is the MIT/X11 license:
+
+--------------
+Copyright 2002 Shlomi Fish.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+

File modules/Mail-LMLM/Changes

+0.6300:   ( Tue Apr 25 09:49:24 IDT 2006 )
+    - Added id="" attributes to the sections.
+
+0.6.2:
+    - RPM .spec fixes for new versions of Mandriva.
+    - Fixed the prepare_package.sh script.
+
+0.6.1:
+    Processed the prolog and epilog parameters in Mail::LMLM.
+
+0.6.0:
+    Upgraded the minor version number to a stable version.
+
+0.5.16:
+    Added MANIFEST to itself.
+
+    Added the RPM Spec file.
+
+0.5.15: 
+    Added a t/use.t test and made sure the objects were moved to blib 
+    during the installation.
+
+    The version is now read from Mail::LMLM.pm instead of the ver.txt
+    file.

File modules/Mail-LMLM/INSTALL

+At the command-line, type:
+
+perl Makefile.PL
+make
+
+To prepare the package for installation and then:
+
+make install
+
+to install it.
+

File modules/Mail-LMLM/MANIFEST

+Makefile.PL
+COPYING
+TODO
+README
+INSTALL
+MANIFEST
+Changes
+perl-Mail-LMLM.spec
+perl-Mail-LMLM.spec.in
+get-version.pl
+prepare_package.sh
+lib/Mail/LMLM.pm
+lib/Mail/LMLM/Object.pm
+lib/Mail/LMLM/Render.pm
+lib/Mail/LMLM/Render/HTML.pm
+lib/Mail/LMLM/Types/Base.pm
+lib/Mail/LMLM/Types/Egroups.pm
+lib/Mail/LMLM/Types/Ezmlm.pm
+lib/Mail/LMLM/Types/Listar.pm
+lib/Mail/LMLM/Types/Listserv.pm
+lib/Mail/LMLM/Types/Mailman.pm
+lib/Mail/LMLM/Types/Majordomo.pm
+examples/Iglu/make-dist.sh
+examples/Iglu/test.pl
+examples/Iglu/upload.sh
+examples/Iglu/Iglu/LMLM/Types/Iglu.pm
+examples/Iglu/Iglu/LMLM/Types/Ivrix.pm
+examples/Iglu/Iglu/LMLM/Types/Linuxology.pm
+examples/Iglu/Iglu/LMLM/Types/Perl_IL.pm
+examples/Iglu/Iglu/LMLM/Types/Hamakor.pm
+t/use.t
+META.yml                                 Module meta-data (added by MakeMaker)

File modules/Mail-LMLM/META.yml

+--- #YAML:1.0
+name:                Mail-LMLM
+version:             0.6300
+abstract:            ~
+license:             ~
+generated_by:        ExtUtils::MakeMaker version 6.31
+distribution_type:   module
+requires:     
+meta-spec:
+    url:     http://module-build.sourceforge.net/META-spec-v1.2.html
+    version: 1.2

File modules/Mail-LMLM/Makefile.PL

+use ExtUtils::MakeMaker;
+
+my $dist_name = "Mail-LMLM";
+
+WriteMakefile(
+    'NAME' => 'Mail::LMLM',
+    'DISTNAME' => $dist_name,
+    'VERSION_FROM' => 'lib/Mail/LMLM.pm',
+    );
+
+use lib './lib';
+require Mail::LMLM;
+
+my $version = $Mail::LMLM::VERSION;
+
+print "Generating the RPM SPEC file\n";
+my $rpm_spec = "perl-${dist_name}.spec";
+open I, "<$rpm_spec.in";
+open O, ">$rpm_spec";
+while (<I>)
+{
+    s!\[\[VERSION\]\]!$version!g;
+    print O $_;
+}
+close(O);
+close(I);

File modules/Mail-LMLM/README

+Hi!
+
+This is the LMLM Distribution. LMLM stands for "List of Mailing Lists Manager"
+and is a framework to render descriptions of mailing lists of variable
+kinds.
+
+The LMLM homepage is: http://vipe.technion.ac.il/~shlomif/LMLM/.
+
+For more infromation consult the Mail::LMLM POD document on your system, or
+look at the Iglu example under examples.
+
+Regards,
+
+    Shlomi Fish, shlomif@vipe.technion.ac.il
+

File modules/Mail-LMLM/TODO

+* Replace all the "print {*{$self->{'out'}}}" in Render::HTML
+with a method call.
+
+* Add DocBook output.
+
+* Add a test to see that each input to Mail::LMLM is processed.
+

File modules/Mail-LMLM/examples/Iglu/Iglu/LMLM/Types/Hamakor.pm

+package Iglu::LMLM::Types::Hamakor;
+
+use strict;
+
+use Iglu::LMLM::Types::Iglu;
+
+use vars qw(@ISA);
+
+@ISA=qw(Iglu::LMLM::Types::Iglu);
+
+sub get_default_hostname
+{
+    my $self = shift;
+
+    return "hamakor.org.il";
+}
+
+1;

File modules/Mail-LMLM/examples/Iglu/Iglu/LMLM/Types/Iglu.pm

+package Iglu::LMLM::Types::Iglu;
+
+use strict;
+
+use Mail::LMLM::Types::Ezmlm;
+
+use vars qw(@ISA);
+
+@ISA=qw(Mail::LMLM::Types::Ezmlm);
+
+sub initialize
+{
+    my $self = shift;
+
+    $self->SUPER::initialize(@_);
+
+    if (! exists($self->{'hostname'}) )
+    {
+        $self->{'hostname'} = $self->get_default_hostname();
+    }
+}
+
+sub get_default_hostname
+{
+    my $self = shift;
+
+    return "iglu.org.il";
+}
+
+sub get_homepage
+{
+    my $self = shift;
+
+    if ( exists($self->{'homepage'}) )
+    {
+        return $self->{'homepage'};
+    }
+    else
+    {
+        return $self->get_default_homepage();
+    }
+}
+
+sub get_default_homepage
+{
+    my $self = shift;
+    
+    return "http://www.iglu.org.il/";
+}
+
+sub get_online_archive
+{
+    my $self = shift;
+
+    if ( exists($self->{'online_archive'}) )
+    {
+        return $self->{'online_archive'};
+    }
+    else
+    {
+        return "http://www.mail-archive.com/" .
+            $self->get_group_base() . '@' .
+            $self->get_hostname() . "/";
+            
+    }
+}
+
+1;

File modules/Mail-LMLM/examples/Iglu/Iglu/LMLM/Types/Ivrix.pm

+package Iglu::LMLM::Types::Ivrix;
+
+use strict;
+
+use Mail::LMLM::Types::Majordomo;
+
+use vars qw(@ISA);
+
+@ISA=qw(Mail::LMLM::Types::Majordomo);
+
+sub initialize
+{
+    my $self = shift;
+
+    $self->SUPER::initialize(@_);
+
+    if (!exists($self->{'hostname'}))
+    {
+        $self->{'hostname'} = "ivrix.org.il";
+    }
+    if (!exists($self->{'homepage'}))
+    {
+        $self->{'homepage'} = "http://www.ivrix.org.il/";
+    }
+    if (!exists($self->{'owner'}))
+    {
+        $self->{'owner'} = [ "nyh", "math.technion.ac.il" ];
+    }
+    
+    return 0;
+}
+
+sub get_online_archive
+{
+    my $self = shift;
+
+    return ("http://" . 
+        $self->get_hostname() .
+        "/mailing-lists/" .
+        $self->get_group_base() .
+        "/archive") ;
+}
+
+

File modules/Mail-LMLM/examples/Iglu/Iglu/LMLM/Types/Linuxology.pm

+package Iglu::LMLM::Types::Linuxology;
+
+use strict;
+
+use Mail::LMLM::Types::Base;
+
+use vars qw(@ISA);
+
+@ISA=qw(Mail::LMLM::Types::Base);
+
+sub get_address
+{
+    my $self = shift;
+
+    return ($self->get_group_base(), $self->get_hostname());
+}
+
+sub render_something_with_subject
+{
+    my $self = shift;
+    
+    my $htmler = shift;
+    my $subject = shift;
+
+    $htmler->para("Send a message to the following E-mail address:");
+    $htmler->indent_inc();
+    $htmler->start_para();
+    $htmler->email_address(
+        $self->get_address()
+        );
+    $htmler->end_para();
+    $htmler->indent_dec();
+    $htmler->para("With the following subject:");
+    $htmler->indent_inc();
+    $htmler->para($subject, { 'bold' => 1 });
+    $htmler->indent_dec();
+
+    return 0;
+}
+
+sub render_subscribe
+{
+    my $self = shift;
+    
+    my $htmler = shift;
+
+    return $self->render_something_with_subject($htmler, "subscribe");
+}
+
+sub render_unsubscribe
+{
+    my $self = shift;
+    
+    my $htmler = shift;
+
+    return $self->render_something_with_subject($htmler, "unsubscribe");
+}
+
+sub render_post
+{
+    my $self = shift;
+    
+    my $htmler = shift;
+
+    return $self->render_something_with_subject($htmler, "stuff");
+}
+
+sub render_owner
+{
+    my $self = shift;
+    
+    my $htmler = shift;
+
+    return $self->render_something_with_subject($htmler, "comments");
+}

File modules/Mail-LMLM/examples/Iglu/Iglu/LMLM/Types/Perl_IL.pm

+package Iglu::LMLM::Types::Perl_IL;
+
+use strict;
+
+use Mail::LMLM::Types::Mailman;
+
+use vars qw(@ISA);
+
+@ISA=qw(Mail::LMLM::Types::Mailman);
+
+sub initialize
+{
+    my $self = shift;
+
+    $self->SUPER::initialize(@_);
+
+    if (! exists($self->{'hostname'}) )
+    {
+        $self->{'hostname'} = "perl.org.il";
+    }
+    
+    if (! exists($self->{'owner'}) )
+    {
+        $self->{'owner'} = [ "gabor", "perl.org.il" ],
+    }
+
+    if (! exists($self->{'homepage'}))
+    {
+        $self->{'homepage'} = "http://www.perl.org.il/";
+    }
+
+    return 0;
+}
+
+sub get_online_archive
+{
+    my $self = shift;
+
+    if ( exists($self->{'online_archive'}) )
+    {
+        return $self->{'online_archive'};
+    }
+    else
+    {
+        return "http://www.perl.org.il/pipermail/" .
+            $self->get_group_base() . "/";
+    }
+}
+
+1;

File modules/Mail-LMLM/examples/Iglu/make-dist.sh

+#!/bin/sh
+
+VER=`cat ver.txt`
+SUBDIR=mailing-lists
+
+if [ ! -e $SUBDIR ] ; then
+    mkdir $SUBDIR ;
+fi
+rm -f $SUBDIR/*
+NEWDIR=Shlomif-MailLL-$VER
+mkdir ../$NEWDIR
+cp -r $(ls | grep -v '^html\.tar\.gz$') ../$NEWDIR/
+(cd .. && tar -czvf $NEWDIR.tar.gz $NEWDIR/)
+mv ../$NEWDIR.tar.gz $SUBDIR/
+rm -fr ../$NEWDIR
+perl test.pl
+chmod 644 $SUBDIR/*
+tar -czvf html.tar.gz $SUBDIR/
+

File modules/Mail-LMLM/examples/Iglu/test.pl

+#!/usr/bin/perl
+
+use strict;
+
+use Mail::LMLM;
+
+use Iglu::LMLM::Types::Ivrix;
+use Iglu::LMLM::Types::Linuxology;
+use Iglu::LMLM::Types::Iglu;
+use Iglu::LMLM::Types::Perl_IL;
+use Iglu::LMLM::Types::Hamakor;
+
+my $prefix = "Iglu::LMLM::Types::";
+
+my %extra_mailing_list_classes = 
+(
+    (map { $_ => $prefix . ucfirst($_) } (qw(ivrix linuxology iglu hamakor))),
+    "perl-il" => $prefix . "Perl_IL",
+);
+
+my @lists = 
+(
+    {
+        'id' => 'gnubies-il',
+        'class' => 'egroups',
+        'group_base' => 'gnubies-il',
+        'title' => "GNUbies-IL",
+        'description' => ("Israeli Linux (or UNIX in general) beginners can " .
+            "post their questions here. If you are a " .
+            " Linux beginner please use this mailing-list instead of Linux-IL"),
+        'guidelines' => ("Anything that is Linux or UNIX related (including " .
+             " newbie questions"),
+    },
+    {
+        'id' => 'linux-il',
+        'class' => 'listar',
+        'group_base' => 'linux-il',
+        'hostname' => 'linux.org.il',
+        'description' => ("The main mailing-list for Linux users in Israel."),
+        'homepage' => "http://www.iglu.org.il/",
+        'title' => "Linux-IL",
+        'online_archive' => sub {
+            my $self = shift;
+            my $r = shift;
+            
+            $r->start_para();
+            $r->text("Hamakor Archive: ");
+            $r->url("http://mirror.hamakor.org.il/archives/linux-il/");
+            $r->text("\n");
+            $r->text("Mail-archive: ");
+            $r->url("http://www.mail-archive.com/linux-il\@cs.huji.ac.il/");
+            $r->text("\n");
+            $r->text("Plasma-Gate archive: (old messages only)");
+            $r->url("http://plasma-gate.weizmann.ac.il/Linux/maillists/");
+            $r->text("\n");
+            $r->end_para();
+
+        },
+        'guidelines' => ("Linux-related questions and discussions. No " . 
+            "newbie questions (use gnubies-il instead).\n" .
+            "\n" .
+            "Post size is limited to 16 kilobytes. Larger posts are queued for " .
+            "moderator approval.\n" .
+            "\n" .
+            "If you are not subscribed the message that you send to the list will " .
+            "require moderator approval and will not be sent to the members " . 
+            "automatically.\n"
+            ),
+    },
+    {
+        'id' => 'linux-heb',
+        'hostname' => "linux.org.il",
+        'class' => 'ezmlm',
+        'group_base' => 'linux-heb',
+        'description' => ("Linux Discussions and Q&A in Hebrew."
+        ),
+        'title' => "The Hebrew Linux Mailing List",
+        'guidelines' => ("Linux discussions, primarily in the Hebrew Language."),
+    },
+    {
+        'id' => 'haifa-linux-club',
+        'class' => 'ezmlm',
+        'group_base' => 'haifux',
+        'hostname' => "haifux.org",
+        'homepage' => "http://www.haifux.org/",
+        'title' => "Haifa Linux Club Mailing-list",
+        'description' => sub {
+            my $self = shift;
+            my $r = shift;
+
+            $r->start_para();
+            $r->text("Announcements of events organized by or related to the ");
+            $r->url("http://www.haifux.org/", "Haifa Linux Club");
+            $r->text(" (a.k.a Haifux).");
+
+            $r->end_para();
+
+            $r->para("General discussion of Linux-related issues and problems is also common and welcome.");
+        },
+        'guidelines' => ("Announcement and Q\&A regarding the " .
+            "Haifa Linux Club."),
+        'online_archive' => "http://www.mail-archive.com/lin-club\@vipe.technion.ac.il/",
+    },
+    {
+        'id' => "bar-ilan",
+        'hostname' => "linux.org.il",
+        'homepage' => "http://www.cs.biu.ac.il/~shadmid/Linux.htm",
+        'class' => 'ezmlm',
+        'title' => "Bar-Ilan University Linux Activities",
+        'group_base' => "linux-biu",
+        'description' => ("Mailing-list for announcing, coordinating and " .
+            "discussing Linux-related activities in Bar-Ilan University"),
+        'guidelines' => ("General Linux questions are welcome (?)"),
+        'online_archive' => "http://www.mail-archive.com/linux-biu\@linux.org.il/",
+    },
+    {
+        'id' => 'iglu-jlc',
+        'class' => 'iglu',
+        'group_base' => 'iglu-jlc',
+        'description' => ("The Jerusalem Linux Club's mailing list. " .
+            "Subscribe to get announcements, coordination activity " . 
+            "and other discussions."
+        ),
+        'title' => "The Jerusalem Linux Club Activities",
+        'guidelines' => ("JLC Activity. General Linux questions are welcome."),
+        'homepage' => "http://jlc.iglu.org.il/",
+        'online_archive' => sub {
+            my $self = shift;
+            my $r = shift;
+
+            $self->render_none($r);
+        },
+    },
+    {
+        'id' => 'telaviv-linux-club',
+        'class' => 'hamakor',
+        'group_base' => 'telux',
+        'description' => ("The Tel-Aviv Linux Club's mailing list. " .
+            "Subscribe to get announcements, coordination activity " . 
+            "and other discussions."
+        ),
+        'title' => "The Tel Aviv Linux Club Discussion List",
+        'guidelines' => ("Telux Activity. Hebrew posts are accepted."),
+        'homepage' => "http://www.cs.tau.ac.il/lin-club/advanced-forum.html",
+        'online_archive' => sub {
+            my $self = shift;
+            my $r = shift;
+
+            $self->render_none($r);
+        },
+    },
+    
+    {
+        'id' => 'linux-il-announce',
+        'class' => 'listar',
+        'group_base' => 'linux-il-announce',
+        'hostname' => 'linux.org.il',
+        'description' => ("Announcements for Linux users in Israel " . 
+            "(Linux-IL members are automatically subscribed)"),
+        'homepage' => "http://www.iglu.org.il/",
+        'title' => "Linux-IL Announce",
+        'online_archive' => sub {
+            my $self = shift;
+            my $r = shift;
+            
+            $r->start_para();
+            $r->text("Plasma-Gate archive: ");
+            $r->url("http://plasma-gate.weizmann.ac.il/Linux/maillists/");
+            $r->text("\n");
+            $r->text("Mail-archive: ");
+            $r->url("http://www.mail-archive.com/linux-il\@cs.huji.ac.il/");
+            $r->end_para();
+
+        },
+        'guidelines' => ("This list is moderated and the moderator accepts " .
+             "any Linux-related announcements. Note that one is " . 
+             "already subscribed to it if he is subscribed to Linux-IL"
+             ),
+    },    
+    {
+        'id' => 'debian-il',
+        'class' => 'ezmlm',
+        'group_base' => 'debian-il',
+        'hostname' => "debian.org.il",
+        'homepage' => "http://www.debian.org.il/",
+        'title' => "Debian-IL",
+        'description' => ("A group dedicated for users of the Debian Linux " .
+            "distribution in Israel."),
+        'guidelines' => ("Coordination of Debian activities in Israel. " . 
+            "Local Debian support and advocacy. Questions of " . 
+            "localization of Debian to Israel "),
+        'online_archive' => "http://www.mail-archive.com/debian-il\@debian.org.il/",
+    },
+    {
+        'id' => 'il-bsd',
+        'class' => 'listserv',
+        'hostname' => "post.tau.ac.il",
+        'title' => "Israeli BSD List",
+        'group_base' => "il-bsd",
+        'description' => ("This is the Israeli mailing list for the " . 
+            "BSD-derived operating systems. Discussions regarding FreeBSD, " .            
+            "OpenBSD, NetBSD and BSDi are welcome"),
+        'guidelines' => "None.",
+        'online_archive' => "http://post.tau.ac.il/archives/il-bsd.html",            
+    }, 
+    {
+        'id' => 'hackers-il',
+        'class' => 'egroups',
+        'title' => "Hackers-IL",
+        'group_base' => 'hackers-il',
+        'description' => ("Hackers-IL is a mailing-list dedicated to general " .
+            "discussion of computer-related topics by Israeli people."),
+        'guidelines' => ("Computers or science related discussions, " . 
+            "questions, news, announcements, etc. If it's specifically " .
+            "related to Linux, you should consider posting it to the " .
+            "Linux-IL or gnubies-il mailing-lists instead."),
+    },
+    {
+        'id' => 'iglu-web',
+        #'class' => 'egroups',
+        'class' => 'iglu',
+        'title' => "IGLU's Website Adminstration (IGLU-web)",
+        'group_base' => 'iglu-web',
+        'description' => sub {
+            my $self = shift;
+            my $r = shift;
+
+            $r->start_para();
+            $r->text("The administrative group of the ");
+            $r->url("http://www.iglu.org.il/", "Linux-IL website");
+            $r->text(" holds its discussion, announcements and reports here.");
+            $r->end_para();
+        },
+        'guidelines' => ("Whatever is related to the Israeli Group of Linux " .
+            "Users' web-site. Other messages should be directed to the other " .
+            "lists."),            
+    },
+    {
+        'id' => 'perl-il',
+        'class' => "perl-il",
+        'title' => "Israel Perl Mongers List",
+        'group_base' => 'perl',
+        'description' => ("The Israeli Perl-Mongers list is dedicated to " .
+            "questions, answers and discussions regarding the perl " .
+            "programming language."),
+        'guidelines' => ("Anything that is perl-related is acceptable."),
+    },
+    {
+        'id' => 'perl-il-news',
+        'class' => "perl-il", 
+        'title' => "Israeli Perl News & Announcements",
+        'group_base' => 'news',
+        'description' => ("This is a mailing list for Israeli Perl News and Announcemnts."),
+        'guidelines' => ("Perl News and Announcements."),
+    },
+    {
+        'id' => "python-il",
+        'hostname' => "linux.org.il",
+        'class' => 'ezmlm',
+        'title' => "Python-IL",
+        'group_base' => "python",
+        'description' => ("Discussions, questions and answers regarding the " .
+            "Python programming language."),
+        'guidelines' => ("Whatever is related to Python."),
+    },
+    {
+        'id' => 'gamla-devel',
+        'class' => 'egroups',
+        'group_base' => 'gamla-devel',
+        'title' => "Gamla Development",
+        'description' => sub {
+            
+            my $self = shift;
+            my $r = shift;
+
+            $r->start_para();
+            $r->text("This mailing-list is dedicated to the development of ");
+            $r->url("http://gamla.iglu.org.il/", "Gamla");
+            $r->text(", the RAD and WWW application server for perl.");
+            $r->end_para();
+            
+            },
+        'guidelines' => ("Whatever is related to the development and " .
+            "usage of Gamla: discussions, suggestions, questions, " .
+            "answers, ideas, RFCs, and so on."),
+    },
+    {
+        'id' => "ivrix-discuss",
+        'class' => 'ivrix',
+        'group_base' => "ivrix-discuss",
+        'title' => "Ivrix Discussions List",
+        'description' => ["Discussions mailing list for the Ivrix Project.",
+
+            "This is a higher-volume mailing list intended for " . 
+            "discussing ideas for Ivrix, Ivrix projects, or " . 
+            "anything related to Hebrew support for Unix. It is " . 
+            "recommended that every Ivrix member who intends to " . 
+            "actively participate in Ivrix development " . 
+            "(or follow it closely) should subscribe to this " . 
+            "mailing list. "
+            ],
+         'guidelines' => ("Whatever related to Ivrix or Hebrew support " .
+            "under Linux."),
+     },
+    {
+        'id' => "translation",
+        'class' => 'ivrix',
+        'group_base' => "translation",
+        'title' => "Translation List",
+        'description' => [ <<"EOF"
+Mailing List dedicated to translation of technical or semi-technical documents
+from English to Hebrew or Arabic.
+EOF
+        ],
+         'guidelines' => ("Whatever related to translation of documents." . 
+            "Posts partially in Hebrew are acceptable."),
+     },     
+     {
+        'id' => 'haifa-linux-club-projects',
+        'class' => 'ezmlm',
+        'group_base' => 'lin-prj',
+        'hostname' => "vipe.technion.ac.il",
+        'homepage' => "http://linuxclub.il.eu.org/",
+        'title' => "Haifa Linux Club's Projects Mailing-list",
+        'description' => ("The Linux Club's programming projects are discussed " . 
+            "here.")
+        ,
+        'guidelines' => ("Anthing that is related to the Linux Club's Programming Projects"),
+        'online_archive' => "http://www.mail-archive.com/lin-prj\@vipe.technion.ac.il/",
+    },
+);
+
+sub prolog
+{
+    my $self = shift;
+    my $main_r = shift;
+
+    $main_r->para( "This is a list of the mailing-lists which are affiliated " .
+        "with the Israeli Group of Linux Users (IGLU). It includes such " . 
+        "information as how to subscribe/unsubscribe, posting address, " . 
+        "posting guidelines, the address of the mailing-list owner, the " . 
+        "mailing-list's homepage and the online messages archive."
+    );
+
+    $main_r->start_para();
+    $main_r->text("If you have any comments, suggestions or additions " . 
+        "regarding the information contained here, don't hesitate to " . 
+        "contact the maintainer of these pages at the following e-mail: ");
+
+    $main_r->email_address("shlomif", "vipe.technion.ac.il");
+    $main_r->end_para();
+}
+
+sub epilog
+{
+    my $self = shift;
+    my $main_r = shift;
+
+    $main_r->horizontal_line();
+
+    $main_r->start_section("Other Mailing Lists");
+
+    $main_r->para("There are other world-wide Linux-related mailing-lists which " .
+        "you can join. Here are some useful links:");
+
+    $main_r->start_para();
+    $main_r->url("http://www.secretagent.com/general/mail.html", "A list of many Linux mailing lists");
+
+    $main_r->text("\n");
+
+    $main_r->url("http://www.croftj.net/~barreiro/lml.shtml", "Linux Mailing List Menu");
+
+    $main_r->end_para();
+
+    $main_r->start_para();
+
+    $main_r->url("http://www.mail-archive.com/", "The Mail Archive");
+
+    $main_r->text(" - Archives many Linux-related lists.\n");
+
+    $main_r->url("http://www.yahoogroups.com/", "YahooGroups.com");
+
+    $main_r->text(" - archives and provides subscription information for many " .
+        "Linux-related lists.");
+
+    $main_r->end_para();
+
+    $main_r->end_section();
+
+    $main_r->horizontal_line();
+
+    open VERSION_IN, "<../ver.txt";
+    my $version = <VERSION_IN>;
+    close (VERSION_IN);
+
+    chomp($version);
+
+    $main_r->start_para();
+    $main_r->text("You can download ");
+    $main_r->url("Shlomif-MailLL-" . $version . ".tar.gz", "the perl code that was used to generate these pages");
+    $main_r->text(".");
+
+    $main_r->end_para();
+}
+
+my $renderer = 
+    Mail::LMLM->new(
+        'extra-classes' => \%extra_mailing_list_classes,
+        title => "List of Linux-related mailing-lists in Israel",
+        headline => "Linux-related mailing-lists in Israel",
+        lists => \@lists,
+        prolog =>  \&prolog,
+        epilog => \&epilog,
+    );
+
+chdir("./mailing-lists/");
+
+$renderer->render();
+

File modules/Mail-LMLM/examples/Iglu/upload.sh

+#!/bin/sh
+rsync -r -v --progress --rsh=ssh mailing-lists shlomif@iglu.org.il:/iglu/html/

File modules/Mail-LMLM/get-version.pl

+#!/usr/bin/perl -w
+
+use strict;
+
+use lib './lib';
+
+require Mail::LMLM;
+
+print $Mail::LMLM::VERSION;
+

File modules/Mail-LMLM/lib/Mail/LMLM.pm

+package Mail::LMLM;
+
+use strict;
+
+use Mail::LMLM::Object;
+
+use vars qw($VERSION);
+
+$VERSION = '0.6300';
+
+use vars qw(@ISA);
+
+@ISA=qw(Mail::LMLM::Object);
+
+use Mail::LMLM::Render::HTML;
+
+use Mail::LMLM::Types::Ezmlm;
+use Mail::LMLM::Types::Egroups;
+use Mail::LMLM::Types::Listar;
+use Mail::LMLM::Types::Majordomo;
+use Mail::LMLM::Types::Listserv;
+use Mail::LMLM::Types::Mailman;
+
+use vars qw(%mailing_list_classes);
+
+my $prefix = "Mail::LMLM::Types::";
+
+%mailing_list_classes = 
+(
+    map { $_ => $prefix . ucfirst($_) } 
+    ('egroups', 'ezmlm', 'listar', 'majordomo', 'listserv', 'mailman')
+);
+
+use vars qw(@render_what);
+
+@render_what =
+(
+    {
+        'title' => "Description",
+        'func' => "render_description",
+        'id' => "desc",
+    },
+    {
+        'title' => "Posting Guidelines",
+        'func' => "render_guidelines",
+        'id' => "post_guidelines",
+    },
+    {
+        'title' => "Subscribing to the Mailing-List",
+        'func' => "render_subscribe",
+        'id' => "subscribe",
+    },
+    {
+        'title' => "Unsubscribing from the Mailing-List",
+        'func' => "render_unsubscribe",
+        'id' => "unsubscribe",
+    },
+    {
+        'title' => "Posting Messages to the Mailing-List",
+        'func' => "render_post",
+        'id' => "posting",
+    },
+    {
+        'title' => "Contacting the Mailing-List's Owner",
+        'func' => "render_owner",
+        'id' => "owner",
+    },
+    {
+        'title' => "The Mailing-List's Homepage",
+        'func' => "render_homepage",
+        'id' => "homepage",
+    },
+    {
+        'title' => "Online Messages Archive",
+        'func' => "render_online_archive",
+        'id' => "archive",
+    },
+);
+
+sub do_nothing
+{
+}
+
+sub initialize
+{
+    my $self = shift;
+
+    my ($key, $value);
+    $self->{'title'} = "List of Mailing Lists";
+    $self->{'headline'} = "List of Mailing Lists";
+    $self->{'prolog'} = $self->{'epilog'} = \&do_nothing;
+    $self->{'extra_classes'} = {};
+    while(scalar(@_))
+    {
+        $key = shift;
+        $value = shift;
+        if ($key =~ /^-?lists$/)
+        {
+            $self->{'lists'} = $value;
+        }
+        elsif ($key =~ /^-?title$/)
+        {
+            $self->{'title'} = $value;
+        }
+        elsif ($key =~ /^-?headline$/)
+        {
+            $self->{'headline'} = $value;
+        }
+        elsif ($key =~ /^-?extra-classes$/)
+        {
+            $self->{'extra_classes'} = $value;
+        }
+        elsif ($key =~ /^-?prolog$/)
+        {
+            $self->{'prolog'} = $value;
+        }
+        elsif ($key =~ /^-?epilog$/)
+        {
+            $self->{'epilog'} = $value;
+        }
+    }
+
+    if (!exists($self->{'lists'}))
+    {
+        die "The lists were not defined for Mail::LMLM!";
+    }
+    return 0;
+}
+
+sub render
+{
+    my $self = shift;
+
+    my ($mail_lister, $mailing_list, $o, $r, $main_o, $main_r, $filename);
+
+    local(*INDEX);
+
+    open INDEX, ">index.html";
+    $main_r = Mail::LMLM::Render::HTML->new(\*INDEX);
+
+    $main_r->start_document(
+        $self->{'title'},
+        $self->{'headline'},
+        );
+        
+    $self->{'prolog'}->($self, $main_r);
+    
+    local(*O);
+
+    foreach $mailing_list (@{$self->{'lists'}})
+    {
+        $filename = $mailing_list->{'id'}.".html";
+        open O, ">".$filename;
+        $r = Mail::LMLM::Render::HTML->new(\*O);
+        
+        my $class_name = $mailing_list->{'class'};
+        my $class = $mailing_list_classes{$class_name} || $self->{'extra_classes'}->{$class_name} || die "Mail::LMLM: Unknown Class \"$class_name\"";
+        if (ref($class) eq "CODE")
+        {
+            $mail_lister = $class->(%$mailing_list);
+        }
+        else
+        {
+            $mail_lister = $class->new(%$mailing_list);
+        }
+        
+        my $title = exists($mailing_list->{'title'}) ? 
+            $mailing_list->{'title'} :
+            $mailing_list->{'id'};
+
+        $r->start_document($title, $title);
+        
+        foreach my $what (@render_what)
+        {
+            my $func = $what->{'func'};
+            $r->start_section($what->{'title'}, +{'id' => $what->{'id'}});
+            $mail_lister->$func($r);
+            $r->end_section();
+        }
+
+        $main_r->start_section($title, {'title_url' => $filename});
+        $mail_lister->render_description($main_r);
+        $main_r->end_section();
+
+        $r->end_document();
+
+        close(O);
+    }
+
+    $self->{'epilog'}->($self, $main_r);
+
+    $main_r->end_document();
+    close(INDEX);
+
+    local(*STYLE);
+    open STYLE, ">style.css";
+    print STYLE <<"EOF";
+a:hover { background-color : LightGreen }
+div.indent { margin-left : 3em }
+EOF
+
+    close(STYLE);
+}
+
+#### Documentation
+
+=head1 NAME
+
+Mail::LMLM - List of Mailing Lists Manager
+
+=head1 SYNOPSIS
+
+    use Mail::LMLM;
+
+    my $renderer =
+        Mail::LMLM->new(
+            'extra-classes' => \%extra_mailing_list_classes,
+            title => "List of the Foo Mailing Lists",
+            headline => "Foo Mailing Lists",
+            lists => \@lists,
+            prolog =>  \&prolog,
+            epilog => \&epilog,
+        );    
+
+    $renderer->render();
+
+=head1 DESCRIPTION
+
+The Mail::LMLM module allows users to easily manage HTML directories of
+mailing lists of various mailing list managers and hosts.
+
+To use it create a new module of type Mail::LMLM with a new method, while 
+initializing it with the list of mailing lists (in order of listing), and 
+other parameters. Then, invoke the render() function to create the HTML
+files within the current directory.
+
+Following is a listing of the parameters
+
+=head2 title and headline
+
+title is what will be displayed in the document inside the E<lt>titleE<gt>
+tag. headline is the headline of the main page.
+
+=head2 prolog and epilog
+
+prolog is a callback for a function that will be called with the Mail::LMLM
+handle and its appropriate rendering back-end when the main's page prologue
+(that comes before the listing itself) is to be displayed. epilog is the
+same for the text after the listing itself. Here is an example for it:
+
+    sub prolog
+    {
+        my $self = shift;
+        my $main_r = shift;
+
+        $main_r->para( "This is a list of the mailing-lists which are affiliated " .
+            "with the Israeli Group of Linux Users (IGLU). It includes such " . 
+            "information as how to subscribe/unsubscribe, posting address, " . 
+            "posting guidelines, the address of the mailing-list owner, the " . 
+            "mailing-list's homepage and the online messages archive."
+        );
+
+        $main_r->start_para();
+        $main_r->text("If you have any comments, suggestions or additions " . 
+            "regarding the information contained here, don't hesitate to " . 
+            "contact the maintainer of these pages at the following e-mail: ");
+
+        $main_r->email_address("shlomif", "vipe.technion.ac.il");
+        $main_r->end_para();
+}
+
+For more information on how to interface with the renderer consult 
+the L<HTML::LMLM::Render> reference page.
+
+=head2 extra-classes
+
+This is a reference to a hash whose keys are extra IDs for mailing lists 
+classes, and its values are either the namespace of the Perl module that
+implements this class, or a subroutine that creates a new class like that.
+
+This class would be better be sub-classed from one of the classes that
+ship with Mail::LMLM. To see examples of how to sub-class, consult the examples
+section of the Mail::LMLM distribution.
+
+=head2 lists
+
+This is a reference to an array of hash references that contain the 
+information for the mailing lists. The fields available here are:
+
+=over 8
+
+=item id
+
+The identifier of the mailing list that will be used as the base name
+for its HTML page.
+
+=item class
+
+The class of the mailing list that determines its type. Available built-in
+classes are: B<egroups> (A Yahoo-Groups mailing list), B<ezmlm> (an Ezmlm-based
+mailing list), B<listar> (a Listar-based mailing list), B<listserv> (
+a Listserv-based mailing list), B<mailman> (a mailman based mailing list),
+B<majordomo> (a majordomo-based mailing list).
+
+=item group_base
+
+The group base that appears before the host.
+
+=item title
+
+The title that will be displayed at the head of the page.
+
+=item hostname
+
+The hostname of the mailing list address.
+
+=item homepage
+
+The homepage URL of the mailing list.
+
+=item description
+
+The description of the mailing list, to be presented in its page.
+
+This can be an handle/Mail::LMLM::Render callback.
+
+=item guidelines
+
+The posting guidelines for the mailing list.
+
+=item online_archive
+
+A URL or a Mail::LMLM::Render callback for displaying the online archive of
+the mailing list.
+
+=back
+
+=head1 SEE ALSO
+
+L<Mail::LMLM::Render,1>
+
+=head1 AUTHOR
+
+Shlomi Fish E<lt>shlomif@vipe.technion.ac.ilE<gt>
+
+=head1 COPYRIGHT AND DISCLAIMER
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+=cut
+

File modules/Mail-LMLM/lib/Mail/LMLM/Object.pm

+package Mail::LMLM::Object;
+
+use strict;
+
+sub new
+{
+    my $class = shift;
+    my $self = {};
+    
+    bless($self, $class);
+    
+    $self->initialize(@_);
+    
+    return $self;
+}
+
+sub initialize
+{
+    my $self = shift;
+
+    return 0;
+}
+
+sub destroy_
+{
+    my $self = shift;
+    
+    return 0;
+}
+
+sub DESTROY
+{
+    my $self = shift;
+    
+    $self->destroy_();
+}
+
+1;

File modules/Mail-LMLM/lib/Mail/LMLM/Render.pm

+package Mail::LMLM::Render;
+
+use strict;
+
+use vars qw(@ISA);
+
+use Mail::LMLM::Object;
+
+@ISA=qw(Mail::LMLM::Object);
+
+sub para
+{
+    my $self = shift;
+
+    $self->start_para();
+    $self->text(@_);
+    $self->end_para();
+
+    return 0;
+}
+
+sub url
+{
+    my $self = shift;
+
+    my $url = shift;
+
+    my $inside;
+    
+    if (scalar(@_))
+    {
+        $inside = shift;
+    }
+    else
+    {
+        $inside = $url;
+    }
+
+    $self->start_link($url);
+    $self->text($inside);
+    $self->end_link();
+
+    return 0;
+}
+
+sub email_address
+{
+    my $self = shift;
+
+    my $account = shift;
+    my $host = shift;
+
+    $self->start_link("mailto:$account\@$host");
+    $self->text("$account\@$host");
+    $self->end_link();
+
+    return 0;
+}
+
+1;
+
+=head1 NAME
+
+Mail::LMLM::Render - rendering backend for LMLM
+
+=head1 SYNOPSIS
+
+    use Mail::LMLM::Render::HTML;
+
+    open O, ">out.html";
+    my $r = Mail::LMLM::Render::HTML->new(\*O);
+
+    $r->start_document("My Document", "Head Title");
+    
+    $r->start_section("Google", { 'title_url' => "http://www.google.com/", });
+    
+    $r->para("Google is a very nice search engine.");
+    $r->end_section();
+    $r->end_document();
+    close(O);
+
+=head1 DESCRIPTION
+
+The Mail::LMLM::Render is a base class for rendering hypertext. It is used
+by LMLM extensively as a thin layer around the actual format.
+
+To use it open a filehandle, and call the package's B<new> constructor
+with a refernce to the filehandle. Afterwards call the B<start_document>
+method (documented below), and when you're done call the B<end_document>
+method. For each section call B<start_section> and B<end_section>
+explicitly.
+
+=head1 METHODS
+
+=head2 start_document($head_title, $body_title)
+
+Starts the document. $head_title will be displayed at the title of the
+Window. $body_title will be displayed as a headline in the main text.
+
+=head2 end_document()
+
+Terminates the document.
+
+=head2 start_section($title [, { 'title_url' => $url } ])
+
+Starts a section titled $title. The second optional paramter contains
+options. Currently the following options are available: 
+
+=over 4
+
+=item C<'title_url'> 
+
+A URL for the section to point to.
+
+=item C<'id'>
+
+An ID for the section heading. (similar to the id="" attribute in XHTML).
+
+=back
+
+=head2 end_section()
+
+Terminates a section.
+
+=head2 start_para()
+
+Starts a paragraph.
+
+=head2 end_para()
+
+Ends the current paragraph.
+
+=head2 text($text [, $style])
+
+Outputs the text $text. $style is an optional reference to a hash that
+contains style parameters. A true C<'bold'> value makes the text bold.
+A true C<'underline'> value makes the text underline. A true
+C<'italic'> value makes the text italic.
+
+=head2 newline()
+
+Outputs a newline.
+
+=head2 start_link($url)
+
+Starts a link to the URL $url.
+
+=head2 end_link()
+
+Terminates the current link.
+
+=head2 indent_inc()
+
+Increases the current indentation.
+
+=head2 indent_dec()
+
+Decreases the current indentation.
+
+=head2 horizontal_line()
+
+Outputs a hard rule to the document.
+
+=head2 email_address($account,$host)
+
+Outputs an E-mail address with a URL. The address is $account@$host.
+
+=head2 url($url [, $inside])
+
+Outputs a hyperlink to the URL $url with a text of $inside (which defaults
+to $url if not specified).
+
+=head2 para($text [, $style])
+
+Outputs the text $text with style $style (refer to the text() method) 
+in its own paragraph.
+
+=head1 AUTHOR
+
+Shlomi Fish E<lt>shlomif@vipe.technion.ac.ilE<gt>
+

File modules/Mail-LMLM/lib/Mail/LMLM/Render/HTML.pm

+package Mail::LMLM::Render::HTML;
+
+use strict;
+
+use vars qw(@ISA);
+
+use Mail::LMLM::Render;
+
+@ISA=qw(Mail::LMLM::Render);
+
+sub initialize
+{
+    my $self = shift;
+
+    my $out_file = shift;
+
+    $self->{'out'} = $out_file;
+
+    return 0;
+}
+
+sub htmlize_onechar
+{
+    my $c = shift;
+
+    if ($c eq "<")
+    {
+        return "\&lt;";
+    }
+    elsif ($c eq ">")
+    {
+        return "\&gt;";
+    }
+    elsif ($c eq '&')
+    {
+        return "\&amp;"
+    }
+    elsif ($c eq "\n")
+    {
+        return "<br />";
+    }
+    else
+    {
+        return $c;
+    }
+}
+
+sub htmlize
+{
+    my $text = shift;
+
+    $text =~ s/(<|>|\&|\n)/&htmlize_onechar($1)/ge;
+
+    return $text;
+}
+
+sub text
+{
+    my $self = shift;
+    
+    my $text = shift;
+
+    my $style;
+    
+    if (scalar(@_))
+    {
+        $style = shift;    
+    }
+    else
+    {
+        $style = {};
+    }
+
+    my $out = htmlize($text);
+
+    if ($style->{'bold'})
+    {
+        $out = "<b>".$out."</b>";
+    }
+    if ($style->{'underline'})
+    {
+        $out = "<u>".$out."</u>";
+    }
+    if ($style->{'italic'})
+    {
+        $out = "<i>".$out."</i>";
+    }
+
+    print {*{$self->{'out'}}} $out;
+
+    return 0;
+}
+
+sub newline
+{
+    my $self = shift;
+
+    print {*{$self->{'out'}}} "<br />\n" ;
+}
+
+sub indent_inc
+{
+    my $self = shift;
+
+    print {*{$self->{'out'}}} "\n<div class=\"indent\">\n";
+
+    return 0;
+}
+
+sub indent_dec
+{
+    my $self = shift;
+
+    print {*{$self->{'out'}}} "\n</div>\n" ;
+
+    return 0;
+}
+
+sub start_link
+{
+    my $self = shift;
+
+    my $url = shift;
+
+    print {*{$self->{'out'}}} "<a href=\"$url\">";
+
+    return 0;
+}
+
+sub end_link
+{
+    my $self = shift;
+
+    print {*{$self->{'out'}}} "</a>";
+
+    return 0;
+}
+
+sub start_section
+{
+    my $self = shift;
+
+    my $title = shift;
+
+    my $options;
+    
+    if (scalar(@_))
+    {
+        $options = shift;
+    }
+    else
+    {
+        $options = {};
+    }
+
+    my $o = $self->{'out'};
+
+    my $id_attr = "";
+    if (exists($options->{'id'}))
+    {
+        $id_attr = " id=\"" . $options->{'id'} . "\"";
+    }
+
+    print {*{$o}} "<h2${id_attr}>";
+    if (exists($options->{'title_url'}))
+    {
+        print {*{$o}} "<a href=\"" . $options->{'title_url'} . "\">" ;
+    }
+    $self->text($title);
+    if (exists($options->{'title_url'}))
+    {
+        print {*{$o}} "</a>";
+    }    
+    print {*{$o}} "</h2>" ;
+    print {*{$o}} "\n\n";
+    
+
+    return 0;
+}
+
+sub start_para
+{
+    my $self = shift;
+
+    print {*{$self->{'out'}}}("<p>\n");
+
+    return 0;
+}
+
+sub end_para
+{
+    my $self = shift;
+
+    print {*{$self->{'out'}}}("\n</p>\n");
+
+    return 0;
+}
+
+sub end_section
+{
+    my $self = shift;
+
+    print {*{$self->{'out'}}}("\n\n");
+
+    return 0;
+}
+
+sub start_document
+{
+    my $self = shift;
+
+    my $head_title = shift;
+
+    my $body_title = shift;
+    
+    my $o = $self->{'out'};
+
+    print {*{$o}} <<"EOF" ;
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html 
+     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
+<head>
+<title>$head_title</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<link rel="stylesheet" href="./style.css" type="text/css" />
+</head>
+<body>
+EOF
+        
+
+    print {*{$o}}("<h1>");
+
+    $self->text($body_title);
+
+    print {*{$o}}("</h1>\n\n");
+
+    return 0;
+}
+
+sub end_document
+{
+    my $self = shift;
+
+    print {*{$self->{'out'}}}(
+        "\n" .
+        "</body>\n" .
+        "</html>\n"
+        );
+
+    return 0;
+}
+
+sub horizontal_line
+{
+    my $self = shift;
+
+    print {*{$self->{'out'}}}("\n\n<hr />\n\n");
+
+    return 0;
+}
+
+1;
+

File modules/Mail-LMLM/lib/Mail/LMLM/Types/Base.pm

+package Mail::LMLM::Types::Base;
+
+use strict;
+
+use Mail::LMLM::Object;
+
+use vars qw(@ISA);
+
+@ISA=qw(Mail::LMLM::Object);
+
+sub parse_args
+{
+    my $self = shift;
+
+    my $args = shift;
+
+    my (@left, $key, $value);
+
+    while (scalar(@$args))
+    {
+        $key = shift(@$args);
+        $value = shift(@$args);
+        if ($key =~ /^-?(id)$/)
+        {
+            $self->{'id'} = $value;
+        }
+        elsif ($key =~ /^-?(group_base)$/)
+        {
+            $self->{'group_base'} = $value;
+        }
+        elsif ($key =~ /^-?(desc|description)$/)
+        {
+            $self->{'description'} = $value;
+        }
+        elsif ($key =~ /^-?(hostname|host)$/)
+        {
+            $self->{'hostname'} = $value;
+        }
+        elsif ($key =~ /^-?(homepage)$/)
+        {
+            $self->{'homepage'} = $value;
+        }
+        elsif ($key =~ /^-?(online_archive)$/)
+        {
+            $self->{'online_archive'} = $value;
+        }
+        elsif ($key =~ /^-?(guidelines)$/)
+        {
+            $self->{'guidelines'} = $value;
+        }
+        elsif ($key =~ /^-?(notes)$/)
+        {
+            $self->{'notes'} = $value;            
+        }
+        else
+        {
+            push @left, $key, $value;
+        }
+    }
+
+    return (\@left);
+}
+
+sub initialize
+{
+    my $self = shift;
+
+    $self->parse_args([@_]);
+
+    return 0;
+}
+
+sub get_id
+{
+    my $self = shift;
+
+    return $self->{'id'};
+}
+
+sub get_description
+{
+    my $self = shift;
+
+    return $self->{'description'};
+}
+
+sub get_homepage
+{
+    my $self = shift;
+
+    return $self->{'homepage'};
+}
+
+sub get_group_base
+{
+    my $self = shift;
+
+    return $self->{'group_base'};
+}
+
+sub get_hostname
+{
+    my $self = shift;
+
+    return $self->{'hostname'};
+}
+
+sub get_online_archive
+{
+    my $self = shift;
+
+    return $self->{'online_archive'};
+}
+
+sub get_guidelines
+{
+    my $self = shift;
+
+    return $self->{'guidelines'};
+}
+
+sub render_subscribe
+{
+    my $self = shift;
+
+    my $htmler = shift;
+
+    return 0;
+}
+
+sub render_unsubscribe
+{
+    my $self = shift;
+
+    my $htmler = shift;
+
+    return 0;
+}
+
+sub render_post
+{
+    my $self = shift;
+
+    my $htmler = shift;
+
+    return 0;
+}
+
+sub render_owner
+{
+    my $self = shift;
+
+    my $htmler = shift;
+
+    return 0;
+}
+
+sub render_none
+{
+    my $self = shift;
+
+    my $htmler = shift;
+
+    $htmler->para("None.");
+
+    return 0;
+}
+
+sub render_homepage
+{
+    my $self = shift;
+
+    my $htmler = shift;
+
+    my $homepage = $self->get_homepage();
+
+    if ($homepage)
+    {
+        $htmler->start_para();
+        $htmler->url($homepage);
+        $htmler->end_para();
+    }
+    else
+    {
+        $self->render_none($htmler);
+    }
+    
+    return 0;