diff --git a/dblatex-cvs-install/share/dblatex/scripts/texclean b/dblatex-cvs-install/share/dblatex/scripts/texclean index f1dfe49..e481a75 100755 --- a/dblatex-cvs-install/share/dblatex/scripts/texclean +++ b/dblatex-cvs-install/share/dblatex/scripts/texclean @@ -1,824 +1,824 @@ #!/usr/bin/env perl eval 'exec /usr/bin/env perl -S $0 ${1+"$@"}' if $running_under_some_shell; use File::Basename; use Getopt::Std; # # Formattage des tableaux, pour gérer les cellules sur plusieurs lignes # use table; # $row = ""; @mrows = (); @sizes = (); @aligs = (); $nbcols = 0; $force_hyphen = 1; $istable = 0; $tblparse = 0; # # Table header parsed to know the column sizes and alignments # sub prepare_table { local($line) = $_[0]; my $i = 0; my @a = (); - @a = split(/(p{[^}]*})/, $line); + @a = split(/(p\{[^}]*})/, $line); foreach (@a) { - if (/p{/) { - ($sizes[$i] = $_) =~ s/p{(.*)}/$1/; + if (/p\{/) { + ($sizes[$i] = $_) =~ s/p\{(.*)}/$1/; $i++; } else { ($aligs[$i] = $_) =~ s/.*{(.[^}]*)}$/$1/; } } $nbcols = $i; } sub hline2cline { local($row) = $_[0]; local($ncols) = $_[1]; my $i; my $first = 1; my $last = 1; my $pl = ""; my $bord = 0; my $prow = ""; my $erow = ""; my @u; $row =~ s/\\hline//; $row =~ s/\\tabularnewline//; @u = split("", $row); if ($#u > 0) { $prow = $u[0]; $prow .= "\\hline"; $row = $u[1]; } @u = split("", $row); if ($#u > 0) { $row = $u[0]; $erow = "\\tabularnewline"; $erow .= $u[1]; } # dump_mrows($ncols); for($i = 0; $i < $ncols; $i++) { # print $to "mr($i)=".$mrows[$i]; if ($mrows[$i] <= 0) { # on mémorise la ligne à tracer $bord = 1; $last = $i+1; } else { # on trace la ligne jusqu'à cette cellule if ($bord) { $pl = "$pl\\cline{$first-$last}"; $bord = 0; } $first = $i+2; } } if ($bord && (($first != 1) || ($last != $ncols))) { $pl = "$pl\\cline{$first-$last}"; } if ($pl ne "") { $prow =~ s/\\hline/$pl/; } return ($prow, $row, $erow); } # # Main parsing table routine. The principle is to process each table row # when rows are complete (a row can cover several lines). # sub table_parse { local($line) = $_[0]; local($to) = $_[1]; my $i, $pos; my @columns = (); if (/%%% parse_table/) { # note that the following table will need to be parsed $tblparse = 1; # print "Parsing table\n"; } - if (/begin{longtable}/) { + if (/begin\{longtable}/) { $istable = 1; if ($tblparse) { prepare_table($_); } } if (not($istable)) { print $to $line; return; } - if (/end{longtable}/) { + if (/end\{longtable}/) { # # table ends, flush the current row # print $to "$row$line"; $istable = 0; $tblparse = 0; $row = ""; $nbcols = 0; return; } # if no parsing, just print the line if (not($tblparse)) { print $to $line; return; } # # when parsing, only process a complete row # $row = "$row$line"; if (not(/\\tabularnewline/)) { return; } # # for the previous row, print borders (depends on pending multirow cells) # ($brow, $row, $erow) = hline2cline($row, $nbcols); @columns = split('&', $row); $nbcols = ($#columns > $nbcols) ? $#columns : $nbcols; # # for each column, for the current row: # - insert the empty cells due to pending mrow cells, # - update the pending mrow cells count, # - setup the new pending mrow cells, # - print the "multirow" cells # print $to $brow; for ($i=0, $pos=0; $pos<$nbcols; $pos++) { $c = $columns[$i]; if ($mrows[$pos] > 0) { # # insert an empty cell, and update the pending mrow cells for this # column. # print $to " & "; $mrows[$pos] --; } elsif ($i > $#columns) { # print the missing ending cells print $to " & "; } else { # shift to the real position if ($c =~ /%]*).*\n/$1/; $rpos -= 1; # skip the info $c =~ s/%%\n//; while ($rpos > $pos) { print $to " & "; $pos++; if ($mrows[$pos] > 0) { $mrows[$pos] --; } } } if ($c =~ /multirow/) { # set the pending mrows cells count $mrows[$pos] = $c; $mrows[$pos] =~ s/\n//g; - $mrows[$pos] =~ s/.*multirow{([^}]*)}.*/$1/; + $mrows[$pos] =~ s/.*multirow\{([^}]*)}.*/$1/; $mrows[$pos] -= 1; # # set the column size and its alignment (which is lost by # multirow that aligns to left by default) # $s = $sizes[$pos]; $a = $aligs[$pos]; - $c =~ s/\*{/{$s}{$a /; + $c =~ s/\*\{/{$s}{$a /; # macro to use instead of multirow, to be compatible with \tsize $c =~ s/multirow/mrow/; } # shift the multicolums if ($c =~ /multicolumn/) { $mcols = $c; $mcols =~ s/\n//g; - $mcols =~ s/.*multicolumn{([^}]*)}.*/$1/g; + $mcols =~ s/.*multicolumn\{([^}]*)}.*/$1/g; $pos += ($mcols - 1); } print $to $c; if ($i < $#columns) { # print the separator print $to " & "; } $i ++; } } print $to $erow; $row = ""; } $keyon = '\\\\xt'; $keyoff = '/xt'; # Known embedded commands $do_hyphen = 0; sub command_update { local($line) = $_[0]; my $cmd; if ($line =~ /%% texclean\(/) { ($cmd = $line) =~ s/.*texclean\(([^\)]*)\).*\n/$1/; if ($cmd eq "hyphenon") { $do_hyphen = 1; } elsif ($cmd eq "hyphenoff") { $do_hyphen = 0; } } } sub translate { local($line) = $_[0]; my $hyphenize = 0; if (($istable && $force_hyphen) || $do_hyphen) { $hyphenize = 1; } if ($hyphenize) { # Two passes, to cut every letter (not every two letters) $line =~ s/([^ 0-9~&#\t])([^ 0-9~&#\t\n])/$1$2/g; $line =~ s/([^ 0-9~&#\t])([^ 0-9~&#\t\n])/$1$2/g; } $line =~ s/^[\s\n]*$/ /g; $line =~ s/\\\\\ \ \ /dbackslash/g; $line =~ s/\\\\/gotothenextline/g; $line =~ s/\\/\\textbackslash/g; $line =~ s/_/\\_/g; $line =~ s/{/\\{/g; $line =~ s/}/\\}/g; $line =~ s/~/\\texttildelow{}/g; $line =~ s/%/\\%/g; $line =~ s/\^/\\\^{}/g; $line =~ s/\$/\\\$/g; $line =~ s/\"/\\textacutedbl{}/g; $line =~ s/а̂/\\\^{\\cyra}/g; $line =~ s/а̑/\\textroundcap{\\cyra}/g; $line =~ s/е̑/\\textroundcap{\\cyre}/g; $line =~ s/о̑/\\textroundcap{\\cyro}/g; $line =~ s/і̑/\\textroundcap{\\cyrii}/g; $line =~ s/Ą/\\k{A}/g; $line =~ s/ą/\\k{a}/g; $line =~ s/Ć/\\'{C}/g; $line =~ s/ć/\\'{c}/g; $line =~ s/Č/\\v{C}/g; $line =~ s/č/\\v{c}/g; $line =~ s/Ď/\\v{D}/g; $line =~ s/ď/\\v{d}/g; $line =~ s/Ė/\\.{E}/g; $line =~ s/ė/\\.{e}/g; $line =~ s/Ę/\\k{E}/g; $line =~ s/ę/\\k{e}/g; $line =~ s/Ě/\\v{E}/g; $line =~ s/ě/\\v{e}/g; $line =~ s/Ğ/\\u{G}/g; $line =~ s/ğ/\\u{g}/g; $line =~ s/Į/\\k{I}/g; $line =~ s/į/\\k{i}/g; $line =~ s/İ/\\.{I}/g; $line =~ s/ı/\\i{}/g; $line =~ s/Ł/\\L{}/g; $line =~ s/ł/\\l{}/g; $line =~ s/Ń/\\'{N}/g; $line =~ s/ń/\\'{n}/g; $line =~ s/Ň/\\v{N}/g; $line =~ s/ň/\\v{n}/g; $line =~ s/Ő/\\H{O}/g; $line =~ s/ő/\\H{o}/g; $line =~ s/œ/\\oe{}/g; $line =~ s/Ř/\\v{R}/g; $line =~ s/ř/\\v{r}/g; $line =~ s/Ś/\\'{S}/g; $line =~ s/ś/\\'{s}/g; $line =~ s/Ş/\\c{S}/g; $line =~ s/ş/\\c{s}/g; $line =~ s/Š/\\v{S}/g; $line =~ s/š/\\v{s}/g; $line =~ s/ţ/\\c{t}/g; $line =~ s/Ť/\\v{T}/g; $line =~ s/ť/\\v{t}/g; $line =~ s/Ū/\\={U}/g; $line =~ s/ū/\\={u}/g; $line =~ s/ů/\\r{u}/g; $line =~ s/Ű/\\H{U}/g; $line =~ s/ű/\\H{u}/g; $line =~ s/Ų/\\k{U}/g; $line =~ s/ų/\\k{u}/g; $line =~ s/Ź/\\'{Z}/g; $line =~ s/ź/\\'{z}/g; $line =~ s/Ż/\\.{Z}/g; $line =~ s/ż/\\.{z}/g; $line =~ s/Ž/\\v{Z}/g; $line =~ s/ž/\\v{z}/g; $line =~ s/ʸ/\$\^\\textrm{y}\$/g; $line =~ s/ʼ/\'/g; $line =~ s/˜/\\textasciitilde{}/g; $line =~ s/Ά/\\textgreek{'A}/g; $line =~ s/·/\\textgreek{;}/g; $line =~ s/Έ/\\textgreek{'E}/g; $line =~ s/Ή/\\textgreek{'H}/g; $line =~ s/Ί/\\textgreek{'I}/g; $line =~ s/Ό/\\textgreek{'O}/g; $line =~ s/ΐ/\\textgreek{\\char242}/g; $line =~ s/Α/\\textAlpha{}/g; $line =~ s/Β/\\textBeta{}/g; $line =~ s/Γ/\\textGamma{}/g; $line =~ s/Δ/\\textDelta{}/g; $line =~ s/Ε/\\textEpsilon{}/g; $line =~ s/Ζ/\\textZeta{}/g; $line =~ s/Η/\\textEta{}/g; $line =~ s/Θ/\\textTheta{}/g; $line =~ s/Ι/\\textIota{}/g; $line =~ s/Κ/\\textKappa{}/g; $line =~ s/Λ/\\textLambda{}/g; $line =~ s/Μ/\\textMu{}/g; $line =~ s/Ν/\\textNu{}/g; $line =~ s/Ξ/\\textXi{}/g; $line =~ s/Ο/\\textOmikron{}/g; $line =~ s/Π/\\textPi{}/g; $line =~ s/Ρ/\\textRho{}/g; $line =~ s/Σ/\\textSigma{}/g; $line =~ s/Τ/\\textTau{}/g; $line =~ s/Υ/\\textUpsilon{}/g; $line =~ s/Φ/\\textPhi{}/g; $line =~ s/Χ/\\textChi{}/g; $line =~ s/Ψ/\\textPsi{}/g; $line =~ s/Ω/\\textOmega{}/g; $line =~ s/Ϊ/\\textgreek{a}/g; $line =~ s/Ϋ/\\textgreek{b}/g; $line =~ s/ά/\\textgreek{'a}/g; $line =~ s/έ/\\textgreek{'e}/g; $line =~ s/ή/\\textgreek{'h}/g; $line =~ s/ί/\\textgreek{'i}/g; $line =~ s/ΰ/\\textgreek{'"u}/g; $line =~ s/α/\\textalpha{}/g; $line =~ s/β/\\textbeta{}/g; $line =~ s/γ/\\textgamma{}/g; $line =~ s/δ/\\textdelta{}/g; $line =~ s/ε/\\textepsilon{}/g; $line =~ s/ζ/\\textzeta{}/g; $line =~ s/η/\\texteta{}/g; $line =~ s/θ/\\texttheta{}/g; $line =~ s/ι/\\textiota{}/g; $line =~ s/κ/\\textkappa{}/g; $line =~ s/λ/\\textlambda{}/g; $line =~ s/μ/\\textmugreek{}/g; $line =~ s/ν/\\textnu{}/g; $line =~ s/ξ/\\textxi{}/g; $line =~ s/ο/\\textomikron{}/g; $line =~ s/π/\\textpi{}/g; $line =~ s/ρ/\\textrho{}/g; $line =~ s/ς/\\textvarsigma{}/g; $line =~ s/σ/\\textsigma{}/g; $line =~ s/τ/\\texttau{}/g; $line =~ s/υ/\\textupsilon{}/g; $line =~ s/φ/\\textphi{}/g; $line =~ s/χ/\\textchi{}/g; $line =~ s/ψ/\\textpsi{}/g; $line =~ s/ω/\\textomega{}/g; $line =~ s/ϊ/\\textgreek{"i}/g; $line =~ s/ϋ/\\textgreek{"u}/g; $line =~ s/ό/\\textgreek{'o}/g; $line =~ s/ύ/\\textgreek{'u}/g; $line =~ s/ώ/\\textgreek{'w}/g; $line =~ s/Ѐ/\\`{\\CYRE}/g; $line =~ s/Ё/\\CYRYO{}/g; $line =~ s/Ђ/\\CYRDJE{}/g; $line =~ s/Ѓ/\\'{\\CYRG}/g; $line =~ s/Є/\\CYRIE{}/g; $line =~ s/Ѕ/S{}/g; $line =~ s/І/\\CYRII{}/g; $line =~ s/Ї/\\CYRYI{}/g; $line =~ s/Ј/\\CYRJE{}/g; $line =~ s/Љ/\\CYRLJE{}/g; $line =~ s/Њ/\\CYRNJE{}/g; $line =~ s/Ћ/\\CYRTSHE{}/g; $line =~ s/Ќ/\\'{\\CYRK}/g; $line =~ s/Ѝ/\\'{\\CYRI}/g; $line =~ s/Ў/\\CYRUSHRT{}/g; $line =~ s/Џ/\\CYRDZHE{}/g; $line =~ s/А/\\CYRA{}/g; $line =~ s/Б/\\CYRB{}/g; $line =~ s/В/\\CYRV{}/g; $line =~ s/Г/\\CYRG{}/g; $line =~ s/Д/\\CYRD{}/g; $line =~ s/Е/\\CYRE{}/g; $line =~ s/Ж/\\CYRZH{}/g; $line =~ s/З/\\CYRZ{}/g; $line =~ s/И/\\CYRI{}/g; $line =~ s/Й/\\CYRISHRT{}/g; $line =~ s/К/\\CYRK{}/g; $line =~ s/Л/\\CYRL{}/g; $line =~ s/М/\\CYRM{}/g; $line =~ s/Н/\\CYRN{}/g; $line =~ s/О/\\CYRO{}/g; $line =~ s/П/\\CYRP{}/g; $line =~ s/Р/\\CYRR{}/g; $line =~ s/С/\\CYRS{}/g; $line =~ s/Т/\\CYRT{}/g; $line =~ s/У/\\CYRU{}/g; $line =~ s/Ф/\\CYRF{}/g; $line =~ s/Х/\\CYRH{}/g; $line =~ s/Ц/\\CYRC{}/g; $line =~ s/Ч/\\CYRCH{}/g; $line =~ s/Ш/\\CYRSH{}/g; $line =~ s/Щ/\\CYRSHCH{}/g; $line =~ s/Ъ/\\CYRHRDSN{}/g; $line =~ s/Ы/\\CYRERY{}/g; $line =~ s/Ь/\\CYRSFTSN{}/g; $line =~ s/Э/\\CYREREV{}/g; $line =~ s/Ю/\\CYRYU{}/g; $line =~ s/Я/\\CYRYA{}/g; $line =~ s/а/\\cyra{}/g; $line =~ s/б/\\cyrb{}/g; $line =~ s/в/\\cyrv{}/g; $line =~ s/г/\\cyrg{}/g; $line =~ s/д/\\cyrd{}/g; $line =~ s/е/\\cyre{}/g; $line =~ s/ж/\\cyrzh{}/g; $line =~ s/з/\\cyrz{}/g; $line =~ s/и/\\cyri{}/g; $line =~ s/й/\\cyrishrt{}/g; $line =~ s/к/\\cyrk{}/g; $line =~ s/л/\\cyrl{}/g; $line =~ s/м/\\cyrm{}/g; $line =~ s/н/\\cyrn{}/g; $line =~ s/о/\\cyro{}/g; $line =~ s/п/\\cyrp{}/g; $line =~ s/р/\\cyrr{}/g; $line =~ s/с/\\cyrs{}/g; $line =~ s/т/\\cyrt{}/g; $line =~ s/у/\\cyru{}/g; $line =~ s/ф/\\cyrf{}/g; $line =~ s/х/\\cyrh{}/g; $line =~ s/ц/\\cyrc{}/g; $line =~ s/ч/\\cyrch{}/g; $line =~ s/ш/\\cyrsh{}/g; $line =~ s/щ/\\cyrshch{}/g; $line =~ s/ъ/\\cyrhrdsn{}/g; $line =~ s/ы/\\cyrery{}/g; $line =~ s/ь/\\cyrsftsn{}/g; $line =~ s/э/\\cyrerev{}/g; $line =~ s/ю/\\cyryu{}/g; $line =~ s/я/\\cyrya{}/g; $line =~ s/ѐ/\\`{\\cyre}/g; $line =~ s/ё/\\cyryo{}/g; $line =~ s/ђ/\\cyrdje{}/g; $line =~ s/ѓ/\\'{cyrg}/g; $line =~ s/є/\\cyrie{}/g; $line =~ s/ѕ/s{}/g; $line =~ s/і/\\cyrii{}/g; $line =~ s/ї/\\cyryi{}/g; $line =~ s/ј/\\cyrje{}/g; $line =~ s/љ/\\cyrlje{}/g; $line =~ s/њ/\\cyrnje{}/g; $line =~ s/ћ/\\cyrtshe{}/g; $line =~ s/ќ/\\'{cyrk}/g; $line =~ s/ѝ/\\`{cyri}/g; $line =~ s/ў/\\cyrushrt{}/g; $line =~ s/џ/\\cyrdzhe{}/g; $line =~ s/Ґ/\\CYRGUP{}/g; $line =~ s/ґ/\\cyrgup{}/g; $line =~ s/ሴ/ju\\'{e}/g; $line =~ s/‑/-/g; $line =~ s/–/\\textendash{}/g; $line =~ s/—/\\textemdash{}/g; $line =~ s/‘/`/g; $line =~ s/’/\'/g; $line =~ s/“/{}``/g; $line =~ s/”/{}''/g; $line =~ s/„/\\quotedblbase{}/g; $line =~ s/€/\\texteuro{}/g; $line =~ s/∛/\$\\sqrt\[3\]{}\$/g; $line =~ s/∞/\$\\infty{}\$/g; $line =~ s/∫/\$\\int{}\$/g; $line =~ s/⋅/\\textperiodcentered{}/g; $line =~ s/˜/\\textasciitilde{}/g; $line =~ s/–/\\textendash{}/g; $line =~ s/—/\\textemdash{}/g; $line =~ s/“/{}``/g; $line =~ s/”/{}''/g; $line =~ s/←/\$\\leftarrow\$/g; $line =~ s/↑/\$\\uparrow\$/g; $line =~ s/→/\$\\rightarrow\$/g; $line =~ s/↓/\$\\downarrow\$/g; $line =~ s/−/\$-\$/g; $line =~ s/√/\$\\sqrt{}\$/g; $line =~ s/≠/\$\\neq\$/g; $line =~ s/≤/\$\\leq\$/g; $line =~ s/≥/\$\\geq\$/g; $line =~ s/⌈/\$\\lceil\$/g; $line =~ s/⌉/\$\\rceil\$/g; $line =~ s/⌊/\$\\lfloor\$/g; $line =~ s/⌋/\$\\rfloor\$/g; $line =~ s/─/{}---{}\$/g; $line =~ s/▮/\\rule{.5em}{10pt}/g; $line =~ s/✩/\$\\star\$/g; $line =~ s/⨯/\$\\times\$/g; $line =~ s/べ/\ narabe\ /g; $line =~ s/並/ku/g; $line =~ s/五/go/g; $line =~ s/將/ji\\={a}ng/g; $line =~ s/目/mo/g; $line =~ s/麻/m\\'{a}/g; $line =~ s/ff/ff/g; $line =~ s/fi/fi/g; $line =~ s/fl/fl/g; $line =~ s/ffi/ffi/g; $line =~ s/ffl/ffl/g; $line =~ s/ſt/ft/g; $line =~ s/&/\\&/g; $line =~ s/#/\\#/g; $line =~ s/µ/\$\\mu\$/g; $line =~ s/á/\\'{a}/g; $line =~ s/\240/~/g; $line =~ s/\\textbackslash/\\textbackslash{}/g; $line =~ s/\327/\$\\times\$/g; $line =~ s/°/\\ensuremath{°}/g; $line =~ s/-/-{}/g; $line =~ s/±/\$\\pm\$/g; $line =~ s/²/\\texttwosuperior{}/g; $line =~ s/³/\\textthreesuperior{}/g; $line =~ s/÷/\$\\div\$/g; $line =~ s/£/\\pounds{}/g; $line =~ s/¥/\\textyen{}/g; $line =~ s/\ >\ /\ \$>\$\ /g; $line =~ s/\ <\ /\ \$<\$\ /g; # $line =~ s/>>/\$\\gg\$/g; # $line =~ s/</\\-/g; } return $line; } $figcount = 0; %figdone = (); sub eps2xxx { local($in) = $_[0]; local($out) = $_[1]; local($format) = $_[2]; my $action = ""; for ($format) { /pdf/ && do { $action = "epstopdf --outfile=$out $in"; last; }; /png/ && do { $action = "convert $in $out"; last; }; } return $action; } sub gif2xxx { local($in) = $_[0]; local($out) = $_[1]; local($format) = $_[2]; my $action = "convert $in $out"; return $action; } sub scanformat { my $f = $_[0]; my @formats = (); my $ext = ""; # Is there a suffix? ($file,$p,$ext) = fileparse($f, '\..*'); # The prefered format depends on the expected output if ($figout eq "eps") { @formats = (".eps", ".fig", ".pdf", ".png", "gif", ""); } else { @formats = (".pdf", ".png", ".eps", "gif", ".fig", ""); } if ($ext ne "") { $fig = $f; if (not(-f $fig)) { $fig = "$path/$fig"; } } else { print "Fig format scanning... "; # Look for the missing format LOOKUP: { foreach $e (@formats) { $ext = $e; if (-f "$f$ext") { $fig = "$f$ext"; last LOOKUP; } elsif (-f "$path/$f$ext") { $fig = "$path/$f$ext"; last LOOKUP; } } } print "found $ext\n"; } $ext =~ s/\.//; return ($fig, $ext); } sub figconvert { local($line) = $_[0]; my $dofig = ""; my $figcmd = ""; # Is there a graphic included here if (/\\includegraphics[\[{]/) { $figcmd = "\\includegraphics" ; - } elsif (/\\begin{overpic}/) { + } elsif (/\\begin\{overpic}/) { $figcmd = "\\begin{overpic}" ; - } elsif (/\\imgexists{/) { + } elsif (/\\imgexists\{/) { $figcmd = "\\imgexists" ; } else { return $line; } ($f = $line) =~ s/.*$figcmd[^{]*{([^}]*)}.*\n/$1/; # Get the full filename and the suffix ($fig, $ext) = scanformat($f); # If no suffix, use the default one if ($ext eq "") { print "Use default figure format\n"; $ext = $figin; } # Check if this figure has been already converted if (exists $figdone{"$fig"}) { $newfig = $figdone{"$fig"}; print "already done with $newfig\n"; $line =~ s/$f/$newfig/g; # Convert the figure } elsif (-f $fig) { $fig2dev = $ext."2".$figout; $newfig = "fig".$figcount++.".$figout"; for ($fig2dev) { /fig2eps/ && do{ $dofig = "fig2dev -L $figout $fig > $newfig"; last; }; (/fig2pdf/ || /fig2png/) && do{ $dofig = "fig2dev -L eps $fig > tmp_fig.eps"; $dofig .= "; ".eps2xxx("tmp_fig.eps", $newfig, $figout); last; }; /eps2pdf/ && do{ $dofig = eps2xxx($fig, $newfig, $figout); last; }; /gif2/ && do{ $dofig = gif2xxx($fig, $newfig, $figout); last; }; } if ($dofig ne "") { $figdone{"$fig"} = $newfig; print "$dofig\n"; system("$dofig"); $line =~ s/$f/$newfig/g; } } return $line } sub parse_inlined { local($line) = $_[0]; my @texts = split("$keyon ", $line); my $mode = 0; my $nline = ""; my $l; for ($i = 0; $i <= $#texts; $i++) { $l = $texts[$i]; @blks = split("$keyoff ", $l); # Cas particulier du dernier /xt à enlever, qui est sans espace if ($#blks == 0) { @blks = split($keyoff, $l); } if ($i > 0) { $mode = 1; } # Seule la première partie est à convertir if ($mode == 1) { $blks[0] = translate($blks[0]); } $nline = "$nline$blks[0]"; if ($#blks > 0) { $mode = 0; $nline = "$nline$blks[1]"; } } return $nline; } sub parse_sgml { local($rawtex) = $_[0]; local($cleantex) = $_[1]; my $mode = 0; my $line = ""; my $file = ""; my $RTEX = "f$rawtex"; my $CTEX = "f$cleantex"; print "$rawtex -> $cleantex\n"; if (-f $cleantex) { # print "***Warning: $cleantex already exists\n"; system("mv $cleantex $cleantex~"); } open($RTEX, "<$rawtex") || die "Cannot open $rawtex\n"; open($CTEX, ">$cleantex") || die "Cannot open $cleantex\n"; while (<$RTEX>) { $line = $_; # Convert the figures if needed $line = figconvert($line) if ($figout ne ""); # Update the embedded commands command_update($line); if (/$keyon\n/) { $line =~ s/$keyon\n//; $mode = 1; chomp $line; } elsif ($mode == 1) { $line =~ s/$keyoff//; $line = translate($line); } if (/$keyoff\n/) { $line =~ s/$keyoff//; $mode = 0; chomp $line; } elsif (/$keyon /) { # More tricky, 'xt' is in the line $line = parse_inlined($line); } table_parse($line, $CTEX); } close($RTEX); close($CTEX); } $backend = "dvips"; getopts("f:p:b:"); if ($opt_b) { $backend = $opt_b; } # Default input figure format if ($opt_f) { $figin = $opt_f; } if ($opt_p) { $path = $opt_p; } # The expected output figure format depends on the backend driver for ($backend) { /dvips/ && do{ $figout = "eps"; last; }; /pdftex/ && do{ $figout = "pdf"; last; }; /none/ && do{ $figout = ""; last }; } $rawtex = $ARGV[0]; $cleantex = basename($rawtex, '.tex'); $cleantex = dirname($rawtex). "/${cleantex}_c.tex"; shift; if (@ARGV) { $cleantex = $ARGV[0]; } parse_sgml($rawtex, $cleantex, 0);