|
|
- #!/usr/bin/env perl
- # File : makejmlrbook
- # Author : Nicola L C Talbot
- # Date : 22nd March 2010
- # Last Modified : 30 May 2012
- # Version : 0.32
- # Description : Given the name of a document using the
- # jmlrbook class file, this script runs
- # pdflatex (and possibly bibtex) on the
- # imported articles and the main document.
- # http://theoval.cmp.uea.ac.uk/~nlct/
- #
- # This file is distributed as part of the jmlr LaTeX bundle.
- #
- # Copyright (c) 2006 Nicola L.C. Talbot
- # This work may be distributed and/or modified under the
- # conditions of the LaTeX Project Public License, either version 1.3
- # of this license or any later version.
- # The latest version of this license is in
- # http://www.latex-project.org/lppl.txt
- # and version 1.3 or later is part of all distributions of LaTeX
- # version 2005/12/01 or later.
- #
- # This work has the LPPL maintenance status `maintained'.
- #
- # The Current Maintainer of this work is Nicola Talbot.
-
- use Getopt::Long;
- use File::Basename;
- use File::Copy;
- use Cwd;
- use strict;
-
- my $version = "0.32 (2012-05-28)";
-
- my $eol = "\n";
- my $dd = '/';
-
- if ($^O eq 'MSWin32')
- {
- $eol = "\r\n";
- $dd = "\\";
- }
-
- my $showversion = 0;
- my $showhelp = 0;
- my $quiet = 0;
- my $batchtex = 0;
- my $online = 1;
- my $print = 1;
- my $html = 1;
- my $latexapp = 'pdflatex';
- my $bibtexapp = 'bibtex';
- my $latexopts = '';
- my $bibtexopts = '';
- my $format = 'pdf';
- my $logourl = '';
- my $extractpreface = 0; # v0.3 added
- # execute system calls (--noexecute will just list the system calls
- # without executing them)
- my $execute = 1; # v0.31 added
-
- unless(&GetOptions(
- "online!" => \$online,
- "print!" => \$print,
- "html!" => \$html,
- "extractpreface!" => \$extractpreface,
- "logourl=s" => \$logourl,
- "format=s" => \$format,
- "latexapp=s" => \$latexapp,
- "bibtexapp=s" => \$bibtexapp,
- "latexopts=s" => \$latexopts,
- "bibtexopts=s" => \$bibtexopts,
- "quieter!" => \$quiet,
- "batchtex!" => \$batchtex,
- "execute!" => \$execute,
- "version" => \$showversion,
- "help" => \$showhelp))
- {
- die "Use --help for help\n";
- }
-
- my $appname = basename($0);
-
- if ($showhelp)
- {
- die "$appname version $version Copyright (c) 2010 Nicola L C Talbot\n",
- "Distributed under the LaTeX Project Public License.\n\n",
- "Syntax: $appname [options] <filename>\n\n",
- "<filename> should be the name of the master document for a LaTeX \n",
- "file that uses the jmlrbook class. The .tex extension may be\n",
- "omitted.\n\n",
- "Basic options:\n",
- "--online\t\tGenerate the color on-line version (default)\n",
- "--noonline\t\tDon't generate the color on-line version\n",
- "--print\t\t\tGenerate the grayscale print version (default)\n",
- "--noprint\t\tDon't generate the grayscale print version\n",
- "--html\t\t\tGenerate the HTML version (default)\n",
- "--nohtml\t\tDon't generate the HTML version\n",
- "--extractpreface\tParse document for preface environment\n",
- "--noextractpreface\tDon't parse document for preface environment\n",
- "--logourl <url>\tMake the logo on the HTML index page link to <url>\n",
- "--batchtex\t\tRun TeX in batch mode\n",
- "--nobatchtex\t\tDon't run TeX in batch mode\n",
- "--quieter\t\tReduce messages to stdout and run TeX in batch mode\n",
- "--noquieter\t\tDon't reduce messages to stdout\n",
- "--execute\t\tExecute system calls (default)\n",
- "--noexecute\t\tDon't execute system calls, just list the\n",
- "\t\t\tcommands.\n",
- "--version\t\tDisplay version number and exit\n",
- "--help\t\t\tDisplay help message and exit\n",
- "\nAdvanced options:\n",
- "--latexapp <name>\tApplication used to call LaTeX\n",
- "\t\t\t(Defaults to 'pdflatex')\n",
- "--format <string>\tOutput format (default: 'pdf')\n",
- "--bibtexapp <name>\tApplication used to call BibTeX\n",
- "\t\t\t(Defaults to 'bibtex')\n",
- "--latexopt <string>\tOptions to pass to LaTeX\n",
- "--bibtexopt <string>\tOptions to pass to BibTeX\n";
- }
-
- if ($showversion)
- {
- die "$appname version $version copyright (c) 2010 Nicola L C Talbot\n",
- "Distributed under the LaTeX Project Public License.\n";
- }
-
- unless ($#ARGV == 0)
- {
- die "$appname: missing filename\n",
- "use --help for help\n";
- }
-
- if ($quiet or $batchtex)
- {
- $latexopts = '-interaction=batchmode '.$latexopts;
- }
-
- if ($quiet)
- {
- $bibtexopts = '-terse '.$bibtexopts;
- }
-
- my ($main_name, $main_path, $main_suffix)
- = fileparse($ARGV[0], '\.(tex|ltx)');
-
- $main_suffix = '.tex' unless $main_suffix;
-
- my $org_dir = cwd();
-
- &chdirordie($main_path);
-
- my $mainaux = "$main_name.aux";
-
- # If the aux file doesn't exist or the aux file is older than
- # the main file, run latex
-
- if (not -e $mainaux or (-M $mainaux > -M "$main_name$main_suffix"))
- {
- &latex($main_name);
- }
-
- my $main_bibdata = 0;
- my @imports = ();
- my %pagerefs = ();
- my $preface_data; # v0.3 new
- my @preface_editors = ();
-
- # Parse aux file
-
- &parsemainaux($mainaux);
-
- # Replace any instances of \articlepagesref
-
- foreach my $import (@imports)
- {
- my $label = $import->{'label'};
-
- my $pages = $pagerefs{$label}->{'start'}.'--'
- . $pagerefs{$label}->{'end'};
-
- $import->{'author'}=~s/\\articlepagesref\s*{$label}/$pages/;
- }
-
- if ($html)
- {
- # If the html files need to be created, make the directory
- # html-src, if it doesn't already exist
-
- unless (-d 'html-src')
- {
- &mkdirordie('html-src');
- }
-
- unless (-d 'html')
- {
- &mkdirordie('html');
- }
-
- if ($extractpreface) # v0.3 new
- {
- # If the preface needs to be extract, make a directory for it if
- # it doesn't already exist
-
- my $prefdir = &fname("html-src", $preface_data->{'OutFile'});
-
- unless (-d $prefdir)
- {
- &mkdirordie($prefdir);
- }
-
- my $prefbase = &fname($prefdir, $preface_data->{'OutFile'});
-
- &createprefacefile($prefdir, $prefbase);
-
- # Create the cfg file
-
- &createjmlrcfg("html-src", $preface_data->{'OutFile'});
-
- &chdirordie($prefdir);
-
- &latex($preface_data->{'OutFile'});
- &htlatex($preface_data->{'OutFile'}, 'jmlr');
-
- &chdirordie($org_dir, $main_path);
-
- # Check the appropriate subdirectory is in html directory
-
- my $outname = &fname('html', $preface_data->{'OutFile'});
-
- unless (-d $outname)
- {
- &mkdirordie($outname);
- }
-
- # Copy pdf file
-
- ©ordie("$prefbase.$format",
- &fname($outname, "$preface_data->{OutFile}.$format"));
-
- # Copy html file
-
- ©html($preface_data->{'OutFile'}, $preface_data->{'OutFile'});
- }
- }
-
- # Iterate through each imported article
-
- foreach my $import (@imports)
- {
- my $label = $import->{'label'};
- my $importbase = &fname($import->{'path'}, $import->{'name'});
-
- # Check the aux file of this article
-
- my $aux = "$importbase.aux";
-
- # The aux file should exist because running LaTeX on the
- # main file will create the aux file.
-
- my $bibdata = 0;
-
- if (open AUX, $aux)
- {
- &message("Reading '$aux'...\n");
-
- while (<AUX>)
- {
- if (/\\bibdata\b/)
- {
- $bibdata = 1;
- }
- }
-
- close AUX;
- }
- elsif (not $execute)
- {
- warn "Can't open '$aux' - skipping\n";
- }
- else
- {
- die "$appname: Can't open '$aux' $!\n";
- }
-
- # Do we need a bibtex run?
-
- if ($bibdata)
- {
- my $log = "$importbase.log";
-
- # If the log file doesn't exist, run LaTeX
-
- unless (-e $log)
- {
- &chdirordie($import->{'path'});
-
- &latex($import->{'name'});
-
- &chdirordie($org_dir, $main_path);
- }
-
- open LOGFD, $log or die "$appname: Can't open '$log' $!\n";
-
- &message("Reading '$log'...\n");
-
- my $runbibtex = 0;
-
- while (<LOGFD>)
- {
- if (/There were undefined citations\./)
- {
- # Run bibtex and latex
- $runbibtex = 1;
-
- last;
- }
- }
-
- close LOGFD;
-
- if ($runbibtex)
- {
- &chdirordie($import->{'path'});
-
- &bibtex($import->{'name'});
- &latex($import->{'name'});
-
- &chdirordie($org_dir, $main_path);
- }
- }
-
- if ($html)
- {
- # If html is required, we also need pdf versions of the
- # individual articles.
-
- # v0.2 run latex even if pdf file exists to ensure start page
- # number is correct.
-
- &chdirordie($import->{'path'});
-
- &latexstartpage($import->{'name'}, $pagerefs{$label}->{'start'});
-
- &chdirordie($org_dir, $main_path);
-
- # Do we need a rerun?
-
- if (&needs_rerun($importbase))
- {
- &chdirordie($import->{'path'});
-
- &latexstartpage($import->{'name'}, $pagerefs{$label}->{'start'});
-
- &chdirordie($org_dir,$main_path);
- }
-
- my $importdir = $import->{'path'};
-
- if ($importdir = '.')
- {
- $importdir = $import->{'name'};
- }
-
- # Check the appropriate subdirectory is in html-src
-
- my $name = &fname('html-src', $importdir);
-
- unless (-d $name)
- {
- &mkdirordie($name);
- }
-
- my $text = '';
-
- # Read the LaTeX file and store everything up to
- # the end of the abstract
-
- my $tex = "$importbase.tex";
-
- my $absfile = &fname("html-src", $importdir,
- $import->{'name'}.'.tex');
-
- if ($execute)
- {
- open TEX, $tex or die "$appname: Can't open '$tex': $!\n";
-
- while (<TEX>)
- {
- # This doesn't handle complicated cases, such as
- # the author using \abstract ... \endabstract
- # or commenting out the abstract with conditionals
- if (/^([^%]*)\\end{abstract}/)
- {
- $text .= $&;
- last;
- }
-
- $text .= $_;
- }
-
- close TEX;
-
- # Add the 'html' class option:
- unless ($text=~
- s/^([^%]*)\\documentclass\s*\[(.*)\]/$1\\documentclass[$2,html]/m)
- {
- $text=~s/^([^%]*)\\documentclass\s*/$1\\documentclass[html]/m;
- }
-
- my $aux = "$importbase.aux";
-
- $aux=~s/\\/\//g if ($dd eq '\\');
-
- my $prebegindoc = '\\hypersetup{draft}' . $eol
- . '\\makeatletter' . $eol
- . "\\input{../../$aux}" . $eol
- . '\\makeatother'
- . $eol;
-
- my $begindoc = '';
-
- # Set the authors
- if (defined($import->{'author'}))
- {
- my $author = $import->{'author'};
-
- $author=~s/^([^;]*);/\\textbf{\\emph{$1};}/;
-
- $begindoc .= "\\jmlrauthors{$author}";
- }
-
- # Add content div
-
- # v0.31 modified \footnote to set the footnote text as in-line
- # parenthesis.
-
- $text=~s/^([^%\n\r\f]*)\\begin{document}/
- $prebegindoc$&$begindoc
- \\HCode{<div id="content">}
- \\renewcommand{\\footnote}[2][]{ (\#2)}%$eol
- /mx;
-
- # Create file containing the abstract
-
- open ABSFD,">$absfile"
- or die "$appname: Can't create '$absfile': $!\n";
-
- print ABSFD "\\batchmode", $eol if ($batchtex or $quiet);
-
- my $texpath = $import->{path};
-
- $texpath=~s/\\/\//g if ($dd eq '\\');
-
- print ABSFD
- "\\makeatletter",$eol,
- "\\def\\input\@path{{../../$texpath/}}$eol",
- "\\makeatother",$eol,
- $text, $eol,
- "\\HCode{", &htmltimestamp, "}", $eol,
- "\\HCode{</div>}", $eol,
- &htmlmenu, # v0.3 added by Olivier Chapelle
- "\\end{document}",$eol;
-
- close ABSFD;
- }
- else
- {
- &messagecall("Skipping creation of '$absfile'\n");
- }
-
- # Create the cfg file
-
- &createjmlrcfg("html-src", $importdir);
-
- # Run htlatex
-
- # Change directory
- &chdirordie("html-src", $importdir);
-
- &htlatex($import->{'name'}, 'jmlr');
-
- # Go back to main directory
-
- &chdirordie($org_dir, $main_path);
-
- # Copy the html file to the html directory, but rename
- # the css file to jmlr.css
-
- ©html($importdir, $import->{'name'});
-
- # Check the appropriate subdirectory is in html directory
-
- my $outname = &fname('html', $importdir);
-
- unless (-d $outname)
- {
- &mkdirordie($outname);
- }
-
- # Copy pdf file
-
- ©ordie("$importbase.$format",
- &fname($outname, "$import->{name}.$format"));
- }
- }
-
- # do we need to run bibtex on the main document?
-
- if ($main_bibdata)
- {
- &bibtex($main_name);
- }
-
- if ($online)
- {
- &latexonline($main_name);
-
- # do we need a rerun?
-
- if (&needs_rerun($main_name))
- {
- &message("Rerun required\n");
- &latexonline($main_name);
-
- # check again
-
- if (&needs_rerun($main_name))
- {
- &message("Rerun required\n");
- &latexonline($main_name);
- }
- }
- }
-
- if ($print)
- {
- &latexprint($main_name);
-
- # do we need a rerun?
-
- if (&needs_rerun($main_name))
- {
- &message("Rerun required\n");
- &latexprint($main_name);
-
- # check again
-
- if (&needs_rerun($main_name))
- {
- &message("Rerun required\n");
- &latexprint($main_name);
- }
- }
- }
-
- if ($html and $execute)
- {
- # Make the index file
-
- my $indexfile = &fname('html-src', "index");
-
- my $preamble = '';
-
- open OUTFD, ">$indexfile.tex"
- or die "Can't open '$indexfile.tex': $!\n";
-
- open INFD, "$main_name.tex"
- or die "Can't open '$main_name.tex': $!\n";
-
- print OUTFD "\\batchmode", $eol if ($batchtex or $quiet);
-
- print OUTFD
- "\\makeatletter",$eol,
- "\\def\\input\@path{{../}}$eol",
- "\\makeatother",$eol,
- "\\def\\jmlrgrayscale{0}",$eol;
-
- while (<INFD>)
- {
- unless
- (s/^([^%]*)\\documentclass\s*\[([^\]]*)\]/
- $1\\documentclass[$2,html]/x)
- {
- s/^([^%]*)\\documentclass\s*/$&\[html\]/;
- }
-
- s/^([^%]*)\\begin{document}/
- \\hypersetup{draft}$eol$&\\HCode{<div id="content">}/x;
-
- if (/^([^%]*)\\maketitle/)
- {
- $preamble .= join('', $1, "\\maketitle", $eol);
- last;
- }
-
- $preamble .= $_;
- }
-
- close INFD;
-
- # Find the book logo
- if ($preamble
- =~/\\logo\s*(?:\[[^\]]*\])?\s*{(%\s*\n)?\\includegraphics\s*(\[[^\]]*\])?{([^}]*)}}/m)
- {
- my $texpath = $3;
- my $orgtexpath = $texpath;
- $texpath=~s/\//\\/g if ($dd eq "\\");
-
- my $ext = '';
-
- if (-e $texpath)
- {
- ©ordie($texpath, 'html');
-
- ©ordie($texpath, 'html-src');
- }
- elsif (-e "$texpath.png")
- {
- ©ordie("$texpath.png", 'html');
-
- ©ordie("$texpath.png", 'html-src');
-
- $ext = '.png';
- }
- elsif (-e "$texpath.jpg")
- {
- ©ordie("$texpath.jpg", 'html');
- ©ordie("$texpath.jpg", 'html-src');
-
- $ext = '.jpg';
- }
- elsif (-e "$texpath.gif")
- {
- ©ordie("$texpath.gif", 'html');
-
- ©ordie("$texpath.gif", 'html-src');
-
- $ext = '.gif';
- }
-
- my $img = basename($texpath);
-
- if ($logourl)
- {
- $preamble=~s/
- \\includegraphics(\[[^\]]*\])?{$orgtexpath}/
- \\href{$logourl}{\\includegraphics${1}{$img$ext}}/mgx;
- }
- else
- {
- $preamble=~s/
- \\includegraphics(\[[^\]]*\])?{$orgtexpath}/
- \\includegraphics${1}{$img$ext}/mgx;
- }
- }
-
- print OUTFD $preamble, $eol;
-
- # Parse TOC
-
- my $toc = "$main_name.toc";
-
- # Add link to preface if required
-
- if ($extractpreface)
- {
- print OUTFD
- "\\begin{description}\\item[\\normalfont \\prefacename]", $eol;
-
- print OUTFD "\\textbf{\\emph{\\jmlrabbrnamelist{{",
- join('},{', @preface_editors),
- "}}};} ",
- '\\csname @jmlrabbrvproceedings\\endcsname\\space',
- '\\csname @jmlrvolume\\endcsname:',
- $preface_data->{'Start'};
-
- unless ($preface_data->{'Start'} eq $preface_data->{'End'})
- {
- print OUTFD '--', $preface_data->{'End'};
- }
-
- print OUTFD ', \\csname @jmlryear\\endcsname\\newline', $eol;
-
- my $name = $preface_data->{'OutFile'};
-
- print OUTFD "[\\HCode{<a href=\"$name.html\">html</a>}] ",
- "[\\HCode{<a href=\"$name/$name.pdf\">pdf</a>}]",
- $eol;
-
- print OUTFD "\\end{description}$eol";
- }
-
- open TOC, $toc or die "Can't open '$toc': $!\n";
-
- my $idx = 0;
-
- while (<TOC>)
- {
- if (/^\\tocpart\s*{(.*)}\s*$/)
- {
- print OUTFD "\\begin{center}\\bfseries $1\\end{center}$eol";
- }
- elsif (/\\contentsline\s*{papertitle}{(.*)}{[^{}]*}{[^{}]*}\s*$/)
- {
- # v0.3 Changed by Olivier Chapelle to use description
- # environment instead of paragraph break
- print OUTFD "\\begin{description}\\item[\\normalfont $1]$eol";
- }
- elsif (/\\contentsline\s*{chapterauthor}{(.*)}{[^{}]*}{[^{}]*}\s*$/)
- {
- my $details = $1;
- $details=~s/([^;]*);/\\textbf{\\emph{$1};}/;
-
- my $label = $imports[$idx]->{'label'};
- my $pages = $pagerefs{$label}->{'start'}.'--'
- . $pagerefs{$label}->{'end'};
-
- $details=~s/\\articlepagesref\s*{$label}/$pages/;
-
- # v0.3 Changed by Olivier Chapelle to use newline instead of par
- print OUTFD "$details\\newline$eol";
-
- my $name = $imports[$idx]->{'name'};
-
- print OUTFD "[\\HCode{<a href=\"$name.html\">abs</a>}] ",
- "[\\HCode{<a href=\"$name/$name.pdf\">pdf</a>}]",
- $eol;
-
- # v0.3 Changed by Olivier Chapelle to end description
- print OUTFD "\\end{description}$eol";
-
- $idx++;
- }
- }
-
- close TOC;
-
- # version 0.2 added time stamp
-
- print OUTFD "\\HCode{", &htmltimestamp, "}$eol";
-
- print OUTFD &htmlmenu; # v0.3 Added by Olivier Chapelle
-
- print OUTFD "\\HCode{</div>}\\end{document}$eol";
-
- close OUTFD;
-
- # Go into html-src directory and run htlatex
-
- &chdirordie('html-src');
-
- &htlatex("index", 'xhtml');
-
- &chdirordie('..');
-
- # Copy to html directory
-
- my $inname = &fname('html-src', 'index.html');
- my $outname = &fname('html', 'index.html');
-
- open INFD, $inname or die "Can't open '$inname': $!\n";
-
- open OUTFD, ">$outname" or die "Can't open '$outname': $!\n";
-
- while (<INFD>)
- {
- s/href="index.css"/href="jmlr.css"/;
-
- print OUTFD;
- }
-
- close OUTFD;
-
- close INFD;
-
- # v0.2 new:
- # Copy any images generated by htlatex to html/
-
- my @imagefiles = glob(&fname('html-src', "index*.png"));
-
- foreach my $imagefile (@imagefiles)
- {
- copy($imagefile, 'html');
- }
- }
- elsif ($html)
- {
- &messagecall("chdir 'html-src'\n");
- &htlatex("index", 'xhtml');
- }
-
- # Return to original directory
- chdir $org_dir;
-
- # Subroutines
-
- sub message{ print @_ unless ($quiet) }
-
- sub messagecall{ print @_ if (not $quiet or not $execute) }
-
- sub systemcall{
- my $cmd = shift;
-
- &messagecall($cmd, "\n");
-
- my $code = 0;
-
- $code = system($cmd) if ($execute);
-
- $code;
- }
-
- sub latex{
- my $file = shift;
-
- my $code = &systemcall(join(' ', $latexapp, $latexopts, "\"$file\""));
-
- if ($code)
- {
- die "**LaTeX run failed with exit code $code.**\n",
- "Check '$file.log' for details\n";
- }
- }
-
- # v0.2 new
- sub latexstartpage{
- my $file = shift;
- my $page = shift;
-
- my $code = &systemcall(join(' ', $latexapp, $latexopts,
- "\"\\def\\startpage{$page}\\input{$file}\""));
-
- if ($code)
- {
- die "**LaTeX run failed with exit code $code.**\n",
- "Check '$file.log' for details\n";
- }
- }
-
- sub copyordie{
- my ($org, $dest) = @_;
-
- &messagecall("copy '$org' to '$dest'\n");
-
- if ($execute)
- {
- copy($org, $dest) or die "Can't copy '$org' to '$dest': $!\n";
- }
- }
-
- sub latexonline{
- my $file = shift;
-
- my $code = &systemcall(join(' ', $latexapp, $latexopts,
- "\"\\def\\jmlrgrayscale{0}\\input{$file}\""));
-
- if ($code)
- {
- die "**LaTeX run failed with exit code $code.**\n",
- "Check '$file.log' for details\n";
- }
-
- ©ordie("$file.$format", "$file-online.$format");
- }
-
- sub latexprint{
- my $file = shift;
-
- my $code = &systemcall(join(' ', $latexapp, $latexopts,
- "\"\\def\\jmlrgrayscale{1}\\input{$file}\""));
-
- if ($code)
- {
- die "**LaTeX run failed with exit code $code.**\n",
- "Check '$file.log' for details\n";
- }
-
- ©ordie("$file.$format", "$file-print.$format");
- }
-
- sub bibtex{
- my $file = shift;
-
- my $code = &systemcall(
- join(' ', $bibtexapp, $bibtexopts, "\"$file\""));
-
- if ($code)
- {
- die "**BibTeX run failed with exit code $code.**\n",
- "Check '$file.blg' for details\n";
- }
- }
-
- sub needs_rerun{
- my $file = shift;
- my $rerun = 0;
-
- unless ($execute)
- {
- &messagecall("Skipping rerun check for '$file'\n");
- return 0;
- }
-
- # Scan log file for rerun message
-
- my $log = "$file.log";
-
- # If there's no log file a run is needed
- open LOGFD, $log or return 1;
-
- while (<LOGFD>)
- {
- if (/Rerun to get cross-references right\./)
- {
- $rerun = 1;
- last;
- }
- }
-
- close LOGFD;
-
- return $rerun;
- }
-
- sub fname{ join($dd, @_) }
-
- # v0.3 new
- sub chdirordie{
- my $dirname = &fname(@_);
-
- &messagecall("chdir '$dirname'\n");
-
- unless (chdir $dirname)
- {
- if ($execute)
- {
- die "$appname: Can't change directory to $dirname: $!\n";
- }
- else
- {
- warn "(Can't change directory to '$dirname')\n";
- }
- }
- }
-
- # v0.31 new
- sub mkdirordie{
- my $dirname = &fname(@_);
-
- &messagecall("mkdir '$dirname'\n");
-
- unless (mkdir $dirname)
- {
- if ($execute)
- {
- die "$appname: Can't create directory '$dirname': $!\n";
- }
- else
- {
- warn "(Can't create directory '$dirname')\n";
- }
- }
- }
-
- # v0.2 new
- sub htmltimestamp{
- my $timestamp = localtime;
-
- return "<hr><center>Page last modified on $timestamp.</center>";
- }
-
- # v0.3 Added by Olivier Chapelle
- sub htmlmenu{
- return '
- \\HCode{<div id="fixed"><br>}
- \\HCode{<a align="right" href="http://www.jmlr.org" target=_top><img align="right" class="jmlr" src="http://jmlr.csail.mit.edu/jmlr.jpg" border="0"></a>}
- \\HCode{<p><br><br>}
- \\HCode{<p align="right"> <A href="http://www.jmlr.org/"> Home Page </A>}
- \\HCode{<p align="right"> <A href="/papers"> Papers </A>}
- \\HCode{<p align="right"> <A href="/author-info.html"> Submissions </A>}
- \\HCode{<p align="right"> <A href="/news.html"> News </A>}
- \\HCode{<p align="right"> <A href="/scope.html"> Scope </A>}
- \\HCode{<p align="right"> <A href="/editorial-board.html"> Editorial Board </A>}
- \\HCode{<p align="right"> <A href="/announcements.html"> Announcements </A>}
- \\HCode{<p align="right"> <A href="/proceedings"> Proceedings </A>}
- \\HCode{<p align="right"> <A href="/mloss">Open Source Software</A>}
- \\HCode{<p align="right"> <A href="/search-jmlr.html"> Search </A>}
- \\HCode{<p align="right"> <A href="/manudb"> Login </A></p>}
- \\HCode{<br><br>}
- \\HCode{<p align="right"> <A href="http://jmlr.csail.mit.edu/jmlr.xml">}
- \\HCode{<img src="http://jmlr.csail.mit.edu/RSS.gif" class="rss" alt="RSS Feed">}
- \\HCode{</A>}
- \\HCode{</div>}
- '
- }
-
- # v0.3 new
- sub htlatex{
- my ($filename, $cfg) = @_;
-
- # unicode-related options suggested by Olivier Chapelle
-
- # v0.31 added latex options in 5th parameter
-
- my $code = &systemcall(join(' ', 'htlatex',
- "\"$filename\"",
- "\"$cfg,uni-html4\"",
- "\" -cunihtf -utf8\"",
- '""',
- "\" $latexopts\""
- ));
-
- if ($code)
- {
- die "$appname: htlatex failed with exit code $code.\n";
- }
- }
-
- #v0.3 new
- sub createjmlrcfg{
- my $cfg = &fname(@_, "jmlr.cfg");
-
- unless ($execute)
- {
- &messagecall("Skipping creation of '$cfg'\n");
- return;
- }
-
- open CFG, ">$cfg" or die "$appname: Can't create '$cfg': $!\n";
-
- print CFG <<END_CFG;
- \\Preamble{html}
- \\begin{document}
- \\Css{div.maketitle {text-align:left;}}
- \\Css{h2.titleHead {text-align:left;}}
- \\Css{. {font-family:verdana,helvetica,sans-serif}}
- \\Css{a {text-decoration:none;color:\\#3030a0}}
- \\Css{.cmbx-10x-x-109{ font-weight: bold;}}
- \\Css{.cmbxti-10x-x-109{ font-weight: bold; font-style: italic;}}
- \\Css{\\#fixed {position:absolute; top:0; left:0; width:8em;
- height:100\\%;}}
- \\Css{\\#content {margin-top:1em; margin-left:10em;
- margin-right:0.5em;}}
- \\Css{img.jmlr {width: 7em;}}
- \\Css{img.rss {width: 2em;}}
- \\EndPreamble
- END_CFG
-
- # v0.3 Last four \Css lines above added by Olivier Chapelle
- close CFG;
- }
-
- #v0.3 new
- # copy html from html-src/$dir/ to html/ and rename css file
- sub copyhtml{
- my ($dir, $name) = @_;
-
- my $infile = &fname("html-src", $dir, "$name.html");
-
- my $outfile = &fname("html", "$name.html");
-
- unless ($execute)
- {
- &messagecall("Copy '$infile' to '$outfile'\n");
- return;
- }
-
- open INFD, $infile or die "Can't open '$infile': $!\n";
-
- open OUTFD, ">$outfile" or die "Can't open '$outfile': $!\n";
-
- while (<INFD>)
- {
- s/href="$name\.css"/href="jmlr.css"/;
-
- print OUTFD;
- }
-
- close OUTFD;
-
- close INFD;
-
- # Copy css file
-
- ©ordie("html-src/$dir/$name.css", "html/jmlr.css");
- }
-
- sub parsemainaux{
- my $mainaux = shift;
-
- &message("Reading '$mainaux'...\n");
-
- unless (open AUX, "$mainaux")
- {
- if ($execute)
- {
- die "$appname: Can't open '$mainaux' $!\n";
- }
- else
- {
- warn "(Can't open '$mainaux' - skipping)\n";
- return;
- }
- }
-
- while (<AUX>)
- {
- if (/\\bibdata\b/)
- {
- $main_bibdata = 1;
- }
- elsif (/\\\@jmlr\@import{(.*)}{(.*)}{(.*)}/)
- {
- my $import =
- {
- label => $1,
- path => $2,
- name => $3
- };
-
- $import->{'name'} =~s/\.(tex|ltx)\Z//;
-
- push @imports, $import;
- }
- elsif (/\\contentsline\s*{chapterauthor}{(.*)}{}{}}\s*$/
- and $#imports > -1)
- {
- $imports[$#imports]->{'author'} = $1;
- }
- elsif (/^\\newlabel\s*{([^}]*)jmlrstart}{{([^}]*)}{([^}]*)}/)
- {
- my $label = $1;
-
- $pagerefs{$label}->{'start'} = $3;
- }
- elsif (/^\\newlabel\s*{([^}]*)jmlrend}{{([^}]*)}{([^}]*)}/)
- {
- my $label = $1;
-
- $pagerefs{$label}->{'end'} = $3;
- }
- elsif ($extractpreface) # v0.3 new
- {
- if (/^\\\@prefacestart{([^}]*)}{(\d*)}/)
- {
- $preface_data->{'Start'} = $1;
- $preface_data->{'StartArabic'} = $2;
- }
- elsif (/^\\\@prefaceend{([^}]*)}/)
- {
- $preface_data->{'End'} = $1;
- }
- elsif (/^\\\@prefacefile{([^}]*)}{([^}]*)}/)
- {
- $preface_data->{'File'} = $1;
- $preface_data->{'OutFile'} = $2;
- }
- elsif (/^\\\@prefaceeditor{(.*)}/)
- {
- my $name = $1;
- $name=~s/\\\\.*//;
- push @preface_editors, $name;
- }
- }
- }
-
- # if preface is to be extracted, has the require data been found?
-
- if ($extractpreface)
- {
- unless ($preface_data->{'File'})
- {
- warn "$appname: Can't find preface information in aux file.\n",
- "Have you used the preface environment?\n";
-
- $extractpreface = 0;
- }
- }
-
- close AUX;
- }
-
- sub createprefacefile{
- my ($prefdir, $prefbase) = @_;
-
- my $prefout = "$prefbase.tex";
-
- &messagecall("Create preface file '$prefout'\n");
-
- return unless ($execute);
-
- # Open preface output file
-
- open PREFOUT, ">$prefout"
- or die "$appname: Can't open '$prefout': $!\n";
-
- print PREFOUT "\\batchmode", $eol if ($batchtex or $quiet);
- print PREFOUT "\\makeatletter", $eol;
- print PREFOUT "\\def\\input\@path{{../../}}", $eol;
- print PREFOUT "\\makeatother", $eol;
-
- # Get the book's preamble
-
- my $filename = "$main_name$main_suffix";
-
- open BOOK, $filename
- or die "$appname: Can't open '$filename': $!\n";
-
- while (<BOOK>)
- {
- if (/\\documentclass/)
- {
- unless (s/^([^%]*)\\documentclass\s*\[(.*)\]/$1\\documentclass[$2,html]/m)
- {
- s/^([^%]*)\\documentclass\s*/$1\\documentclass[html]/m;
- }
-
- print PREFOUT;
- }
- elsif (/^\\begin{document}/)
- {
- if ($preface_data->{'Start'}=~/^[clxvi]+$/)
- {
- print PREFOUT "\\pagenumbering{roman}%", $eol;
- }
- elsif ($preface_data->{'Start'}=~/^[CLXVI]+$/)
- {
- print PREFOUT "\\pagenumbering{Roman}%", $eol;
- }
-
- print PREFOUT
- "\\setcounter{page}{",
- $preface_data->{'StartArabic'},
- "}%", $eol;
-
- # \hypersetup{draft} is used to suppress links.
- # (Only a partial document so internal links may be
- # dead. Also prevents unwanted tag before the DOCTYPE
- # line in the HTML file.)
-
- print PREFOUT
- "\\hypersetup{draft}", $eol,
- '\\makeatletter',
- "\\\@openrightfalse\\input{../../$main_name.aux}",
- '\\makeatother', $eol;
-
- print PREFOUT
- "\\providecommand{\\HCode}[1]{}", $eol,
- "\\title{\\prefacename}", $eol,
- "\\begin{document}", $eol,
- "\\HCode{<div id=\"content\">}", $eol;
-
- last;
- }
- else
- {
- print PREFOUT;
- }
- }
-
- close BOOK;
-
- # Preface file name will have '/' as directory divider
-
- my $preffile = $preface_data->{'File'};
-
- if ($dd eq "\\")
- {
- $preffile=~s/\//\\/g;
- }
-
- open PREFIN, $preffile
- or die "$appname: Can't open '$preffile': $!\n";
-
- my $scanning = 0;
-
- while (<PREFIN>)
- {
- # This is fairly primitive and works best when the begin
- # and end of the environment are on their own line.
-
- if (/\\begin{preface}/)
- {
- print PREFOUT;
- $scanning = 1;
- }
- elsif ($scanning)
- {
- print PREFOUT;
-
- last if /\\end{preface}/;
- }
- }
-
- close PREFIN;
-
- print PREFOUT
- "\\HCode{", &htmltimestamp, "}", $eol,
- "\\HCode{</div>}", $eol,
- &htmlmenu,
- "\\end{document}", $eol;
-
- close PREFOUT;
-
- }
-
- 1;
|