XML-Handler-Dtd2DocBook
view release on metacpan or search on metacpan
die "No input file\n"
unless (defined $file);
warn "Don't use directly a DTD file (see the embedded pod or the README).\n"
if ($file =~ /\.dtd$/i);
my $io = new IO::File($file,"r");
die "Can't open $file ($!)\n"
unless (defined $io);
if (exists $opts{d}) {
if (exists $opts{o}) {
my $outfile = $opts{o};
open STDOUT, "> $outfile"
or die "can't open $outfile ($!).\n";
}
my $handler = new XML::SAX::Writer(Writer => 'DtdWriter', Output => \*STDOUT);
my $parser = new XML::SAX::Expat(Handler => $handler);
$parser->set_feature("http://xml.org/sax/features/external-general-entities", 1);
$parser->parse(Source => {ByteStream => $io});
} else {
my $handler = new XML::Handler::Dtd2DocBook();
my $parser = new XML::SAX::Expat(Handler => $handler);
$parser->set_feature("http://xml.org/sax/features/external-general-entities", 1);
my $doc = $parser->parse(Source => {ByteStream => $io});
my $outfile;
if (exists $opts{o}) {
$outfile = $opts{o};
} else {
my $root = $doc->{root_name};
$root =~ s/[:\.\-]/_/g;
$outfile = "dtd_" . $root;
}
my @examples = ();
@examples = split /\s+/, $opts{x} if (exists $opts{x});
$doc->GenerateDocBook(
outfile => $outfile,
title => $opts{t},
examples => \@examples,
flag_comment => !exists($opts{C}),
flag_date => !exists($opts{D}),
flag_href => exists($opts{H}),
flag_multi => exists($opts{M}),
flag_zombi => exists($opts{Z}),
language => $opts{l},
path_tmpl => $opts{p}
);
}
package DtdWriter;
use base qw(XML::SAX::Writer::XML);
sub start_element {}
sub end_element {}
sub characters {}
sub processing_instruction {}
sub ignorable_whitespace {}
sub comment {}
sub start_cdata {}
sub end_cdata {}
sub start_entity {}
sub end_entity {}
sub xml_decl {}
sub start_dtd {
my $self = shift;
$self->{BufferDTD} = '';
}
sub end_dtd {
my $self = shift;
my $dtd = $self->{BufferDTD};
$dtd = $self->{Encoder}->convert($dtd);
$self->{Consumer}->output($dtd);
$self->{BufferDTD} = '';
}
__END__
=head1 NAME
dtd2db - Generate a DocBook documentation from a DTD
=head1 SYNOPSIS
dtd2db [B<-d>] [B<-C> | B<-M>] [B<-HZ>] [B<-o> I<filename>] [B<-t> I<title>] [B<-x> 'I<example1.xml> I<example2.xml> ...'] [B<-l> I<language> | B<-p> I<path>] I<file.xml>
=head1 OPTIONS
=over 8
=item -C
Suppress all comments.
=item -D
Suppress date generation.
=item -d
Generate a clean DTD (without comment).
=item -H
Disable generation of links in comments.
=item -h
Display help.
=item -l
Specify the language of templates ('en' is the default).
=item -M
Suppress multi comments, preserve the last.
( run in 0.684 second using v1.01-cache-2.11-cpan-39bf76dae61 )