Annotation of embedaddon/bird2/doc/LinuxDocTools.pm, revision 1.1

1.1     ! misho       1: #! /usr/bin/perl 
        !             2: #
        !             3: #  LinuxDocTools.pm
        !             4: #
        !             5: #  $Id$
        !             6: #
        !             7: #  LinuxDoc-Tools driver core. This contains all the basic functionality
        !             8: #  we need to control all other components.
        !             9: #
        !            10: #  © Copyright 1996, Cees de Groot.
        !            11: #  © Copyright 2000, Taketoshi Sano
        !            12: #
        !            13: #  THIS VERSION HAS BEEN HACKED FOR BIRD BY MARTIN MARES
        !            14: #
        !            15: package LinuxDocTools;
        !            16: 
        !            17: require 5.004;
        !            18: use strict;
        !            19: 
        !            20: =head1 NAME
        !            21: 
        !            22: LinuxDocTools - SGML conversion utilities for LinuxDoc DTD.
        !            23: 
        !            24: =head1 SYNOPSIS
        !            25: 
        !            26:   use LinuxDocTools;
        !            27:   LinuxDocTools::init;
        !            28:   @files = LinuxDocTools::process_options ($0, @ARGV);
        !            29:   for $curfile (@files) {
        !            30:     LinuxDocTools::process_file ($curfile);
        !            31:   }
        !            32: 
        !            33: =head1 DESCRIPTION
        !            34: 
        !            35: The LinuxDocTools package encapsulates all the functionality offered by
        !            36: LinuxDoc-Tools. It is used, of course, by LinuxDoc-Tools; 
        !            37: but the encapsulation should provide for a simple interface for other users as well. 
        !            38: 
        !            39: =head1 FUNCTIONS
        !            40: 
        !            41: =over 4
        !            42: 
        !            43: =cut
        !            44: 
        !            45: use DirHandle;
        !            46: use File::Basename;
        !            47: use File::Find;
        !            48: use File::Copy;
        !            49: use FileHandle;
        !            50: use IPC::Open2;
        !            51: use Cwd;
        !            52: use LinuxDocTools::Lang;
        !            53: use LinuxDocTools::Utils qw(process_options usage cleanup trap_signals remove_tmpfiles create_temp);
        !            54: use LinuxDocTools::Vars;
        !            55: 
        !            56: sub BEGIN
        !            57: {
        !            58:   #
        !            59:   #  Make sure we're always looking here. Note that "use lib" adds 
        !            60:   #  on the front of the search path, so we first push dist, then
        !            61:   #  site, so that site is searched first.
        !            62:   #
        !            63:   use lib "$main::DataDir/dist";
        !            64:   use lib "$main::DataDir/site";
        !            65: }
        !            66: 
        !            67: =item LinuxDocTools::init
        !            68: 
        !            69: Takes care of initialization of package-global variables (which are actually
        !            70: defined in L<LinuxDocTools::Vars>). The package-global variables are I<$global>,
        !            71: a reference to a hash containing numerous settings, I<%Formats>, a hash
        !            72: containing all the formats, and I<%FmtList>, a hash containing the currently
        !            73: active formats for help texts. 
        !            74: 
        !            75: Apart from this, C<LinuxDocTools::init> also finds all distributed and site-local
        !            76: formatting backends and C<require>s them.
        !            77: 
        !            78: =cut
        !            79: 
        !            80: sub init
        !            81: {
        !            82:   trap_signals;
        !            83: 
        !            84:   #
        !            85:   #  Register the ``global'' pseudoformat. Apart from the global settings,
        !            86:   #  we also use $global to keep the global variable name space clean; 
        !            87:   #  everything that we need to provide to other modules is stuffed
        !            88:   #  into $global.
        !            89:   #
        !            90:   $global = {};
        !            91:   $global->{NAME} = "global";
        !            92:   $global->{HELP} = "";
        !            93:   $global->{OPTIONS} = [
        !            94:     { option => "backend", type => "l",
        !            95:       'values' => [ "html", "info", "latex", 
        !            96:                        "lyx", "rtf", "txt", "check" ],
        !            97:         short => "B" },
        !            98:     { option => "papersize", type => "l",
        !            99:       'values' => [ "a4", "letter" ], short => "p" },
        !           100:     { option => "language",  type => "l",
        !           101:       'values' => [ @LinuxDocTools::Lang::Languages ], short => "l" },
        !           102:     { option => "charset",   type => "l",
        !           103:       'values' => [ "latin", "ascii", "nippon", "euc-kr" ], short => "c" },
        !           104:     { option => "style",     type => "s", short => "S" },
        !           105:     { option => "tabsize",   type => "i", short => "t" },
        !           106: #    { option => "verbose",   type => "f", short => "v" },
        !           107:     { option => "debug",     type => "f", short => "d" },
        !           108:     { option => "define",    type => "s", short => "D" },
        !           109:     { option => "include",   type => "s", short => "i" },
        !           110:     { option => "pass",      type => "s", short => "P" }
        !           111:   ];
        !           112:   $global->{backend}   = "linuxdoc";
        !           113:   $global->{papersize} = "a4";
        !           114:   $global->{language}  = "en";
        !           115:   $global->{charset}   = "ascii";
        !           116:   $global->{style}     = "";
        !           117:   $global->{tabsize}   = 8;
        !           118:   $global->{verbose}   = 0;
        !           119:   $global->{define}    = "";
        !           120:   $global->{debug}     = 0;
        !           121:   $global->{include}   = "";
        !           122:   $global->{pass}      = "";
        !           123:   $global->{InFiles}   = [];
        !           124:   $Formats{$global->{NAME}} = $global; # All formats we know.
        !           125:   $FmtList{$global->{NAME}} = $global;  # List of formats for help msgs.
        !           126: 
        !           127:   # automatic language detection: disabled by default
        !           128:   # {
        !           129:   #    my $lang;
        !           130:   #    foreach $lang (@LinuxDocTools::Lang::Languages)
        !           131:   #     {
        !           132:   #       if (($ENV{"LC_ALL"} =~ /^$lang/i) ||
        !           133:   #           ($ENV{"LC_CTYPE"} =~ /^$lang/i) ||
        !           134:   #           ($ENV{"LANG"} =~ /^$lang/i)) {
        !           135:   #        $global->{language}  = Any2ISO($lang);
        !           136:   #       }
        !           137:   #     }
        !           138:   # }
        !           139: 
        !           140:   #
        !           141:   #  Used when the format is "global" (from sgmlcheck).
        !           142:   #
        !           143:   $global->{preNSGMLS} = sub {
        !           144:     $global->{NsgmlsOpts} .= " -s ";
        !           145:     $global->{NsgmlsPrePipe} = "cat $global->{file}";
        !           146:   };
        !           147: 
        !           148:   #
        !           149:   #  Build up the list of formatters.
        !           150:   #
        !           151:   my $savdir = cwd;
        !           152:   my %Locs;
        !           153:   chdir "$main::DataDir/dist";
        !           154:   my $dir = new DirHandle(".");
        !           155:   die "Unable to read directory $main::DataDir/dist: $!" unless defined($dir);
        !           156:   foreach my $fmt (grep(/^fmt_.*\.pl$/, $dir->read()))
        !           157:   {
        !           158:     $Locs{$fmt} = "dist";
        !           159:   }
        !           160:   $dir->close();
        !           161:   chdir "$main::DataDir/site";
        !           162:   $dir = new DirHandle(".");
        !           163:   die "Unable to read directory $main::DataDir/site: $!" unless defined($dir);
        !           164:   foreach my $fmt (grep(/^fmt_.*\.pl$/, $dir->read()))
        !           165:   {
        !           166:     $Locs{$fmt} = "site";
        !           167:   }
        !           168:   $dir->close();
        !           169:   foreach my $fmt (keys %Locs)
        !           170:   {
        !           171:     require $fmt;
        !           172:   }
        !           173:   chdir $savdir;
        !           174: }
        !           175: 
        !           176: =item LinuxDocTools::process_options ($0, @ARGV)
        !           177: 
        !           178: This function contains all initialization that is bound to the current
        !           179: invocation of LinuxDocTools. It looks in C<$0> to deduce the backend that
        !           180: should be used (ld2txt activates the I<txt> backend) and parses the
        !           181: options array. It returns an array of filenames it encountered during
        !           182: option processing.
        !           183: 
        !           184: As a side effect, the environment variables I<SGMLDECL> and 
        !           185: I<SGML_CATALOG_FILES> are modified.
        !           186: 
        !           187: =cut
        !           188: 
        !           189: sub process_options
        !           190: {
        !           191:   my $progname = shift;
        !           192:   my @args = @_;
        !           193: 
        !           194:   #
        !           195:   #  Deduce the format from the caller's file name
        !           196:   #
        !           197:   my ($format, $dummy1, $dummy2) = fileparse ($progname, "");
        !           198:   $global->{myname} = $format;
        !           199:   $format =~ s/sgml2*(.*)/$1/;
        !           200: 
        !           201:   #
        !           202:   # check the option "--backend / -B"
        !           203:   #
        !           204:   if ($format eq "linuxdoc") {
        !           205:       my @backends = @args;
        !           206:       my $arg;
        !           207:       while (@backends) {
        !           208:          $arg = shift @backends;
        !           209:          if ($arg eq "-B") {
        !           210:                 $arg = shift @backends;
        !           211:                 $format = $arg;
        !           212:                 last;
        !           213:         }
        !           214:          if ( $arg =~ s/--backend=(.*)/$1/ ) {
        !           215:                 $format = $arg;
        !           216:                 last;
        !           217:          }
        !           218:       }
        !           219:   }
        !           220: 
        !           221:   $format = "global" if $format eq "check";
        !           222:   usage ("") if $format eq "linuxdoc";
        !           223:   $format = "latex2e" if $format eq "latex";
        !           224:   $FmtList{$format} = $Formats{$format} or 
        !           225:      usage ("$global->{myname}: unknown format");
        !           226:   $global->{format} = $format;
        !           227: 
        !           228:   #
        !           229:   #  Parse all the options.
        !           230:   #
        !           231:   my @files = LinuxDocTools::Utils::process_options (@args);
        !           232:   $global->{language} = Any2ISO ($global->{language});
        !           233:   #
        !           234:   # check the number of given files 
        !           235:   $#files > -1 || usage ("no filenames given");
        !           236: 
        !           237:   #
        !           238:   #  Setup the SGML environment.
        !           239:   #  (Note that Debian package rewrite path to catalog of
        !           240:   #   iso-entities using debian/rules so that it can use 
        !           241:   #   entities from sgml-data pacakge.  debian/rules also
        !           242:   #   removes iso-entites sub directory after doing make install.)
        !           243:   #
        !           244:   $ENV{SGML_CATALOG_FILES} .= (defined $ENV{SGML_CATALOG_FILES} ? ":" : "") .
        !           245:      "$main::prefix/share/sgml/sgml-iso-entities-8879.1986/catalog:" .
        !           246:      "$main::prefix/share/sgml/entities/sgml-iso-entities-8879.1986/catalog";
        !           247:   $ENV{SGML_CATALOG_FILES} .= ":$main::DataDir/linuxdoc-tools.catalog";
        !           248:   $ENV{SGML_CATALOG_FILES} .= ":$main::/etc/sgml.catalog";
        !           249:   if (-f "$main::DataDir/dtd/$format.dcl")
        !           250:     {
        !           251:       $ENV{SGMLDECL} = "$main::DataDir/dtd/$format.dcl";
        !           252:     }
        !           253:   elsif (-f "$main::DataDir/dtd/$global->{style}.dcl")
        !           254:     {
        !           255:       $ENV{SGMLDECL} = "$main::DataDir/dtd/$global->{style}.dcl";
        !           256:     }
        !           257:   elsif (-f "$main::DataDir/dtd/sgml.dcl")
        !           258:     {
        !           259:       $ENV{SGMLDECL} = "$main::DataDir/dtd/sgml.dcl";
        !           260:     }
        !           261: 
        !           262:   #
        !           263:   #  OK. Give the list of files we distilled from the options
        !           264:   #  back to the caller.
        !           265:   #
        !           266:   return @files;
        !           267: }
        !           268: 
        !           269: =item LinuxDocTools::process_file
        !           270: 
        !           271: With all the configuration done, this routine will take a single filename
        !           272: and convert it to the currently active backend format. The conversion is
        !           273: done in a number of steps in tight interaction with the currently active
        !           274: backend (see also L<LinuxDocTools::BackEnd>):
        !           275: 
        !           276: =over
        !           277: 
        !           278: =item 1. Backend: set NSGMLS options and optionally create a pre-NSGMLS pipe.
        !           279: 
        !           280: =item 2. Here: Run the preprocessor to handle conditionals.
        !           281: 
        !           282: =item 3. Here: Run NSGMLS.
        !           283: 
        !           284: =item 4. Backend: run pre-ASP conversion.
        !           285: 
        !           286: =item 5. Here: Run SGMLSASP.
        !           287: 
        !           288: =item 6. Backend: run post-ASP conversion, generating the output.
        !           289: 
        !           290: =back
        !           291: 
        !           292: All stages are influenced by command-line settings, currently active format,
        !           293: etcetera. See the code for details.
        !           294: 
        !           295: =cut
        !           296: 
        !           297: sub process_file
        !           298: {
        !           299:   my $file = shift (@_);
        !           300:   my $saved_umask = umask;
        !           301: 
        !           302:   print "Processing file $file\n";
        !           303:   umask 0077;
        !           304: 
        !           305:   my ($filename, $filepath, $filesuffix) = fileparse ($file, "\.sgml");
        !           306:   my $tmpnam = $filepath . '/' . $filename;
        !           307:   $file = $tmpnam . $filesuffix;
        !           308:   -f $file || $file =~ /.*.sgml$/ || ($file .= '.sgml');
        !           309:   -f $file || ($file = $tmpnam . '.SGML');
        !           310:   -f $file || die "Cannot find $file\n";
        !           311:   $global->{filename} = $filename;
        !           312:   $global->{file} = $file;
        !           313:   $global->{filepath} = $filepath;
        !           314: 
        !           315:   my $tmp = new FileHandle "<$file";
        !           316:   my $dtd;
        !           317:   while ( <$tmp> )
        !           318:     {
        !           319:       tr/A-Z/a-z/;
        !           320:       # check for [<!doctype ... system] type definition
        !           321:       if ( /<!doctype\s*(\w*)\s*system/ )
        !           322:         {
        !           323:           $dtd = $1;
        !           324:           last;
        !           325:         }
        !           326:       # check for <!doctype ... PUBLIC ... DTD ...
        !           327:       if ( /<!doctype\s*\w*\s*public\s*.*\/\/dtd\s*(\w*)/mi )
        !           328:         {
        !           329:           $dtd = $1;
        !           330:           last;
        !           331:         }
        !           332:       # check for <!doctype ...
        !           333:       #          PUBLIC  ... DTD ...
        !           334:       # (multi-line version)
        !           335:       if ( /<!doctype\s*(\w*)/ )
        !           336:         {
        !           337:           $dtd = "precheck";
        !           338:           next;
        !           339:         }
        !           340:       if ( /\s*public\s*.*\/\/dtd\s*(\w*)/ && $dtd eq "precheck" )
        !           341:         {
        !           342:           $dtd = $1;
        !           343:           last;
        !           344:         }
        !           345:     }
        !           346:   $tmp->close;
        !           347:   if ( $global->{debug} )
        !           348:     {
        !           349:       print "DTD: " . $dtd . "\n";
        !           350:     }
        !           351:   $global->{dtd} = $dtd;
        !           352: 
        !           353:   # prepare temporary directory
        !           354:   my $tmpdir = $ENV{'TMPDIR'} || '/tmp';
        !           355:   $tmpdir = $tmpdir . '/' . 'linuxdoc-dir-' . $$;
        !           356:   mkdir ($tmpdir, 0700) ||
        !           357:    die " - temporary files can not be created, aborted - \n";
        !           358: 
        !           359:   my $tmpbase = $global->{tmpbase} = $tmpdir . '/sgmltmp.' . $filename;
        !           360:   $ENV{"SGML_SEARCH_PATH"} .= ":$filepath";
        !           361: 
        !           362:   #
        !           363:   # Set up the preprocessing command.  Conditionals have to be
        !           364:   # handled here until they can be moved into the DTD, otherwise
        !           365:   # a validating SGML parser will choke on them.
        !           366:   #
        !           367:   # check if output option for latex is pdf or not
        !           368:   if ($global->{format} eq "latex2e")
        !           369:     {
        !           370:       if ($Formats{$global->{format}}{output} eq "pdf")
        !           371:         {
        !           372:           $global->{define} .= " pdflatex=yes";
        !           373:         }
        !           374:     }
        !           375:   #
        !           376: 
        !           377:   local $ENV{PATH} = "$ENV{PATH}:/usr/lib/linuxdoc-tools";
        !           378:   my($precmd) = "|sgmlpre output=$global->{format} $global->{define}";
        !           379: 
        !           380:   #
        !           381:   #  You can hack $NsgmlsOpts here, etcetera.
        !           382:   #
        !           383:   $global->{NsgmlsOpts} .= "-D $main::prefix/share/sgml -D $main::DataDir";
        !           384:   $global->{NsgmlsOpts} .= "-i$global->{include}" if ($global->{include});
        !           385:   $global->{NsgmlsPrePipe} = "NOTHING";
        !           386:   if ( defined $Formats{$global->{format}}{preNSGMLS} )
        !           387:     {
        !           388:       $global->{NsgmlsPrePipe} = &{$Formats{$global->{format}}{preNSGMLS}};
        !           389:     }
        !           390: 
        !           391:   #
        !           392:   #  Run the prepocessor and nsgmls.
        !           393:   #
        !           394:   my ($ifile, $writensgmls);
        !           395: 
        !           396:   if ($global->{NsgmlsPrePipe} eq "NOTHING")
        !           397:     {
        !           398:       $ifile = new FileHandle $file;
        !           399:     }
        !           400:   else
        !           401:     {
        !           402:       $ifile = new FileHandle "$global->{NsgmlsPrePipe}|";
        !           403:     }
        !           404: 
        !           405:   create_temp("$tmpbase.1");
        !           406:   $writensgmls = new FileHandle
        !           407:       "$precmd|$main::progs->{NSGMLS} $global->{NsgmlsOpts} $ENV{SGMLDECL} >\"$tmpbase.1\"";
        !           408:   if ($global->{charset} eq "latin")
        !           409:     {
        !           410:       while (<$ifile>) 
        !           411:         {
        !           412:          # Outline these commands later on - CdG
        !           413:          #change latin1 characters to SGML
        !           414:          #by Farzad Farid, adapted by Greg Hankins
        !           415:          s/À/\&Agrave;/g;
        !           416:          s/Á/\&Aacute;/g;
        !           417:          s/Â/\&Acirc;/g;
        !           418:          s/Ã/\&Atilde;/g;
        !           419:          s/Ä/\&Auml;/g;
        !           420:          s/Å/\&Aring;/g;
        !           421:          s/Æ/\&AElig;/g;
        !           422:          s/Ç/\&Ccedil;/g;
        !           423:          s/È/\&Egrave;/g;
        !           424:          s/É/\&Eacute;/g;
        !           425:          s/Ê/\&Ecirc;/g;
        !           426:          s/Ë/\&Euml;/g;
        !           427:          s/Ì/\&Igrave;/g;
        !           428:          s/Í/\&Iacute;/g;
        !           429:          s/Î/\&Icirc;/g;
        !           430:          s/Ï/\&Iuml;/g;
        !           431:          s/Ñ/\&Ntilde;/g;
        !           432:          s/Ò/\&Ograve;/g;
        !           433:          s/Ó/\&Oacute;/g;
        !           434:          s/Ô/\&Ocirc;/g;
        !           435:          s/Õ/\&Otilde;/g;
        !           436:          s/Ö/\&Ouml;/g;
        !           437:          s/Ø/\&Oslash;/g;
        !           438:          s/Ù/\&Ugrave;/g;
        !           439:          s/Ú/\&Uacute;/g;
        !           440:          s/Û/\&Ucirc;/g;
        !           441:          s/Ü/\&Uuml;/g;
        !           442:          s/Ý/\&Yacute;/g;
        !           443:          s/Þ/\&THORN;/g;
        !           444:          s/ß/\&szlig;/g;
        !           445:          s/à/\&agrave;/g;
        !           446:          s/á/\&aacute;/g;
        !           447:          s/â/\&acirc;/g;
        !           448:          s/ã/\&atilde;/g;
        !           449:          s/ä/\&auml;/g;
        !           450:          s/å/\&aring;/g;
        !           451:          s/æ/\&aelig;/g;
        !           452:          s/ç/\&ccedil;/g;
        !           453:          s/è/\&egrave;/g;
        !           454:          s/é/\&eacute;/g;
        !           455:          s/ê/\&ecirc;/g;
        !           456:          s/ë/\&euml;/g;
        !           457:          s/ì/\&igrave;/g;
        !           458:          s/í/\&iacute;/g;
        !           459:          s/î/\&icirc;/g;
        !           460:          s/ï/\&iuml;/g;
        !           461:          s/µ/\&mu;/g;
        !           462:          s/ð/\&eth;/g;
        !           463:          s/ñ/\&ntilde;/g;
        !           464:          s/ò/\&ograve;/g;
        !           465:          s/ó/\&oacute;/g;
        !           466:          s/ô/\&ocirc;/g;
        !           467:          s/õ/\&otilde;/g;
        !           468:          s/ö/\&ouml;/g;
        !           469:          s/ø/\&oslash;/g;
        !           470:          s/ù/\&ugrave;/g;
        !           471:          s/ú/\&uacute;/g;
        !           472:          s/û/\&ucirc;/g;
        !           473:          s/ü/\&uuml;/g;
        !           474:          s/ý/\&yacute;/g;
        !           475:          s/þ/\&thorn;/g;
        !           476:          s/ÿ/\&yuml;/g;
        !           477:           print $writensgmls $_;
        !           478:        }
        !           479:     }
        !           480:   else
        !           481:     {
        !           482:       while (<$ifile>)
        !           483:         {
        !           484:           print $writensgmls $_;
        !           485:        }
        !           486:     }
        !           487:   $ifile->close;
        !           488:   $writensgmls->close;
        !           489:         
        !           490:   #
        !           491:   #  Special case: if format is global, we're just checking.
        !           492:   #
        !           493:   $global->{format} eq "global" && cleanup;
        !           494: 
        !           495:   #
        !           496:   #  If the output file is empty, something went wrong.
        !           497:   #
        !           498:   ! -e "$tmpbase.1" and die "can't create file - exiting";
        !           499:   -z "$tmpbase.1" and die "SGML parsing error - exiting";
        !           500:   if ( $global->{debug} )
        !           501:     {
        !           502:       print "Nsgmls stage finished.\n";
        !           503:     }
        !           504: 
        !           505:   #
        !           506:   #  If a preASP stage is defined, let the format handle it.
        !           507:   #  
        !           508:   #  preASP ($inhandle, $outhandle);
        !           509:   #
        !           510:   my $inpreasp = new FileHandle "<$tmpbase.1";
        !           511:   my $outpreasp = new FileHandle "$tmpbase.2",O_WRONLY|O_CREAT|O_EXCL,0600;
        !           512:   if (defined $Formats{$global->{format}}{preASP})
        !           513:     {
        !           514:       &{$Formats{$global->{format}}{preASP}}($inpreasp, $outpreasp) == 0 or
        !           515:        die "error pre-processing $global->{format}.\n";
        !           516:     }  
        !           517:   else
        !           518:     {
        !           519:       copy ($inpreasp, $outpreasp);
        !           520:     }
        !           521:   $inpreasp->close;
        !           522:   $outpreasp->close;
        !           523:   ! -e "$tmpbase.2" and die "can't create file - exiting";
        !           524: 
        !           525:   if ( $global->{debug} )
        !           526:     {
        !           527:       print "PreASP stage finished.\n";
        !           528:     }
        !           529: 
        !           530:   #
        !           531:   #  Run sgmlsasp, with an optional style if specified.
        !           532:   #
        !           533:   #  Search order:
        !           534:   #  - datadir/site/<dtd>/<format>
        !           535:   #  - datadir/dist/<dtd>/<format>
        !           536:   #  So we need to fetch the doctype from the intermediate.
        !           537:   #
        !           538:   #  Note: this is a very simplistic check - but as far as I know,
        !           539:   #  it is correct. Am I right?
        !           540:   #
        !           541:   my $tmp = new FileHandle "<$tmpbase.2";
        !           542:   my $dtd;
        !           543:   while ( ($dtd = <$tmp>) && ! ( $dtd =~ /^\(/) ) { };
        !           544:   $tmp->close;
        !           545:   $dtd =~ s/^\(//;
        !           546:   $dtd =~ tr/A-Z/a-z/;
        !           547:   chop $dtd;
        !           548:   $global->{dtd} = $dtd;
        !           549: 
        !           550:   my $style = "";
        !           551:   if ($global->{style})
        !           552:     {
        !           553:       $style = "$main::DataDir/site/$dtd/$global->{format}/$global->{style}mapping";
        !           554:       -r $style or
        !           555:          $style = "$main::DataDir/dist/$dtd/$global->{format}/$global->{style}mapping";
        !           556:     }
        !           557:   my $mapping = "$main::DataDir/site/$dtd/$global->{format}/mapping";
        !           558:   -r $mapping or $mapping = "$main::DataDir/dist/$dtd/$global->{format}/mapping";
        !           559: 
        !           560:   $global->{charset} = "nippon" if ($global->{language} eq "ja");
        !           561:   #
        !           562:   # we don't have Korean groff so charset should be latin1.
        !           563:   #
        !           564:   if ($global->{language} eq "ko")
        !           565:     {
        !           566:       if ($global->{format} eq "groff")
        !           567:         {
        !           568:           $global->{charset} = "latin1";
        !           569:         }
        !           570:       else
        !           571:         {
        !           572:           $global->{charset} = "euc-kr";
        !           573:         }
        !           574:     }
        !           575:   
        !           576:   if ($global->{format} eq "groff" or $global->{format} eq "latex2e")
        !           577:     {
        !           578:       if ($dtd eq "linuxdoctr")
        !           579:         {
        !           580:           $mapping = "$main::DataDir/dist/$dtd/$global->{format}/tr-mapping";
        !           581:         }
        !           582:     }
        !           583: 
        !           584:   create_temp("$tmpbase.3");
        !           585:   system ("$main::progs->{SGMLSASP} $style $mapping <\"$tmpbase.2\" |
        !           586:       expand -$global->{tabsize} >\"$tmpbase.3\"");
        !           587:   ! -e "$tmpbase.3" and die "can't create file - exiting";
        !           588: 
        !           589: 
        !           590:   if ( $global->{debug} )
        !           591:     {
        !           592:       print "ASP stage finished.\n";
        !           593:     }
        !           594: 
        !           595:   #
        !           596:   #  If a postASP stage is defined, let the format handle it.
        !           597:   #  It should leave whatever it thinks is right based on $file.
        !           598:   #
        !           599:   #  postASP ($inhandle)
        !           600:   #
        !           601:   umask $saved_umask;
        !           602:   my $inpostasp = new FileHandle "<$tmpbase.3";
        !           603:   if (defined $Formats{$global->{format}}{postASP})
        !           604:     {
        !           605:       &{$Formats{$global->{format}}{postASP}}($inpostasp) == 0 or
        !           606:        die "error post-processing $global->{format}.\n";
        !           607:     }
        !           608:   $inpostasp->close;
        !           609: 
        !           610:   if ( $global->{debug} )
        !           611:     {
        !           612:       print "postASP stage finished.\n";
        !           613:     }
        !           614: 
        !           615:   #
        !           616:   #  All done, remove the temporaries.
        !           617:   #
        !           618:   if( !$global->{debug} ) {
        !           619:       remove_tmpfiles($tmpbase);
        !           620:   }
        !           621: }
        !           622: 
        !           623: =pod
        !           624: 
        !           625: =back
        !           626: 
        !           627: =head1 SEE ALSO
        !           628: 
        !           629: Documentation for various sub-packages of LinuxDocTools.
        !           630: 
        !           631: =head1 AUTHOR
        !           632: SGMLTools are written by Cees de Groot, C<E<lt>cg@cdegroot.comE<gt>>, 
        !           633: and various SGML-Tools contributors as listed in C<CONTRIBUTORS>.
        !           634: Taketoshi Sano C<E<lt>sano@debian.org<gt>> rename to LinuxDocTools.
        !           635: 
        !           636: =cut
        !           637: 1;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>