Herbert's graphics diff

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@4423 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
John Levon 2002-06-18 20:47:49 +00:00
parent 84bbe81f3d
commit 481937ef95
15 changed files with 313 additions and 324 deletions

View File

@ -1,3 +1,10 @@
2002-06-17 Herbert Voss <voss@perce.de>
* configure.m4: install only those converters which are different
to convert, because this is taken as the default. SO we can get
rid of all problems when user do not have installed the right
converters.
2002-06-16 Adrien Rebollo <adrien.rebollo@gmx.fr>
* examples/fr_ExemplesTableaux.lyx: update

View File

@ -352,67 +352,6 @@ case $TOHTML in
hevea) latex_to_html_command="hevea -s \$\$i";;
esac
#### Search for image conversion ####
SEARCH_PROG([for an Image -> EPS converter], TOEPS, convert pnmtops)
case $TOEPS in
convert)
bmp_to_eps="convert BMP:\$\$i EPS:\$\$o"
fits_to_eps="convert FITS:\$\$i EPS:\$\$o"
gif_to_eps="convert GIF:\$\$i EPS:\$\$o"
jpg_to_eps="convert JPG:\$\$i EPS:\$\$o"
pbm_to_eps="convert PBM:\$\$i EPS:\$\$o"
pgm_to_eps="convert PGM:\$\$i EPS:\$\$o"
png_to_eps="convert PNG:\$\$i EPS:\$\$o"
ppm_to_eps="convert PPM:\$\$i EPS:\$\$o"
sgi_to_eps="convert SGI:\$\$i EPS:\$\$o"
xbm_to_eps="convert XBM:\$\$i EPS:\$\$o"
xwd_to_eps="convert XWD:\$\$i EPS:\$\$o"
xpm_to_eps="convert XPM:\$\$i EPS:\$\$o" ;;
pnmtops) gif_to_eps="giftopnm \$\$i | pnmtops > \$\$o"
png_to_eps="pngtopnm \$\$i | pnmtops >\$\$o"
jpg_to_eps="jpegtopnm \$\$i | pnmtops >\$\$o";;
esac
SEARCH_PROG([for an Image -> PNG converter], TOPNG, convert pnmtopng)
case $TOPNG in
convert)
gif_to_png="convert GIF:\$\$i PNG:\$\$o"
eps_to_png="convert EPS:\$\$i PNG:\$\$o"
jpg_to_png="convert JPG:\$\$i PNG:\$\$o";;
pnmtopng)
gif_to_png="giftopnm \$\$i | pnmtopng >\$\$o"
eps_to_png="pstopnm \$\$i| pnmtopng >\$\$o"
jpg_to_png="jpegtopnm \$\$i | pnmtopng >\$\$o";;
esac
SEARCH_PROG([for an Image -> XPM converter], TOXPM, convert)
if test "$TOXPM" = "convert"; then
gif_to_xpm="convert GIF:\$\$i XPM:\$\$o"
eps_to_xpm="convert EPS:\$\$i XPM:\$\$o"
jpg_to_xpm="convert JPG:\$\$i XPM:\$\$o"
png_to_xpm="convert PNG:\$\$i XPM:\$\$o"
ps_to_xpm="convert PS:\$\$i XPM:\$\$o"
xbm_to_xpm="convert XBM:\$\$i XPM:\$\$o"
fi
SEARCH_PROG([for an EPS -> PDF converter], EPSTOPDF, epstopdf)
case $EPSTOPDF in
epstopdf) eps_to_pdf="epstopdf --outfile=\$\$o \$\$i";;
esac
#### Add Grace conversions (xmgrace needs an Xserver, gracebat doesn't.)
SEARCH_PROG([for a Grace -> Image converter], GRACE, gracebat)
case $GRACE in
gracebat)
for device in `gracebat -version 2>/dev/null | grep "^Dummy"` ; do
case $device in
EPS) agr_to_eps="gracebat -hardcopy -printfile \$\$o -hdevice $device \$\$i 2>/dev/null";;
PDF) agr_to_pdf="gracebat -hardcopy -printfile \$\$o -hdevice $device \$\$i 2>/dev/null";;
PNG) agr_to_png="gracebat -hardcopy -printfile \$\$o -hdevice $device \$\$i 2>/dev/null";;
esac
done
esac
#### Explore the LaTeX configuration
MSG_CHECKING(LaTeX configuration)
# First, remove the files that we want to re-create
@ -489,13 +428,9 @@ cat >$outfile <<EOF
\\Format bmp bmp BMP ""
\\Format dvi dvi DVI D
\\Format eps eps EPS ""
\\Format epsi epsi EPSI ""
\\Format fax "" Fax ""
\\Format fits fits FITS ""
\\Format gif gif GIF ""
\\Format agr agr GRACE ""
\\Format html html HTML H
\\Format jpg jpg JPEG ""
\\Format latex tex LaTeX L
\\Format linuxdoc sgml LinuxDoc x
\\Format lyx lyx LyX ""
@ -503,19 +438,13 @@ cat >$outfile <<EOF
\\Format pdf pdf PDF P
\\Format pdf2 pdf "PDF (pdflatex)" F
\\Format pdf3 pdf "PDF (dvipdfm)" m
\\Format pbm pbm PBM ""
\\Format pgm pgm PGM ""
\\Format png png PNG ""
\\Format ppm ppm PPM ""
\\Format ps ps Postscript t
\\Format program "" Program ""
\\Format sgi sgi SGI ""
\\Format tgif obj TGIF ""
\\Format tiff tif TIFF ""
\\Format xbm xbm XBM ""
\\Format xpm xpm XPM ""
\\Format xwd xwd XWD ""
\\Format word doc Word W
\\Format xpm xpm XPM ""
\\converter latex dvi "$latex_to_dvi" "latex"
\\converter latex pdf2 "$latex_to_pdf" "latex"
@ -537,45 +466,6 @@ cat >$outfile <<EOF
\\converter html latex "$html_to_latex_command" ""
\\converter word latex "$word_to_latex_command" ""
\\converter bmp eps "$bmp_to_eps" ""
\\converter fits eps "$fits_to_eps" ""
\\converter gif eps "$gif_to_eps" ""
\\converter jpg eps "$jpg_to_eps" ""
\\converter pbm eps "$pbm_to_eps" ""
\\converter pgm eps "$pgm_to_eps" ""
\\converter png eps "$png_to_eps" ""
\\converter ppm eps "$ppm_to_eps" ""
\\converter sgi eps "$sgi_to_eps" ""
\\converter tgif eps "tgif -print -eps \$\$i" ""
\\converter tiff eps "tiff2ps \$\$i > \$\$o" ""
\\converter xbm eps "$xbm_to_eps" ""
\\converter xpm eps "$xpm_to_eps" ""
\\converter xwd eps "$xwd_to_eps" ""
\\converter tgif xpm "tgif -print -stdout -xpm \$\$i > \$\$o" ""
\\converter tgif png "tgif -print -stdout -png \$\$i > \$\$o" ""
\\converter tgif pdf "tgif -print -stdout -pdf \$\$i > \$\$o" ""
\\converter gif png "$gif_to_png" ""
\\converter eps png "$eps_to_png" ""
\\converter epsi png "$eps_to_png" ""
\\converter jpg png "$jpg_to_png" ""
\\converter gif xpm "$gif_to_xpm" ""
\\converter eps xpm "$eps_to_xpm" ""
\\converter epsi xpm "$eps_to_xpm" ""
\\converter jpg xpm "$jpg_to_xpm" ""
\\converter png xpm "$png_to_xpm" ""
\\converter ps xpm "$ps_to_xpm" ""
\\converter xbm xpm "$xbm_to_xpm" ""
\\converter eps pdf "$eps_to_pdf" ""
\\converter epsi pdf "$eps_to_pdf" ""
\\converter agr eps "$agr_to_eps" ""
\\converter agr pdf "$agr_to_pdf" ""
\\converter agr png "$agr_to_png" ""
\\viewer dvi "$DVI_VIEWER"
\\viewer html "$HTML_VIEWER"
\\viewer pdf "$PDF_VIEWER"
@ -586,6 +476,44 @@ $rc_entries
\\font_encoding "$chk_fontenc"
EOF
### the graphic converter part with the predefined ones
#### Search for tne nonstandard converting progs
#
SEARCH_PROG([for an TIFF -> PS converter], TIFF2PS, tiff2ps)
if test "$TIFF2PS" = "tiff2ps"; then
cat >>$outfile <<EOF
\\converter tiff eps "tiff2ps \$\$i > \$\$o" ""
EOF
fi
SEARCH_PROG([for an TGIF -> EPS/XPM converter], TGIF, tgif)
if test "$TGIF" = "tgif"; then
cat >>$outfile <<EOF
\\converter tgif eps "tgif -print -eps \$\$i" ""
\\converter tgif pdf "tgif -print -pdf \$\$i" ""
\\converter tgif png "tgif -print -png \$\$i" ""
\\converter tgif xpm "tgif -print -stdout -xpm \$\$i > \$\$o" ""
EOF
fi
SEARCH_PROG([for an EPS -> PDF converter], EPSTOPDF, epstopdf)
if test "$EPSTOPDF" = "epstopdf"; then
cat >>$outfile <<EOF
\\converter eps pdf "epstopdf --outfile=\$\$o \$\$i" ""
\\converter epsi pdf "epstopdf --outfile=\$\$o \$\$i" ""
EOF
fi
#### Add Grace conversions (xmgrace needs an Xserver, gracebat doesn't.)
SEARCH_PROG([for a Grace -> Image converter], GRACE, gracebat)
if test "$GRACE" = "gracebat"; then
cat >>$outfile <<EOF
\\converter agr eps "gracebat -hardcopy -printfile \$\$o -hdevice EPS \$\$i 2>/dev/null" ""
\\converter agr png "gracebat -hardcopy -printfile \$\$o -hdevice PNG \$\$i 2>/dev/null" ""
\\converter agr xpm "gracebat -hardcopy -printfile - -hdevice PNG \$\$i 2>/dev/null | convert - \$\$o" ""
EOF
fi
######## X FONTS
# create a fonts.dir file to make X fonts available to LyX
echo "checking for TeX fonts"

View File

@ -1,3 +1,8 @@
2002-06-17 Herbert Voss <voss@lyx.org>
* converter.C: (convert) do not post a message, when converting
fails, let the calling function decide what to do in this case
2002-06-18 John Levon <moz@compsoc.man.ac.uk>
* lyxfunc.C: tidy up a little

View File

@ -580,10 +580,6 @@ bool Converters::convert(Buffer const * buffer,
EdgePath edgepath = getPath(from_format, to_format);
if (edgepath.empty()) {
Alert::alert(_("Cannot convert file"),
_("No information for converting from ")
+ formats.prettyName(from_format) + _(" to ")
+ formats.prettyName(to_format));
return false;
}

View File

@ -66,7 +66,7 @@ public:
* path, with the file selection \param mask. The \param mask
* string is of the form :
*
* <regular expression to match> | <description>
* <glob to match> | <description>
*
* for example, "*.ps | PostScript files (*.ps)".
*

View File

@ -1,3 +1,7 @@
2002-06-18 John Levon <moz@compsoc.man.ac.uk>
* ControlGraphics.C: just make the mask *.*
2002-06-16 Lars Gullik Bjønnes <larsbj@birdstep.com>
* changes to simplify function setup, removal of a lot of includes.

View File

@ -44,56 +44,6 @@ using std::pair;
using std::make_pair;
using std::vector;
namespace {
// FIXME: currently we need the second '|' to prevent mis-interpretation!
// All supported graphic formats with their file-extension and the
// gzip-ext for zipped (e)ps-files.
// string const grfx_pattern =
// "*.(agr|bmp|eps|epsi|fits|gif|jpg|obj|pdf|pbm|pgm|png|"
// "ppm|ps|tif|tiff|xbm|xpm|xwd|gz)|";
vector<string> const grfx_formats()
{
vector<string> native_formats = grfx::GCache::get().loadableFormats();
// We can load any format that can be loaded natively together with
// those that can be converted to one of these native formats.
vector<string> browsable_formats = native_formats;
grfx::GConverter const & gconverter = grfx::GConverter::get();
vector<string>::const_iterator to_end = native_formats.end();
Formats::const_iterator from_it = formats.begin();
Formats::const_iterator from_end = formats.end();
for (; from_it != from_end; ++from_it) {
string const from = from_it->name();
vector<string>::const_iterator to_it = native_formats.begin();
for (; to_it != to_end; ++to_it) {
if (gconverter.isReachable(from, *to_it)) {
browsable_formats.push_back(from);
break;
}
}
}
browsable_formats.push_back("gz");
return browsable_formats;
}
string const xforms_pattern()
{
vector<string> const browsable_formats = grfx_formats();
string const answer =
"*.(" + getStringFromVector(browsable_formats, "|") +")|";
return answer;
}
}
ControlGraphics::ControlGraphics(LyXView & lv, Dialogs & d)
: ControlInset<InsetGraphics, InsetGraphicsParams>(lv, d)
{}
@ -146,7 +96,7 @@ string const ControlGraphics::Browse(string const & in_name)
pair<string, string> dir2(_("Documents|#o#O"), string(lyxrc.document_path));
// Show the file browser dialog
return browseRelFile(&lv_, in_name, lv_.buffer()->filePath(),
title, ::xforms_pattern(), dir1, dir2);
title, "*.*", dir1, dir2);
}

View File

@ -1,3 +1,14 @@
2002-06-17 Herbert Voss <voss@lyx.org>
* GraphicsCachItem.C: (findTargetFormat)return xpm-format as a
default when nothing different was found
(convertToDisplayFormat): handle zipped files in the right way and
choose always convert as a default converter when no other
userdefined was found
* GraphicsConverter.C: add more lyxerr comments and choose
convert when no other userdefined converter was found
2002-06-10 Herbert Voss <voss@lyx.org>
* GraphicsImageXPM.C (convertTo7chars): get another special color

View File

@ -441,8 +441,9 @@ string const findTargetFormat(string const & from)
return *it2;
}
// Failed!
return string();
// Failed! so we have to try to convert it to XPM format
// with the standard converter
return string("xpm");
}
} // anon namespace
@ -451,58 +452,44 @@ string const findTargetFormat(string const & from)
void GCacheItem::convertToDisplayFormat()
{
setStatus(Converting);
string filename = filename_; // Make a local copy in case we unzip it
// Make a local copy in case we unzip it
string const filename = zippedFile(filename_) ?
unzipFile(filename_) : filename_;
string const displayed_filename = MakeDisplayPath(filename_);
lyxerr[Debug::GRAPHICS] << "[GrahicsCacheItem::convertToDisplayFormat]\n"
<< "\tAttempting to convert image file: " << filename
<< "\n\twith displayed filename: " << displayed_filename
<< endl;
// First, check that the file exists!
if (!IsFileReadable(filename)) {
setStatus(ErrorNoFile);
lyxerr[Debug::GRAPHICS] << "\tThe file is not readable" << endl;
return;
}
// maybe that other zip extensions also be useful, especially the
// ones that may be declared in texmf/tex/latex/config/graphics.cfg.
// for example:
/* -----------snip-------------
{\DeclareGraphicsRule{.pz}{eps}{.bb}{}%
\DeclareGraphicsRule{.eps.Z}{eps}{.eps.bb}{}%
\DeclareGraphicsRule{.ps.Z}{eps}{.ps.bb}{}%
\DeclareGraphicsRule{.ps.gz}{eps}{.ps.bb}{}%
\DeclareGraphicsRule{.eps.gz}{eps}{.eps.bb}{}}}%
-----------snip-------------*/
lyxerr[Debug::GRAPHICS]
<< "Attempting to convert image file: " << displayed_filename
<< "\nwith recognised extension: " << GetExtension(filename)
<< "." << endl;
zipped_ = zippedFile(filename);
if (zipped_) {
filename = unzipFile(filename);
unzipped_filename_ = filename;
}
string const from = getExtFromContents(filename);
string const to = grfx::findTargetFormat(from);
lyxerr[Debug::GRAPHICS]
<< "The file contains " << from << " format data." << endl;
if (to.empty()) {
setStatus(ErrorConverting);
return;
}
string from = getExtFromContents(filename);
// Some old ps-files make problems, so we do not need direct
// loading of an ps-file
if (from == "ps") {
lyxerr[Debug::GRAPHICS]
<< "\n\tThe file contains PostScript format data.\n"
<< "\tchanging it to eps-format to get it converted to xpm\n";
from = "eps";
} else
lyxerr[Debug::GRAPHICS]
<< "\n\tThe file contains " << from << " format data." << endl;
string const to = grfx::findTargetFormat(from);
if (from == to) {
// No conversion needed!
lyxerr[Debug::GRAPHICS] << "No conversion needed!" << endl;
lyxerr[Debug::GRAPHICS] << "\tNo conversion needed (from == to)!" << endl;
file_to_load_ = filename;
loadImage();
return;
}
lyxerr[Debug::GRAPHICS] << "Converting it to " << to << " format." << endl;
lyxerr[Debug::GRAPHICS] << "\tConverting it to " << to << " format." << endl;
// Take only the filename part of the file, without path or extension.
string const temp = ChangeExtension(OnlyFilename(filename), string());

View File

@ -71,48 +71,63 @@ void GConverter::convert(string const & from_file, string const & to_file_base,
string const & from_format, string const & to_format,
SignalTypePtr on_finish)
{
lyxerr[Debug::GRAPHICS] << "[GraphicsConverter::convert]\n"
<< "\tfrom_file: " << from_file
<< "\n\tto_file_base: " << to_file_base
<< "\n\tfrom_format: " << from_format
<< "\n\tto_format: " << to_format << endl;
// The conversion commands are stored in a stringstream
ostringstream script;
script << "#!/bin/sh\n";
string script_command;
string script_file;
bool const success = build_script(from_file, to_file_base,
from_format, to_format, script);
bool success = build_script(from_file, to_file_base,
from_format, to_format, script);
if (!success) {
lyxerr[Debug::GRAPHICS]
<< "Unable to build the conversion script" << std::endl;
on_finish->operator()(string());
return;
if (success) {
lyxerr[Debug::GRAPHICS] << "\tConversion script:\n"
<< "--------------------------------------\n"
<< script.str().c_str()
<< "\n--------------------------------------\n";
// Output the script to file.
static int counter = 0;
script_file = OnlyPath(to_file_base) + "lyxconvert" +
tostr(counter++) + ".sh";
std::ofstream fs(script_file.c_str());
if (!fs.good()) {
// Unable to output the conversion script to file.
success = false;
} else {
fs << script.str().c_str();
fs.close();
// Create a dummy command for ease of understanding of the
// list of forked processes.
// Note that 'sh ' is absolutely essential, or execvp will fail.
script_command =
"sh " + script_file + " " +
OnlyFilename(from_file) + " " + to_format;
}
}
lyxerr[Debug::GRAPHICS] << "Conversion script:\n\n"
<< script.str().c_str() << "\n" << std::endl;
// Output the script to file.
static int counter = 0;
string const script_file = OnlyPath(to_file_base) + "lyxconvert" +
tostr(counter++) + ".sh";
std::ofstream fs(script_file.c_str());
if (!fs.good()) {
// Unable to output the conversion script to file.
on_finish->operator()(string());
return;
}
fs << script.str().c_str();
fs.close();
// Create a dummy command for ease of understanding of the
// list of forked processes.
// Note that 'sh ' is absolutely essential, or execvp will fail.
string const script_command =
"sh " + script_file + " " +
OnlyFilename(from_file) + " " + to_format;
string const to_file =
ChangeExtension(to_file_base, formats.extension(to_format));
if (!success) {
script_file = string();
script_command =
"convert -depth 8 " +
from_format + ':' + from_file + ' ' +
to_format + ':' + to_file;
lyxerr[Debug::GRAPHICS]
<< "\tNo converter defined! I use convert from ImageMagic:\n\t"
<< script_command << endl;
}
// Launch the conversion process.
ConvProcessPtr shared_ptr;
shared_ptr.reset(new ConvProcess(script_file, script_command,
@ -161,6 +176,7 @@ bool GConverter::build_script(string const & from_file,
string const & to_format,
ostringstream & script) const
{
lyxerr[Debug::GRAPHICS] << "[GraphicsConverter::build_script] ... ";
typedef Converters::EdgePath EdgePath;
string const to_file = ChangeExtension(to_file_base,
@ -168,12 +184,14 @@ bool GConverter::build_script(string const & from_file,
if (from_format == to_format) {
script << move_file(QuoteName(from_file), QuoteName(to_file));
lyxerr[Debug::GRAPHICS] << "ready (from == to)" << endl;
return true;
}
EdgePath edgepath = converters.getPath(from_format, to_format);
if (edgepath.empty()) {
lyxerr[Debug::GRAPHICS] << "ready (edgepath.empty())" << endl;
return false;
}
@ -244,6 +262,7 @@ bool GConverter::build_script(string const & from_file,
// Move the final outfile to to_file
script << move_file("${outfile}", QuoteName(to_file));
lyxerr[Debug::GRAPHICS] << "ready!" << endl;
return true;
}

View File

@ -1,3 +1,10 @@
2002-06-15 Herbert Voss <voss@perce.de>
* insetgraphics.C: (prepareFile) fix bug with zipped eps-files
and take always convert when no userdefined converter was
found
(latex) small changes in the lyxerr output
2002-06-15 LyX Development team <lyx@rilke>
* inset*.[Ch] (docbook): Added new argument to take the pernicious

View File

@ -101,6 +101,7 @@ TODO Before initial production release:
#include "support/filetools.h"
#include "support/lyxalgo.h" // lyx::count
#include "support/path.h"
#include "support/systemcall.h"
#include <algorithm> // For the std::max
@ -598,23 +599,63 @@ string const InsetGraphics::prepareFile(Buffer const *buf) const
// LaTeX can cope if the graphics file doesn't exist, so just return the
// filename.
string const orig_file = params().filename;
string const orig_file_with_path =
string orig_file_with_path =
MakeAbsPath(orig_file, buf->filePath());
lyxerr[Debug::GRAPHICS] << "prepareFile: " << orig_file << endl
<< " with path: " << orig_file_with_path << endl;
lyxerr[Debug::GRAPHICS] << "[InsetGraphics::prepareFile] orig_file = "
<< orig_file << "\n\twith path: "
<< orig_file_with_path << endl;
if (!IsFileReadable(orig_file_with_path))
return orig_file;
// If the file is compressed and we have specified that it should not be
// uncompressed, then just return its name and let LaTeX do the rest!
// maybe that other zip extensions also be useful, especially the
// ones that may be declared in texmf/tex/latex/config/graphics.cfg.
// for example:
/* -----------snip-------------
{\DeclareGraphicsRule{.pz}{eps}{.bb}{}%
\DeclareGraphicsRule{.eps.Z}{eps}{.eps.bb}{}%
\DeclareGraphicsRule{.ps.Z}{eps}{.ps.bb}{}%
\DeclareGraphicsRule{.ps.gz}{eps}{.ps.bb}{}%
\DeclareGraphicsRule{.eps.gz}{eps}{.eps.bb}{}}}%
-----------snip-------------*/
bool const zipped = zippedFile(orig_file_with_path);
if (zipped)
lyxerr[Debug::GRAPHICS] << "it's a zipped file\n";
if (zipped && params().noUnzip) {
lyxerr[Debug::GRAPHICS] << "pass file unzipped to LaTeX\n";
return orig_file;
lyxerr[Debug::GRAPHICS] << "\twe have a zipped file ("
<< getExtFromContents(orig_file_with_path) << ")\n";
if (params().noUnzip && zipped) {
lyxerr[Debug::GRAPHICS]
<< "\tpass file unzipped to LaTeX but with full path.\n";
// latex needs an absolue path, otherwise the coresponding
// *.eps.bb file isn't found
return orig_file_with_path;
}
string temp_file(orig_file);
// Uncompress the file if necessary. If it has been uncompressed in
// a previous call to prepareFile, do nothing.
if (zipped) {
temp_file = MakeAbsPath(OnlyFilename(temp_file), buf->tmppath);
lyxerr[Debug::GRAPHICS]
<< "\ttemp_file: " << temp_file << endl;
if (!IsFileReadable(temp_file)) {
bool const success = lyx::copy(orig_file_with_path, temp_file);
lyxerr[Debug::GRAPHICS]
<< "\tCopying zipped file from "
<< orig_file_with_path << " to " << temp_file
<< (success ? " succeeded\n" : " failed\n");
} else
lyxerr[Debug::GRAPHICS]
<< "\tzipped file " << temp_file
<< " exists! Maybe no tempdir ...\n";
orig_file_with_path = unzipFile(temp_file);
lyxerr[Debug::GRAPHICS]
<< "\tunzipped to " << orig_file_with_path << endl;
}
string const from = getExtFromContents(orig_file_with_path);
// "nice" means that the buffer is exported to LaTeX format but not
// run through the LaTeX compiler.
@ -635,85 +676,73 @@ string const InsetGraphics::prepareFile(Buffer const *buf) const
// we manipulate the original file "any.dir/file.ext"
// to "any_dir_file.ext"! changing the dots in the
// dirname is important for the use of ChangeExtension
string temp_file(orig_file);
lyxerr[Debug::GRAPHICS]
<< "\tthe orig file is: " << orig_file_with_path << endl;
if (lyxrc.use_tempdir) {
string const ext_tmp = GetExtension(orig_file);
string const ext_tmp = GetExtension(orig_file_with_path);
// without ext and /
temp_file = subst(
ChangeExtension(temp_file, string()), "/", "_");
// without . and again with ext
ChangeExtension(orig_file_with_path, string()), "/", "_");
// without dots and again with ext
temp_file = ChangeExtension(
subst(temp_file, ".", "_"), ext_tmp);
// now we have any_dir_file.ext
temp_file = MakeAbsPath(temp_file, buf->tmppath);
}
lyxerr[Debug::GRAPHICS]
<< "InsetGraphics::prepareFile. The temp file is: "
<< temp_file << endl;
// If we are using a temp dir, then copy the file into it.
if (lyxrc.use_tempdir && !IsFileReadable(temp_file)) {
bool const success = lyx::copy(orig_file_with_path, temp_file);
lyxerr[Debug::GRAPHICS]
<< "InsetGraphics::prepareFile. Copying from "
<< orig_file << " to " << temp_file
<< (success ? " succeeded\n" : " failed\n");
if (!success) {
Alert::alert(_("Cannot copy file"), orig_file,
_("into tempdir"));
return orig_file;
}
}
// Uncompress the file if necessary. If it has been uncompressed in
// a previous call to prepareFile, do nothing.
if (zipped) {
// What we want to end up with:
string const temp_file_unzipped =
ChangeExtension(temp_file, string());
if (!IsFileReadable(temp_file_unzipped)) {
// unzipFile generates a random filename, so move this
// file where we want it to go.
string const tmp = unzipFile(temp_file);
lyx::copy(tmp, temp_file_unzipped);
lyx::unlink(tmp);
<< "\tchanged to: " << temp_file << endl;
// if the file doen't exists, copy it into the tempdi
if (!IsFileReadable(temp_file)) {
bool const success = lyx::copy(orig_file_with_path, temp_file);
lyxerr[Debug::GRAPHICS]
<< "InsetGraphics::prepareFile. Unzipped to "
<< temp_file_unzipped << endl;
<< "\tcopying from " << orig_file_with_path << " to "
<< temp_file
<< (success ? " succeeded\n" : " failed\n");
if (!success) {
Alert::alert(_("Cannot copy file"), orig_file_with_path,
_("into tempdir"));
return orig_file;
}
}
// We have an uncompressed file where we expect it,
// so rename temp_file and continue.
temp_file = temp_file_unzipped;
}
// Ascertain the graphics format that LaTeX requires.
// Make again an absolute path, maybe that we have no
// tempdir. Than temp_file=orig_file
string const from = lyxrc.use_tempdir ?
getExtFromContents(temp_file) :
getExtFromContents(MakeAbsPath(temp_file, buf->filePath()));
string const to = findTargetFormat(from);
// No conversion is needed. LaTeX can handle the graphics file as it is.
// This is true even if the orig_file is compressed.
if (from == to) {
return orig_file;
}
string const outfile_base = RemoveExtension(temp_file);
string const to = findTargetFormat(from);
lyxerr[Debug::GRAPHICS]
<< "InsetGraphics::prepareFile. The original file is "
<< orig_file << "\n"
<< "A copy has been made and convert is to be called with:\n"
<< "\t we have: from " << from << " to " << to << '\n';
if (from == to) {
// No conversion is needed. LaTeX can handle the graphic file as is.
// This is true even if the orig_file is compressed. We have to return
// the orig_file_with_path, maybe it is a zipped one
return lyxrc.use_tempdir ? temp_file : orig_file_with_path;
}
string const outfile_base = RemoveExtension(temp_file);
lyxerr[Debug::GRAPHICS]
<< "\tThe original file is " << orig_file << "\n"
<< "\tA copy has been made and convert is to be called with:\n"
<< "\tfile to convert = " << temp_file << '\n'
<< "\toutfile_base = " << outfile_base << '\n'
<< "\t from " << from << " to " << to << '\n';
converters.convert(buf, temp_file, outfile_base, from, to);
// if no special converter defined, than we take the default one
// from ImageMagic: convert from:inname.from to:outname.to
if (!converters.convert(buf, temp_file, outfile_base, from, to)) {
string const command =
"convert " +
from + ':' + temp_file + ' ' +
to + ':' + outfile_base + '.' + to;
lyxerr[Debug::GRAPHICS]
<< "No converter defined! I use convert from ImageMagic:\n\t"
<< command << endl;
Systemcall one;
one.startscript(Systemcall::Wait, command);
if (!IsFileReadable(ChangeExtension(outfile_base, to)))
Alert::alert(_("Cannot convert Image (not existing file??)"),
_("No information for converting from ")
+ from + _(" to ") + to);
}
return RemoveExtension(temp_file);
}
@ -742,7 +771,7 @@ int InsetGraphics::latex(Buffer const *buf, ostream & os,
// draws only a rectangle with the above bb and the
// not found filename in it.
lyxerr[Debug::GRAPHICS]
<< "InsetGraphics::latex. Message = \"" << message << '\"' << endl;
<< "\tMessage = \"" << message << '\"' << endl;
// These variables collect all the latex code that should be before and
// after the actual includegraphics command.
@ -758,19 +787,18 @@ int InsetGraphics::latex(Buffer const *buf, ostream & os,
// Write the options if there are any.
string const opts = createLatexOptions();
lyxerr[Debug::GRAPHICS]
<< "InsetGraphics::latex. Opts = " << opts << endl;
lyxerr[Debug::GRAPHICS] << "\tOpts = " << opts << endl;
if (!opts.empty() && !message.empty())
before += ("[" + opts + ',' + message);
before += ("[%\n" + opts + ',' + message);
else if (!message.empty())
before += ('[' + message);
before += ("[%\n" + message);
else if (!opts.empty())
before += ("[" + opts + ']');
before += ("[%\n" + opts + ']');
lyxerr[Debug::GRAPHICS]
<< "InsetGraphics::latex. Before = " << before
<< "\nafter = " << after << endl;
<< "\tBefore = " << before
<< "\n\tafter = " << after << endl;
// Make the filename relative to the lyx file
// and remove the extension so the LaTeX will use whatever is

View File

@ -1774,7 +1774,6 @@ void LyXFunc::menuNew(bool fromTemplate)
<< disp_fn << "...";
owner->message(str.str().c_str());
//XFlush(fl_get_display());
owner->view()->buffer(bufferlist.loadLyXFile(s));
ostringstream str2;
str2 << _("Document") << ' '

View File

@ -1,3 +1,12 @@
2002-06-17 Herbert Voss <voss@perce.de>
* filetools.[C]: (readBB_from_PSFile) add a helperfunc
(readBB_lyxerrMessage) to get better lyxerr messages
(getExtFromContents) test epsi files in the right way
* DestroxLyXTmpDir.C: changed to true, to delete the
temporary unzipped files, too.
2002-06-10 Lars Gullik Bjønnes <larsbj@birdstep.com>
* putenv.C (putenv): putenv should never be found in std::

View File

@ -25,6 +25,7 @@
#include "support/systemcall.h"
#include "filetools.h"
#include "lstrings.h"
#include "frontends/Alert.h"
#include "FileInfo.h"
#include "support/path.h" // I know it's OS/2 specific (SMiyata)
@ -557,9 +558,10 @@ string const CreateLyXTmpDir(string const & deflt)
}
// FIXME: no need for separate method like this ...
int DestroyLyXTmpDir(string const & tmpdir)
{
return DestroyTmpDir (tmpdir, false); // Why false?
return DestroyTmpDir(tmpdir, true);
}
@ -991,6 +993,8 @@ string const GetExtension(string const & name)
// AGR Grace...
// BMP BM...
// EPS %!PS-Adobe-3.0 EPSF...
// EPSI like EPS and with
// %%BeginPreview...
// FITS ...BITPIX...
// GIF GIF...
// JPG JFIF
@ -1021,6 +1025,7 @@ string const getExtFromContents(string const & filename)
if (filename.empty() || !IsFileReadable(filename))
return string();
ifstream ifs(filename.c_str());
if (!ifs)
// Couldn't open file...
@ -1138,7 +1143,7 @@ string const getExtFromContents(string const & filename)
else if (contains(str,"%!PS-Adobe")) {
// eps or ps
ifs >> str;
if (contains(str,"EPSF"))
if (contains(str,"EPSF"))
format = "eps";
else
format = "ps";
@ -1155,9 +1160,25 @@ string const getExtFromContents(string const & filename)
}
if (!format.empty()) {
lyxerr[Debug::GRAPHICS]
<< "Recognised Fileformat: " << format << endl;
return format;
// if we have eps than epsi is also possible
// we have to check for a preview
if (format == "eps") {
lyxerr[Debug::GRAPHICS]
<< "\teps detected -> test for an epsi ..."
<< endl;
while (count++ < max_count) {
if (ifs.eof())
break;
getline(ifs, str);
if (contains(str, "BeginPreview")) {
format = "epsi";
count = max_count;
}
}
}
lyxerr[Debug::GRAPHICS]
<< "Recognised Fileformat: " << format << endl;
return format;
}
string const ext(GetExtension(filename));
@ -1362,6 +1383,16 @@ void removeAutosaveFile(string const & filename)
}
void readBB_lyxerrMessage(string const & file, bool & zipped,
string const & message)
{
lyxerr[Debug::GRAPHICS] << "[readBB_from_PSFile] "
<< message << std::endl;
if (zipped)
lyx::unlink(file);
}
string const readBB_from_PSFile(string const & file)
{
// in a (e)ps-file it's an entry like %%BoundingBox:23 45 321 345
@ -1371,18 +1402,26 @@ string const readBB_from_PSFile(string const & file)
// end of the file. Than we have in the header:
// %%BoundingBox: (atend)
// In this case we must check the end.
string const file_ = zippedFile(file) ?
bool zipped = zippedFile(file);
string const file_ = zipped ?
string(unzipFile(file)) : string(file);
string const format = getExtFromContents(file_);
if (format != "eps" && format != "ps")
if (format != "eps" && format != "ps") {
readBB_lyxerrMessage(file_, zipped,"no(e)ps-format");
return string();
}
std::ifstream is(file_.c_str());
while (is) {
string s;
getline(is,s);
if (contains(s,"%%BoundingBox:") && !contains(s,"atend"))
return (frontStrip(s.substr(14)));
if (contains(s,"%%BoundingBox:") && !contains(s,"atend")) {
string const bb = frontStrip(s.substr(14));
readBB_lyxerrMessage(file_, zipped, bb);
return bb;
}
}
readBB_lyxerrMessage(file_, zipped, "no bb found");
return string();
}