#-*- perl -*-
#
# Copyright (C) 2002,2003,2004,2005,2006 Ken'ichi Fukamachi
# All rights reserved. This program is free software; you can
# redistribute it and/or modify it under the same terms as Perl itself.
#
# $FML: HTMLify.pm,v 1.29 2006/10/22 14:38:09 fukachan Exp $
#
package FML::Command::HTMLify;
use strict;
use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD);
use Carp;
use File::Spec;
my $debug = 0;
=head1 NAME
FML::Command::HTMLify - utility functions to convert text to html.
=head1 SYNOPSIS
use FML::Command::HTMLify;
&FML::Command::HTMLify::convert($curproc, {
src_dir => $src_dir,
dst_dir => $dst_dir,
});
=head1 DESCRIPTION
This module provides several utility functions to convert text file to
html format one.
=head1 METHODS
=head2 convert($optargs)
convert articles from text to html style.
=cut
# Descriptions: convert text to html style.
# Arguments: OBJ($curproc) HASH_REF($optargs)
# Side Effects: none
# Return Value: none
sub convert
{
my ($curproc, $optargs) = @_;
my $src_dir = $optargs->{ src_dir };
my $dst_dir = $optargs->{ dst_dir };
# ASSERT
croak("src_dir not defined") unless defined $src_dir;
croak("src_dir not exists") unless -d $src_dir;
croak("dst_dir not defined") unless defined $dst_dir;
croak("dst_dir not exists") unless -d $dst_dir;
# debug
print STDERR " convert\n\t$src_dir =>\n\t$dst_dir\n" if $debug;
# XXX-TODO: $curproc->article_thread_init() returns HTML config CLASS ?
# fix parameters: output_dir = ~fml/public_html/mlarchive/$domain/$ml/
my $htmlifier_args = $curproc->article_thread_init();
$htmlifier_args->{ output_dir } = $dst_dir;
my ($is_subdir_exists, $subdirs) = _check_subdir_exists($src_dir);
if ($is_subdir_exists) { $curproc->logdebug("looks subdir exists");}
if (defined $dst_dir) {
unless (-d $dst_dir) {
$curproc->mkdir($dst_dir, "mode=public");
}
if ($is_subdir_exists) {
my (@subdir_list) = sort _sort_subdirs @$subdirs;
print STDERR " subdirs: @subdir_list\n" if $debug;
for my $subdir (@subdir_list) {
# XXX-TODO: hmm, naming ? $obj->htmlify_dir(...).
eval q{
use Mail::Message::ToHTML;
my $obj = new Mail::Message::ToHTML $htmlifier_args;
$obj->htmlify_dir($subdir, $htmlifier_args);
};
croak($@) if $@;
}
}
else {
print STDERR " hmm, looks not subdir style.\n" if $debug;
eval q{
use Mail::Message::ToHTML;
my $obj = new Mail::Message::ToHTML $htmlifier_args;
$obj->htmlify_dir($src_dir, $htmlifier_args);
};
croak($@) if $@;
}
}
else {
croak("no destination directory\n");
}
}
# Descriptions: sort subdirs by the last dirname.
# Arguments: implicit ($a, $b)
# Side Effects: none
# Return Value: NUM(-1, 0, 1)
sub _sort_subdirs
{
my ($xa, $xb);
if ($a =~ /(\d+)$/o) { $xa = $1;}
if ($b =~ /(\d+)$/o) { $xb = $1;}
$xa <=> $xb;
}
# Descriptions: check whether $src_dir has sub-directories in it.
# Arguments: STR($src_dir)
# Side Effects: none
# Return Value: ARRAY( STR, ARRAY_REF )
sub _check_subdir_exists
{
my ($src_dir) = @_;
my $status = 0;
my $subdir = '';
my @subdir = ();
use File::Spec;
use DirHandle;
my $dh = new DirHandle $src_dir;
if (defined $dh) {
my $e;
ENTRY:
while (defined($e = $dh->read)) {
next ENTRY if $e =~ /^\./o;
$subdir = File::Spec->catfile($src_dir, $e);
if (-d $subdir) {
push(@subdir, $subdir);
$status = 1;
}
}
}
return( $status, \@subdir );
}
=head1 CODING STYLE
See C on fml coding style guide.
=head1 AUTHOR
Ken'ichi Fukamachi
=head1 COPYRIGHT
Copyright (C) 2002,2003,2004,2005,2006 Ken'ichi Fukamachi
All rights reserved. This program is free software; you can
redistribute it and/or modify it under the same terms as Perl itself.
=head1 HISTORY
FML::Command::HTMLify first appeared in fml8 mailing list driver package.
See C for more details.
=cut
1;