# # BackEnd.pm # # $Id: BackEnd.pm,v 1.1.1.1 2001/05/24 15:57:41 sano Exp $ # # Dummy module containing backend specification. # # © Copyright 1997, Cees de Groot # package LinuxDocTools::BackEnd; die "This is a documentation package only!"; =head1 NAME LinuxDocTools::BackEnd - LinuxDocTools back-end specification =head1 SYNOPSIS require LinuxDocTools::BackEnd; $BackEnd->{...}; =head1 DESCRIPTION LinuxDoc-Tools backend modules need to conform to a certain interface which is detailed in this document. The interface makes sure that new backend modules (or customer overrides) are compatible with what the main B package expects. Note that this interface is still subject to change, you should check this document on new releases of LinuxDoc-Tools. =head1 INTERFACE The interface between the main package and individual backends is very minimal - only one global variable is modified, everything else is local. It relies heavily on references and complex datatypes, so you want to make sure that you're up-to-date with Perl5. Every backend creates a reference to a hash and stores this reference in the global I<%Formats> hash: my $BackEnd = {}; $Formats{"BackEnd"} = $BackEnd; The rest of this document will deal with the entries in the local hash referenced by I<$BackEnd>. =head1 HASH ENTRIES =over 4 =item NAME Specify the name of the backend, for help messages etcetera. $BackEnd->{NAME} = "BackEnd"; =item HELP Specify an optional extra help message printed when the default usage function is executed (see L). $BackEnd->{HELP} = "This is just and example message"; =item OPTIONS This specifies the local set of options, which is added to the global set of options (available in I<$global>). The options are specified as an array of hashes containing a number of keys: =over 4 =item option The long option name =item type The type of the option, one of B (flag), B (list of allowed values), B (string), or B (integer). =item values An array of allowed values, in case the option is of the list type. =item short A short (single-letter) version of the option name. =back Options can be specified as long options: --papersize=a4 or as short options: -p a4 Note that both the long options as the short options must not conflict with the global options (an override is not - yet - possible) and should not conflict with other backends. $BackEnd->{OPTIONS} = [ { option => "split", type => "l", 'values' => [ "0", "1", "2" ], short => "s" }, { option => "dosnames", type => "f", short => "D" }, { option => "imagebuttons", type => "f", short => "I"} ]; The long names themselves function as hash keys; a default can be given here and the option processing function will store any values found at the same place: $BackEnd->{'split'} = 1; $BackEnd->{dosnames} = 0; $BackEnd->{imagebuttons} = 0; =item preNSGMLS If defined, this should contain a subroutine that normally does two things: it can modify the global value C<$global-E{NsgmlsOpts}> and it can set the global value C<$global-E{NsgmlsPrePipe}>. The first variable contains the option string passed to B, and the second variable can contain a command that generates the input for B, presumably using the current input file in some way (the current input file can be found in C<$global-E{file}>). $BackEnd->{preNSGMLS} = sub { $global->{NsgmlsOpts} .= " -ifmtBackEnd "; $global->{NsgmlsPrePipe} = "sed 's/\@/\@\@/g' $global->{file}"; }; =item preASP If defined, this should contain a subroutine accepting an input and an output file descriptor. The input file descriptor contains the raw output from B, and the output file descriptor should be filled with input to B. This stage is often used to munch character entities before they're fed to B, see L. If the routine doesn't return C<0>, LinuxDocTools aborts. $BackEnd->{preASP} = sub { my ($infile, $outfile) = @_; while (<$infile>) { s/([^\\])\\n/$1 \\n/g; print $outfile $_; } return 0; }; =item postASP This entry should always be defined, because it needs to contain a routine that receives the output from B which normally needs finalization. LinuxDocTools itself doesn't know about file-naming conventions, etcetera, of the backend so writing the final file is left to the backend. The subroutine receives a reference to a filehandle (containing B output) and should do whatever it likes with this datastream. $BackEnd->{postASP} = sub { my $infile = shift; copy ($infile, "$global->{filename}.ext"); return 0; }; =back =head1 SEE ALSO L and subpackages. =head1 AUTHOR SGML-Tools are written by Cees de Groot, Ccg@cdegroot.comE>, and various SGML-Tools contributors as listed in C. Taketoshi Sano Csano@debian.org> rename it to LinuxDocTools, and do some bug-fixes and updates on it. =cut 1;