I believe I got all the enhancements/fixes I'm going to do for
the next release of mhonarc.
The big thing to do now is update the documentation (Ugh). However,
if anyone is interested in testing out the next release, I can make
a tar bundle available. I should warn that some changes are
significant, so have care on testing. I'd try it out on some
test mail first before using it on any main archives.
Changes list:
o Rewrote message parser routine so it will work under Perl 5
for multipart messages. The rewrite also allows some
additional features that are mentioned below.
o The -mbox and -mh options are no longer required. MHonArc
will automatically determine which mode to operate in
based upon the file arguments. Hence, one can specify
MH folders and mailbox files on the same command-line.
Both options are ignored if specified.
o An HTML index of an archive contents can be generated to
standard output (-genidx).
o Message header lines not conforming to RFC 822 are ignored.
(Eg: Those pesky "From " lines should not show up anymore --
please do not confuse this with the regular "From:" lines;
note the colon vs the space).
o New resources:
BOTLINKS - May be used to completely customize
the links at the bottom of messages.
IDXPGBEGIN - Opening markup for main index page.
Allows one to redefine opening HTML
element, HEAD element, TITLE element,
opening BODY element, etc.
IDXPGEND - Closing markup for main index page.
IDXSIZE - Set the maximum number of messages
listed in index. This is different
in MAXSIZE where MAXSIZE will remove
older messages when the MAXSIZE limit
is reached in the archive.
MIMEARGS - Define arguments to filters
MSGPGBEGIN - Opening markup for message pages.
Allows one to redefine opening HTML
element, HEAD element, TITLE element,
opening BODY element, etc.
MSGPGEND - Closing markup for message pages.
NEXTBUTTON - Defines the 'Next' button.
NEXTBUTTONIA - Defines the 'Next' button when it is
inactive.
NEXTLINK - Defines the 'Next' link.
NEXTLINKIA - Defines the 'Next' link when it is
inactive.
NOTSUBSORT - Do not sort threads by subject.
OTHERINDEXES - List other resource files defining
other indexes to create when creating,
or updating, an archive.
PREVBUTTON - Defines the 'Prev' button.
PREVBUTTONIA - Defines the 'Prev' button when it is
inactive.
PREVLINK - Defines the 'Prev' link.
PREVLINKIA - Defines the 'Prev' link when it is
inactive.
TIDXPGBEGIN - Opening markup for thread index page.
Allows one to redefine opening HTML
element, HEAD element, TITLE element,
opening BODY element, etc.
TIDXPGEND - Closing markup for thread index page.
TOPLINKS - May be used to completely customize
the buttons at the top of messages.
TSUBSORT - Sort threads listed by subject.
o Removed resources:
INDEXBL, INDEXFL, MBOX, MH, NEXTBL, NEXTFL, PREVBL,
PREVFL, TINDEXBL, TINDEXFL
Resource were removed because they were no longer applicable
and/or have been superceded by other resources. MHonArc
will still honor old resource settings (where applicable) of
older archives and incorporate them into the new resource
settings.
o When specifying the resource file, mhonarc will now do
the following to determine its location:
1. If its an absolute pathname, mhonarc uses it.
2. If it is a relative pathname, mhonarc checks for
it relative to the current working directory.
3. Otherwise, mhonarc checks for it relative to
location of the archive as specified by outdir.
This resolution will allow you to place resource files with
the archive if desired (can be useful when using the
OTHERINDEXES resource element).
o Because of the new resources available, many <HR>'s are no
longer hard-coded and are controllable by resources. <HR>'s
are still used in message pages to separate message data
from mhonarc data.
o Added resource variables:
(NOTE: Some variables are only valid in certain contexts)
$DDMMYY$ - Date of message in dd/mm/yy format
$IDXSIZE$ - Max size of index list
$MMDDYY$ - Date of message in mm/dd/yy format
$MSGID$ - Message id
$NEXTBUTTON$ - Next button markup
$NEXTFROM$ - From field of next listed message
$NEXTFROMADDR$ - From e-mail address of next listed message
$NEXTFROMNAME$ - From name of next listed message
$NEXTLINK$ - Next link markup
$NEXTMSGNUM$ - Number of next listed message
$NEXTSUBJECT$ - Subject text of next listed message
$NUMOFIDXMSG$ - Number of messages in index list
$PREVBUTTON$ - Previous button markup
$PREVFROM$ - From field of previous listed message
$PREVFROMADDR$ - From e-mail address of prev listed message
$PREVFROMNAME$ - From name of previous listed message
$PREVLINK$ - Previous link markup
$PREVMSGNUM$ - Number of previous message
$PREVSUBJECT$ - Subject text of previous listed message
$YYMMDD$ - Date of message in yy/mm/dd format
o Can specify a 'U' with variable length specifier to denote
replacement string is to be used in a URL. Examples:
$SUBJECTNA:40U$
$MSGID:U$
The 'U' causes the replace text to have special characters
escaped as denoted by the URL spec. NOTE: Specify ":U"
should NOT be used in the MAILTOURL resource; the variables
will automatically be expanded according to the URL spec.
Specifyind ":U" or a length specifier in the MAILTOURL
resource will prevent mhonarc from detecting the variable.
o New command-line options:
-genidx - Generate HTML index of archive contents
to stdout.
-idxsize - Maximum number of messages shown in indexes
-notsubsort - Do not sort threads listed by subject.
-savemem - Write message data while processing
-tsubsort - Sort threads listed by subject.
o The library mhtxt2022.pl has been added that provides
a filter to process ISO-2022 (Japanese) encoded mail messages.
See mhtxt2022.pl on how to hook it in.
o The mhexternal.pl filter by default ignores any filename
specification in the message for creating derived files.
This avoids name conflicts and security problems.
The "usename" filter option may be used to override this.
o Mime filters are now called with two additional arguments:
$converted_data = &function(
$header, *parsed_header_assoc_array,
*message_data, $decoded_flag,
$optional_filter_arguments);
The $decoded_flag is set to 1 if the *message_data has been
decoded. $optional_filter_arguments contains an optional
argument string as determined by the filter.
o Mime filters can now be registered for multipart types
and message types. This allows one to override mhonarc's
conversion of these types, and completely replace mhonarc's
message->HTML conversion process.
o Mime filters should now use $'FieldSep instead of $'X for
accessing parsed message headers.
o Mime filters can be registered for a base type. Ie.
It is no longer required to explicitly list each possible
subtype if a single filter is to be used for them all.
Example:
<mimefilters>
image/*:myfilter'imagefilter:myfilter.pl
</mimefilters>
Registers "myfilter'filter" for all image data types,
regardless of subtype. However, if an explicit entry
exists for a subtype, then that filter is called.
Example:
<mimefilters>
image/*:myfilter'imagefilter:myfilter.pl
image/gif:myfilter'giffilter:myfilter.pl
</mimefilters>
"myfilter'giffilter" is called for all image/gif data.
"myfilter'imagefilter" is called for all other image data.
o A new resource, MIMEARGS, may be used to pass optional arguments
to filters to control their behavior. The format of the
argument string is controlled by the various filters. The
arguments can be specified by a specific content-type, or
for the filter routine in general. A content-type argument
will be used over any arguments specified for a filter.
Example usage:
<mimeargs>
image/gif:inline usename
m2h_external'filter:usename
</mimeargs>
See the documentation for possible arguments to filters.
o Installation program can now be invoked in batch mode.
o Thread index properly includes docurl as main index.
-nodocurl will prevent the inclusion as with the main index.
o Fixed bug in mhtxthtml.pl on properly propogating a base
URL to relative URLs starting with a "/".
o Fixed bug where single quotes, and backslashed in keys of
associative arrays in the database file were not getting
escaped.
o Fixed bug where spaces and special characters were not
properly escaped in URL strings: spaces were left as-is,
and special characters were deleted.
o Removed illegal invocation choices in the Synopsis of the
documentation.