#-*- mode: perl; perl-indent-level: 4; cperl-indent-level: 4 -*- # # Subroutines for converting R documentation into HTML, LaTeX, Nroff # and R (Examples) format # # Copyright (C) 1997 Friedrich Leisch # Modifications for Windows (C) 1998, 1999 B. D. Ripley # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # A copy of the GNU General Public License is available via WWW at # http://www.gnu.org/copyleft/gpl.html. You can also obtain it by # writing to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA. # # ${R_HOME}/bin/build-help # Usage: build-help [options] [pkg] [lib] # Install all help files for package pkg to library lib # (defaults are `${R_HOME}/src/library/base' and the default library, # `${R_HOME}/library', respectively). # This version: if pkg is not found, it is tried in $R_HOME/src/library. use File::Basename; use Cwd; use Getopt::Long; fileparse_set_fstype; # Unix, in case one gets anything else. @knownoptions = ("rhome:s", "html", "nroff", "latex", "example", "debug", "dosnames", "htmllists", "chm"); GetOptions (@knownoptions) || usage(); $cwd=getcwd(); if($opt_rhome){ $R_HOME=$opt_rhome; print STDERR "R_HOME from --rhome: `$R_HOME'\n" if $opt_debug; } elsif($ENV{"R_HOME"}){ $R_HOME=$ENV{"R_HOME"}; print STDERR "R_HOME from ENV: `$R_HOME'\n" if $opt_debug; } else{ chdir(dirname($0) . "/../../.."); $R_HOME=getcwd(); print STDERR "R_HOME: `$R_HOME'\n" if $opt_debug; } $R_HOME =~ s+\\+/+g; # Unix-style path require "$R_HOME/src/gnuwin32/help/Rdconvlib.pl"; require "$R_HOME/src/gnuwin32/help/buildlib.pl"; chdir($cwd); print STDERR "Current directory (cwd): '$cwd'\n" if $opt_debug; $tmpdir=$ENV{"TEMP"}; if(!$tmpdir) { if ($^O eq "Unix") {$tmpdir = "/tmp";} else {$tmpdir = "c:/windows/temp";} } $tmpdir =~ s+\\+/+g; #print "temp=$temp\n"; -d $tmpdir or die "TEMP is set to `$tmpdir' which is not a directory\n"; # if option --htmllists is set we only rebuild some list files and # exit if($opt_htmllists){ build_htmlpkglist("$R_HOME/library"); %anindex = read_anindex("$R_HOME/library"); %htmlindex = read_htmlindex("$R_HOME/library"); build_htmlfctlist("$R_HOME/library"); exit 0; } # default is to build all documentation formats if(!$opt_html && !$opt_nroff && !$opt_latex && !$opt_example && !$opt_chm){ $opt_html = 1; $opt_nroff = 1; $opt_latex = 1; $opt_example = 1; $opt_chm = 1; } ($pkg, $lib, @mandir) = buildinit(); $dest = "$lib/$pkg"; print STDERR "Destination `dest'= `$dest'\n" if $opt_debug; if($opt_chm) { $chmdir = "../chm"; mkdir($chmdir, 755); open_hhp($pkg); } build_index(); if($opt_chm) {build_chm_toc();} if ($opt_latex) { $latex_d="$dest/latex"; mkdir "$latex_d", $dir_mod || die "Could not create $latex_d: $!\n"; } if ($opt_example) { $Rex_d="$dest/R-ex"; mkdir "$Rex_d", $dir_mod || die "Could not create $Rex_d: $!\n"; } print " >>> Building/Updating help pages for package `$pkg'\n"; print " Formats: "; print "text " if $opt_nroff; print "html " if $opt_html; print "latex " if $opt_latex; print "example " if $opt_example; print "chm " if $opt_chm; print "\n"; # get %htmlindex and %anindex %anindex = read_anindex($lib); if($opt_html){ %htmlindex = read_htmlindex($lib); build_htmlfctlist($lib); } elsif ($opt_chm) { %htmlindex = read_htmlindex($lib); } format STDOUT = @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<< @<<<<<< @<<<<<< @<<<<<< @<<<<<< $manfilebase, $textflag, $htmlflag, $latexflag, $exampleflag, $chmflag . foreach $manfile (@mandir) { if($manfile =~ /\.[Rr]d$/) { $manfilebase = basename($manfile, (".Rd", ".rd")); $manage = (-M $manfile); $textflag = $htmlflag = $latexflag = $exampleflag = $chmflag = ""; if($opt_nroff){ my $targetfile = $filenm{$manfilebase}; $destfile = "$dest/help/$targetfile"; if(fileolder($destfile, $manage)) { $textflag = "text"; $tmpfile = "$tmpdir/nr1"; $tmp2 = "$tmpdir/nr2"; Rdconv($manfile, "nroff", "", "$tmpfile"); # Unix needs / : some Win32 Perls need \ if(!($^O eq "Unix")) { $tmp2 =~ s+/+\\+g; } $cmd = "tbl $tmpfile | troff -Tlatin1 -ms | grotty -buo > $tmp2"; system("$cmd") ==0 or die "cannot execute nroff cmd\n"; unlink($tmpfile); open hlpfile, "<$tmp2" || die "Couldn't open '$tmp2'\n"; open dest, ">$destfile" || die "Couldn't open '$destfile'\n"; $keep = $/; undef $/; while () { s/\xAD/-/go; # ISO Latin hyphen to - s/\n*$/\n\n/s; # remove all trailing blank lines s/\n\s*\n\s*\n/\n\n/sg; # convert two blank lines into one print dest $_; } $/ = $keep; close hlpfile; close dest; unlink($tmp2); } } if($opt_html){ my $targetfile = $filenm{$manfilebase}; $misslink = ""; $destfile = "$dest/html/$targetfile.$HTML"; if(fileolder($destfile,$manage)) { $htmlflag = "html"; print "\t$destfile" if $opt_debug; Rdconv($manfile, "html", "", "$destfile"); } } if($opt_chm){ my $targetfile = $filenm{$manfilebase}; $misslink = ""; $destfile = "../chm/$targetfile.$HTML"; print hhpfile "$targetfile.$HTML\n"; if(fileolder($destfile,$manage)) { $chmflag = "chm"; print "\t$destfile" if $opt_debug; Rdconv($manfile, "chm", "", "$destfile"); } } if($opt_latex){ my $targetfile = $filenm{$manfilebase}; $destfile = "$dest/latex/$targetfile.tex"; if(fileolder($destfile,$manage)) { $latexflag = "latex"; Rdconv($manfile, "latex", "", "$destfile"); } } if($opt_example){ my $targetfile = $filenm{$manfilebase}; $destfile = "$dest/R-ex/$targetfile.R"; if(fileolder($destfile,$manage)) { Rdconv($manfile, "example", "", "$destfile"); if(-f$destfile) {$exampleflag = "example";} } } write if ($textflag || $htmlflag || $latexflag || $exampleflag || $chmflag); print " missing link(s): $misslink\n" if $htmlflag && length($misslink); } } sub usage { print "Usage: build-help [--rhome dir] [--html] [--nroff] [--latex]\n" . " [--example] [--dosnames] [--htmllists] [--debug]\n" . " [pkg] [lib]\n"; exit 0; } sub open_hhp { my $pkg = $ARGV[0]; open hhpfile, ">../chm/$pkg.hhp" || die "Couldn't open the chm project file\n"; print hhpfile "[OPTIONS]\n", "Auto Index=Yes\n", "Contents file=$pkg.toc\n", "Compatibility=1.1 or later\n", "Compiled file=$pkg.chm\n", "Default topic=00Index.html\n", "Display compile progress=No\n", "Full-text search=Yes\n", "Full text search stop list file=..\\..\\..\\gnuwin32\\help\\R.stp\n", "\n\n[FILES]\n00Index.html\n"; }