I would like to release the following module in its own distribution. I have scoured the CPAN module list and the POD for similar modules, and could find none. The nearest equivalent is the HTML generation in CGI.pm, but my solution is focused, has numerous improvements, and is about 200K lighter. My authorname is DUNCAND. The module is already on CPAN under the temporary name of "HTML::TagMaker" and has complete POD, although I made significant POD changes to the new version, for which I think "HTML::EasyTags" is a better name. Although, if you have any better suggestions for a name, I would love to hear them. The module has a DLSI of "bdpO". Below I quote the portion of the POD from Name, Dependencies, Synopsis, Description, Sample Output (from Synopsis). Left out is the syntax and method list, but that POD changed little from the TagMaker version. The main exception being that the last two methods from TagMaker were removed, since they were more proprietary in nature. Thanks in advance, // Darren Duncan P.S. If I get no response to this email in 24 hours, I will advance to making a namespace request for "HTML::EasyTags", and provide a more summarized "Name". --------------------------------- NAME HTML::EasyTags - Make properly formatted HTML 4 tags, or lists or parts of them, with one simple method call. DEPENDENCIES Perl Version 5.004 Standard Modules I<none> Nonstandard Modules Class::ParamParser SYNOPSIS use HTML::EasyTags; my $html = HTML::EasyTags->new(); $html->groups_by_default( 1 ); print $html->prologue_tag, $html->html_start, $html->head_start, $html->title( 'This Is My Page' ), $html->style( $html->comment_tag( <<__endquote ) ), \nBODY { background-color: #ffffff; background-image: none; } __endquote $html->head_end, $html->body_start, $html->h1( 'A Simple Example' ), $html->p( "Click " . $html->a( href => 'http://search.cpan.org', text => 'here' ) . " for more." ), $html->hr, $html->table( $html->tr( [ $html->th( [ 'Name', 'Count', 'URL', 'First Access' ] ), $html->td( [ 'Old Page', 33, 'http://www.domain.com', '1999/04/23 13:55:02' ] ) ] ) ), $html->hr, $html->form_start( method => 'post', action => 'http://localhost' ), $html->p( "What's your name? " . $html->input( type => 'text', name => 'name' ) ), $html->p( "What's the combination?" . $html->input_group( -type => 'checkbox', -name => 'words', -value => ['eenie', 'meenie', 'minie', 'moe'], -checked => [1, 0, 1, 0], -text => ['Eenie', 'Meenie', 'Minie', 'Moe'] ), ), $html->p( "What's your favorite colour? " . $html->select_start( -size => 1, -name => 'color' ) . $html->option_group( -value => ['red', 'green', 'blue', 'chartreuse'], -text => ['Red', 'Green', 'Blue', 'Chartreuse'] ) . $html->select_end ), $html->input( type => 'submit' ), $html->form_end, $html->body_end, $html->html_end; DESCRIPTION This Perl 5 object class can be used to generate any HTML tags in a format that is consistent with the W3C HTML 4.0 standard. There are no restrictions on what tags are named, however; you can ask for any new or unsupported tag that comes along from Netscape or Microsoft, and it will be made. Additionally, you can generate lists of said tags with one method call, or just parts of said tags (but not both at once). This module's purpose is to be lightweight, easy to use, and whose results are syntactically correct and nicely formatted (should humans wish to read or debug it). At the same time, it is supportive of your existing knowledge of HTML and as such its interface closely mirrors the actual appearance of the resulting tags. This means that methods have the same name as the actual tags, and named parameters that you pass correspond directly to the tag attributes produced. This module saves you having to remember the little details on formatting. For your convenience, a majority of the methods and their arguments are backwards-compatible with those in CGI.pm, but you are saved 200K of code size. As a reference, I strongly recommend that you check out Kevin Werbach's excellent "The Bare Bones Guide to HTML", which is available at http://werbach.com/barebones/. I found this document invaluable when making this module, as it provides a comprehensive list of all the HTML tags along with their formatting and extensions. In this implementation, "standard format" means that tags are made as pairs (<TAG></TAG>) by default, unless they are known to be "no pair" tags. Tags that I know to be "no pair" are [basefont, img, area, param, br, hr, input, option, tbody, frame, comment, isindex, base, link, meta]. However, you can force any tag to be "pair" or "start only" or "end only" by appropriately modifying your call to the tag making method. Also, "standard format" means that tag modifiers are formatted as "key=value" by default, unless they are known to be "no value" modifiers. Modifiers that I know to be "no value" are [ismap, noshade, compact, checked, multiple, selected, nowrap, noresize, param]. These are formatted simply as "key" because their very presence indicates positive assertion, while their absense means otherwise. For modifiers with values, the values will always become bounded by quotes, which ensures they work with both string and numerical quantities (eg: key="value"). Note that this class is a subclass of Class::ParamParser, and inherits all of its methods, "params_to_hash()" and "params_to_array()". HTML CODE FROM SYNOPSIS PROGRAM <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <HTML> <HEAD> <TITLE>This Is My Page</TITLE> <STYLE> <!-- BODY { background-color: #ffffff; background-image: none; } --></STYLE> </HEAD> <BODY> <H1>A Simple Example</H1> <P>Click <A HREF="http://search.cpan.org">here</A> for more.</P> <HR> <TABLE> <TR> <TH>Name</TH> <TH>Count</TH> <TH>URL</TH> <TH>First Access</TH></TR> <TR> <TD>Old Page</TD> <TD>33</TD> <TD>http://www.domain.com</TD> <TD>1999/04/23 13:55:02</TD></TR></TABLE> <HR> <FORM METHOD="post" ACTION="http://localhost"> <P>What's your name? <INPUT TYPE="text" NAME="name"></P> <P>What's the combination? <INPUT TYPE="checkbox" NAME="words" CHECKED VALUE="eenie">Eenie <INPUT TYPE="checkbox" NAME="words" VALUE="meenie">Meenie <INPUT TYPE="checkbox" NAME="words" CHECKED VALUE="minie">Minie <INPUT TYPE="checkbox" NAME="words" VALUE="moe">Moe</P> <P>What's your favorite colour? <SELECT NAME="color" SIZE="1"> <OPTION VALUE="red">Red <OPTION VALUE="green">Green <OPTION VALUE="blue">Blue <OPTION VALUE="chartreuse">Chartreuse </SELECT></P> <INPUT TYPE="submit"> </FORM> </BODY> </HTML>