#!/usr/local/bin/perl # # 1995, 1997, 1998, 2002 by kolar@karlin.mff.cuni.cz # Copyright: tell me you are using it and check whether modification # of pstogif is legal, please # $ver='0.1.2a'; # ver: s podporou jednostrankovych dokumentu a zmenou hustoty # link na ps/pdf # #co vylepsit: # -bg pozadi (vcetne pruhledneho!) # zlobi kdyz jmeno souboru obsahuje '\' (sh to bere jako esccharakter) # (moznost volby okraje.. az nekdy) (mozna okraje zrusit a delat je vramci html) # udelat -dpi prepinac (a zachovat kompatibilitu) # pred vytvarenim gif-soubory smazat - pojistka pro pripad ze by nebyly # vytvoreny kvuli neexistujicim fontum a podobne. # prepinace jsou prijemnejsi i na konci # moznost vytvoreni jen chybejicich gifu # moznost vytvaret jen gify # automaticky sledovat stari gif,html a dvi # vytvorit soubor $base.pagelit abych podle stari dvi nemusel poustet dvitype # -playmulti vytvori __.1.html (event. __.all.html) i v pripade jedne strany # brat options z $base.dvi2html.rc, $base.dvi2html .dvi2htmlrc # brat parametry z @jmeno souboru # dat link na gif -giflink -nogiflink # -hplink -nohplink # DPI hustota byla v pstogif[.margin] (100dpi) ale ja to menim # a bylo by jeste potreba dat dvips parametr -D # (implicitne ma 600dpi - jak videt z ps vysledku) # uz jsem udelal, ale stejne to nefunguje dobre # jeste ma gs nejaky option -r120 (resolution?) - to by bylo dobre zkusit. #
je linebreak; jinak spatne zobrazoval #set verbose #for debuging $|=1; $[=1; sub programdescr { print < file.dvi 50 100 120 150 200 300 600, default=100 -ang 'page' misto 'strana' -nopage vynecha text 'strana' -giflink prida linky na .gif soubory -nogifs vytvori jenom .html soubory (rychle) -oneline cisla stranek v jednom radku -list -nolist na kazde strance seznam vsech stranek (ano/ne) (automaticky, je-li mene nez 15 stran) -shortlist -fulllist dtto jenom cast (asi 10 stranek) nebo cele -nobg nestarat se o pozadi -allinone vytvori __.all.html s vsemi strankami (automaticke, pokud __.all.html existuje) -title 'xx yy' v titulku dany text misto jmena souboru -uplink 'index.html' ikonku UP s linkem na index.html -uplinktext 'zpet' text misto ikonky UP -dvilink -texlink -pslink -pdflink prida link na dvi/tex/ps/pdf soubor -pdffile -psfile vytvori __.pdf/__.ps a prida link -bpp8 -bpp24 vytvari barevne obrazky (8, 24 bits per pixel) bug reports to kolar\@karlin.mff.cuni.cz konec #-smart snazi se pracovat rychleji #nedokumentovane -D density_pro_dvips (funguje skoro jenom 300 kvuli fontum) # -htmlbase (base jak ma byt psana do html) } sub min { local($x,$y)=@_; return $x if $x<$y; return $y; } sub max { local($x,$y)=@_; return $x if $x>$y; return $y; } sub makepagelistline { local ($prefix,$sufix,$shortlong,$i)=@_; local ($j, $pagelistline, $first, $last); # global $pages @pgnum $base $pagelistline=''; if ($shortlong eq 'short') { $first=&max(1, &min($i-int($shortpagelistno/2),$pages-$shortpagelistno+1)); $last=&min($pages,$first+$shortpagelistno-1); } else { # 'full' nebo '1' nebo ''; $first=1; $last=$pages; } if ($first != 1) {$pagelistline .= ' ...'} for ($j=$first; $j<=$last ;$j++) { if (defined($pgdesc[$j])) { $pagelistline .= " $pgdesc[$j]: "; } if ($j != $i) { # $pagelistline .= " $pgnum[$j]\n"; } else { $pagelistline .= " $pgnum[$j]\n"; } } # for j if ($last != $pages) {$pagelistline .= '...'} return $pagelistline; } # sub makepagelistline $density=100; $giflink=0; $gifs=1;$pagelist='auto';$shortpagelistno=17; $nobg=0;$smart=0; $allinone='auto';$title='';$uplink='';$uplinktext='';$uplinkstring=''; $dvilink=0; $texlink=0; $pslink=0; $pdflink=0; $psfile=0; $pdffile=0; $strana="\n strana";$stranaend=""; $stranadesc="\n"; $lang='cz'; $dvipsopt=""; $bppopt=""; #takze pstogif vytvori 2-bitovy obrazek @fileparams=(); while ($prep=shift) { if ($prep !~ /^\-/) { # neni -nejakyprepinac @fileparams=(@fileparams,$prep); } else { # je -nejakyprepinac if ($prep eq '-ang') { $strana="\n page";$stranaend=""; $lang='en'; } elsif ($prep eq '-oneline') { $strana="";$stranaend="";$oneline=1; } elsif (($prep eq '-nostrana')|| ($prep eq '-nopage')) { $strana="\n ";$stranaend=""; } elsif ($prep eq '-giflink') { $giflink=1; } elsif ($prep eq '-shortlist') { $pagelist='short'; } elsif (($prep eq '-fulllist') ||($prep eq '-fullist')) { $pagelist='full'; } elsif ($prep eq '-list') { $pagelist='short'; } elsif ($prep eq '-nolist') { $pagelist=0; } elsif ($prep eq '-nobg') { $nobg=1; } elsif (($prep eq '-allinone') || ($prep eq '-allonone')) { $allinone=1; } elsif ($prep eq '-smart') { $smart=1; } # elsif ($prep eq '-D') # { $xxx=$ARGV[1]; if ($xxx <10) { print "spatny parametr u -D\n"; exit 1;} $dvipsopt="-D $xxx"; shift; } elsif ($prep eq '-htmlbase') { $htmlbase=$ARGV[1]; shift; } elsif ($prep eq '-title') { $title=$ARGV[1]; shift; } elsif ($prep eq '-uplink') { $uplink=$ARGV[1]; shift; } elsif ($prep eq '-uplinktext') { $uplinktext=$ARGV[1]; shift; } elsif ($prep eq '-dvilink') { $dvilink=1; } elsif ($prep eq '-nodvilink') { $dvilink=0; } elsif ($prep eq '-texlink') { $texlink=1; } elsif ($prep eq '-notexlink') { $texlink=0; } elsif ($prep eq '-pdflink') { $pdflink=1; } elsif ($prep eq '-pslink') { $pslink=1; } elsif ($prep eq '-pdffile') { $pdffile=1; $pdflink=1; } elsif ($prep eq '-psfile') { $psfile=1; $pslink=1; } elsif ($prep eq '-bpp8') { $bppopt="-bpp8"; } elsif ($prep eq '-bpp24') { $bppopt="-bpp24"; } elsif (($prep eq '-nogifs')|| ($prep eq '-nogif')) { $gifs=0; print "\n nebudu vytvaret zadne graficke soubory, ". "predpokladam ze jiz existuji\n\n"; } elsif ($prep eq '-leonid') { warn " Leonid - style "; $ENV{TEXCONFIG}='.:/usr/users/kolar/lib/texmf/ps'; # $ENV{TEXFONTS}='.:/usr/users/kolar/lib/texmf/fonts'; $ENV{VARTEXFONTS}='/usr/users/kolar/lib/texmf/fonts'; $ENV{USE_VARTEXFONTS}='1'; #vartexfonts zpusobuje u programu kpsewhich tuto chybu, pokud je v nem ':' # warning: {/usr/local/share/texmf/fonts,.: Unmatched {. #conv: sed 's/$ENV{/setenv /;s/}//;'"s/='/ /; s/'//;" >tmpx$$;echo; cat tmpx$$ $dvipsopt='-P120 -x833.333'; # -P120 pouzit config.120 (tiskarna 120) # -x num Set the magnification ratio to num /1000. Overrides the # magnification specified in the .dvi file $density=120; } else { print "bad switch: $prep\n"; &usage(); exit 1; } } } if (($#fileparams > 2) || ($#fileparams < 1)) { &programdescr(); &usage(); exit 1; } if (2 == $#fileparams ) { $density=shift(@fileparams); } $dvifile=$fileparams[1]; if ( ! -r $dvifile) { print " Can not open dvi file: $dvifile\n"; print " Nemohu cist soubor: $dvifile\n"; exit 1; } chop($base = `basename $dvifile \\.dvi`); $htmlbase=$base unless $htmlbase; $index="$base.html"; $allindex="$base.all.html"; if ( $texlink && ! -r "$base.tex") { print "Warning: reference to nonreadable file $base.tex\n" } #po staru: #$_=`echo 1|dvitype $dvifile | grep "beginning of page"|awk '{print \$5}' `; # bere nektere parametry z stdin #@pgnum=split; #$pages=$#pgnum #po novu: $pages=0; open(DVITYPE, "echo 1|dvitype $dvifile|"); while () { chop; if (/beginning of page ([^ ]*)/) { $pages++; $pgnum[$pages]=$1; } if (/xxx.*dvi2html.*/) { if (/xxx 'dvi2html-page-desc:(.*)'/) { $pgdesc[$pages]=$1; } else { print "\n Probably bad special: $_\n"; } } } # while # mohl bych take zavrit :-) print "\n"; # ta potvora dvitype zapomene odratkovat po tom svem zmatku if ($pages==0) { print "\n\n dvi-soubor $dvifile neobsahuje zadne stranky nebo je vadny !\n\n"; exit 1; } # tlacitka: $iconnext="http://www.karlin.mff.cuni.cz/icons/next_motif.gif"; $iconprev="http://www.karlin.mff.cuni.cz/icons/previous_motif.gif"; $iconup="http://www.karlin.mff.cuni.cz/icons/up_motif.gif"; $iconnextgr="http://www.karlin.mff.cuni.cz/icons/next_motif_gr.gif"; $iconprevgr="http://www.karlin.mff.cuni.cz/icons/previous_motif_gr.gif"; #$iconupgr="http://www.karlin.mff.cuni.cz/icons/up_motif_gr.gif"; $img1=''; if ($oneline && $giflink ) {print "\n -oneline a -giflink jsou neslucitelne\n"} if ($pagelist eq 'auto') {if ($pages <15) {$pagelist='full'} else {$pagelist='short'} } if ($nobg) { $gifbody= ''} else {$gifbody= ' '."\n" } if ($allinone eq 'auto') {if (-e "$base.all.html") {$allinone=1} else {$allinone=0} }; if ($lang eq 'cz') { $allinonetext="\n vsechny strany\n"} else {$allinonetext="\n all pages\n"} if ($title eq '') { $title1=$htmlbase; $title2=$dvifile; } else {$title1=$title; $title2=$title;} if (($uplink eq '') && ($uplinktext ne '')) { print "\nvarovani: -uplink nespecifikovano, predpokladam index.html\n"; $uplink='-'; # hned predelam } if (($uplink eq '-') || ($uplink eq '.')) { $uplink='index.html';} if (($uplink ne '') && ($uplinktext eq '')) { $uplinktext= "$img1$iconup$img2"; } if ($uplink ne '') { $uplinkstring= "$uplinktext\n "; } if ($oneline) {$strsp='';} else {$strsp=' ';} print <$index"); $tmpfile='tmp'.$$.'.'.time(); if ($gifs) { $dvips="dvips"; $pstogif="pstogif.margin"; $dviselect="dviselect"; # workarround kdyz nebyly pixmapy na ajnstajnovi # chop($workingdir=`pwd`);$bekslese = "\\\\\\;" ; # \\\; # print STDERR "\n\n Pozor: pstogif @ ajnstajn!csmat oklika !!!!!\n\n\n"; # $pstogif="rsh ajnstajn rsh csmat setenv PATH $ENV{PATH} $bekslese". # " cd $workingdir $bekslese pstogif.margin"; # print "$pstogif\n"; } else { $dvips="true"; # snad nijak nereaguje na parametry a nedela nic $pstogif="true"; $dviselect="true"; } if ( $pages == 1 ) { #------------ jedna stranka $i=1; # pozor, je pouzito #no dviselect needed `$dvips $dvipsopt $dvifile -o $tmpfile.ps`; ## pstogif.nocrop tmp.ps "$base.$i.gif" # pstogif tmp.ps "$base.$i.gif" `$pstogif $bppopt $density $tmpfile.ps $base.gif`; if (! -e "$base.gif") { print STDERR "ERROR: $base.gif not created !\n";} print INDEX ''."\n"; print INDEX "$title1$gifbody\n"; print INDEX $uplinkstring; if ($dvilink) { print INDEX "$dvifile\n"; } if ($texlink) { print INDEX "$base.tex\n"; } if ($pdflink) { print INDEX "$base.pdf\n"; } if ($pslink) { print INDEX "$base.ps\n"; } print INDEX "

\n"; print INDEX " \n"; print INDEX "\n"; unlink "$tmpfile.ps"; print <'."\n"; print INDEX "$title1$gifbody\n"; print INDEX $uplinkstring; print INDEX "

$title2

 \n";
    if ($dvilink) { 
	print INDEX "$dvifile\n"; 
    }
    if ($texlink) { 
	print INDEX "$base.tex\n"; 
    }
    if ($pslink) { 
	print INDEX "$base.ps\n"; 
	}
    if ($pdflink) { 
	print INDEX "$base.pdf\n"; 
	}
#    print INDEX "

"; if ($allinone) { open(ALLINDEX,">$allindex"); print ALLINDEX ''."\n"; print ALLINDEX "$title1$gifbody\n". "

$title2

\n"; } else { unlink $allindex; } `$dvips $dvipsopt $dvifile -i -S1 -o $tmpfile.xxx`; # warn "tady je to spatne, tohle nefunguje s nogifs !!!"; # while ( <${tmpfile}.*> ) { # ($iii) = /\.([^\.]*)$/; # $i = $iii+0; for ($i=1; $i <= $pages; $i++) { $iii=('000'..'999')[$i+$[]; print "{$i} [$pgnum[$i]] "; open(PAGE,">$base.$i.html"); # `$dviselect -i $dvifile -o $tmpfile.dvi =$i:$i`; # `$dvips $dvipsopt $tmpfile.dvi -o $tmpfile.ps`; ## pstogif.nocrop tmp.ps "$base.$i.gif" # pstogif tmp.ps "$base.$i.gif" rename("$tmpfile.$iii", "$tmpfile.ps"); #nebo upravit pstogif.margin `$pstogif $bppopt $density $tmpfile.ps $base.$i.gif`; unlink "$tmpfile.ps"; if (defined($pgdesc[$i])) { print INDEX "$stranadesc$pgdesc[$i]: "; } print INDEX "$strana$strsp" ."$pgnum[$i]$strsp$stranaend "; if ($giflink) { print INDEX " ($i.gif)
"; } $inext = $i + 1; $iprev = $i - 1; # if ($i == 1) then # $iprev=1 # $icprev=$iconprevgr # $icnext=$iconnext # else if ($i == $pages) then # $inext=$i # $icprev=$iconprev # $icnext=$iconnextgr # else # $icprev=$iconprev # $icnext=$iconnext # endif print PAGE ''."\n"; print PAGE "$title1 (page $i) $gifbody\n"; if ($i == $pages) { print PAGE "$img1$iconnextgr$img2"; } else { print PAGE "$img1$iconnext$img2"; } # print PAGE "\n $img1$iconup$img2\n "; if ($i == 1) { print PAGE "$img1$iconprevgr$img2"; } else { print PAGE "$img1$iconprev$img2"; } if ($pagelist) { print PAGE &makepagelistline("$htmlbase.",".html",$pagelist,$i); } if ($allinone) { print ALLINDEX "
". "$pgnum[$i]". "   "; print ALLINDEX &makepagelistline("#page","",$pagelist,$i); print ALLINDEX "\n
"; print ALLINDEX "\n\n"; # } print PAGE "\n

"; if ($i != $pages) { print PAGE "
$img1$iconnext$img2
\n"; } print PAGE "\n"; close PAGE; # unlink "$tmpfile.dvi"; # unlink "$tmpfile.ps"; } # while $i if ($allinone) { print ALLINDEX ""; print INDEX $allinonetext; } print INDEX &creationdata('html'); print < $ENV{"USER"} \@ $hostx, $date$dpitext
(dvi2html $ver by kolar \@ karlin. mff. cuni. cz)
konec if ($param ne 'html') { $creatdata =~ s/<[^>]*>//g; } return $creatdata; } __END__ # taky by slo pouzivat misto pre #
#
polozka #
dalsi #
# ale nemohl bych dva sloupce ---------------------------------------------------------------------------- From: Leonid Pryadko Subject: Re: dvi2html... (fwd) To: kolar@karlin.mff.cuni.cz (Jan Kolar) Date: Sun, 1 Feb 1998 14:22:08 -0800 (PST) Even without the superuser privileges, it is possible to get dvips to generate PS at any resolution. In my .cshrc file I set the following variables TEXINPUTS=.:~/lib/texmf/texinput: BIBINPUTS=.:~/lib/texmf/bibinput: TEXCONFIG=.:~/lib/texmf/ps: MFINPUTS=.:~/lib/texmf/mfinput: and put the file "config.120" in directory ~/lib/texmf/ps %%%--- cut here --------------- file config.120 -------------------- % configuration for the screen resolution % Memory available. m 200000 % How to print. o % Default resolution. D 120 % Metafont mode. M OneTwoZero % Also look for this list of resolutions. R 300 600 % The printer offsets the output by this much. O 0pt,0pt % With this resolution and a RISC cpu, better to compress the bitmaps. %Z %%%--- cut here ----------------------------------------------------- Here, OneTwoZero is the metafont mode for font generation which appears to be one of the standard modes; it should work Ok. Instead, you may want to generate the postscript at higher resolution and then scale it down with one of the newer versions of ghostscript (as a result you will get grayscaled bitmap which look much neater). Hope it helps, Leonid > > > Dear Mr. Pryadko > > > I created script for convert dvi to html, simillar to your. > Today I received mail from somebody who tried your's script > and had obviously problem with dvips -P120 which can not > work on other unix-boxes. I told him to remove the option > (ofcourse the result will not be the same). > > (If you would like to know about my version of dvi2html: > http://www.karlin.mff.cuni.cz/~kolar/dvi2html.ang.html > I do not work with graphics in so good way as you > but I have some stuff around. ) > > > Best Regards > Jan Kolar > > > > > > > > Hi, > > > > I dowloaded the csh script dvi2html... I tried to translate a dvi file but it > > only generates a ps file witout translating it in html file... > > > > > > Here is the result: > > > > neptune% dvi2html ter.dvi > > This is dvi2html. > > Usage: dvi2html dvi-file "the text of the title" "the full date" > > This is dvipsk 5.55a Copyright 1986, 1994 Radical Eye Software > > ' TeX output 1997.11.20:0902' -> ter.ps > > . [1] [2] [3] > > dvips: \! no config file for printer `120' in path `.:/home/minf11' > > foreach: No match > > neptune% > > > > > > Best regards, > > Samuel > > > >