#-*- perl -*-
#
# Copyright (C) 2002,2003 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.15 2003/01/11 16:05:14 fukachan Exp $
#
package FML::Command::HTMLify;
use strict;
use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD);
use Carp;
use File::Spec;
use FML::Log qw(Log LogWarn LogError);
my $debug = 0;
=head1 NAME
FML::Command::HTMLify - utility functions to convert text to html.
=head1 SYNOPSIS
=head1 DESCRIPTION
This module provides several utility functions to send back article
and file in C<$ml_home_dir>.
=head1 METHODS
=cut
# Descriptions: convert text to html style.
# Arguments: OBJ($curproc) HASH_REF($args) HASH_REF($optargs)
# Side Effects: none
# Return Value: none
sub convert
{
my ($curproc, $args, $optargs) = @_;
my $config = $curproc->config();
my $src_dir = $optargs->{ src_dir };
my $dst_dir = $optargs->{ dst_dir };
my $charset = $curproc->language_of_html_file();
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;
# XXX-TODO: NOT NEED THIS CHECK ? No, it it soog that
# XXX-TODO: we can convert MH folder to HTML format files.
# unless ($curproc->is_config_cf_exist()) {
# croak("invalid ML");
# }
print STDERR " convert\n\t$src_dir =>\n\t$dst_dir\n" if $debug;
my $index_order = $config->{ html_archive_index_order_type };
my $htmlifier_args = {
directory => $dst_dir,
charset => $charset,
index_order => $index_order,
};
my ($is_subdir_exists, $subdirs) = _check_subdir_exists($src_dir);
if ($is_subdir_exists) { Log("looks subdir exists");}
if (defined $dst_dir) {
unless (-d $dst_dir) {
$curproc->mkdir($dst_dir, "mode=public");
}
if ($is_subdir_exists) {
my (@x) = sort _sort_subdirs @$subdirs;
print STDERR " subdirs: @x\n";
for my $xdir (@x) {
eval q{
use Mail::Message::ToHTML;
my $obj = new Mail::Message::ToHTML $htmlifier_args;
$obj->htmlify_dir($xdir, $htmlifier_args);
};
croak($@) if $@;
}
}
else {
print STDERR " hmm, looks not subdir style.\n";
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+)$/) { $xa = $1;}
if ($b =~ /(\d+)$/) { $xb = $1;}
$xa <=> $xb;
}
# Descriptions: check wheter $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) {
while (defined($_ = $dh->read)) {
next if /^\./;
$subdir = File::Spec->catfile($src_dir, $_);
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 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;