mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
last chunk of the fix for bug 1244 + overwrite checking
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8791 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
d419179b52
commit
fa29d7ee98
@ -1,3 +1,7 @@
|
|||||||
|
2004-06-01 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
||||||
|
|
||||||
|
* external_templates: add ReferencedFile commands where appropriate
|
||||||
|
|
||||||
2004-05-31 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
2004-05-31 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
||||||
|
|
||||||
* Makefile.am: remove compiled python files
|
* Makefile.am: remove compiled python files
|
||||||
|
@ -69,6 +69,8 @@ Template RasterImage
|
|||||||
UpdateFormat eps
|
UpdateFormat eps
|
||||||
UpdateResult "$$AbsPath$$Basename.eps"
|
UpdateResult "$$AbsPath$$Basename.eps"
|
||||||
Requirement "graphicx"
|
Requirement "graphicx"
|
||||||
|
ReferencedFile latex "$$AbsPath$$Basename.eps"
|
||||||
|
ReferencedFile dvi "$$AbsPath$$Basename.eps"
|
||||||
FormatEnd
|
FormatEnd
|
||||||
Format PDFLaTeX
|
Format PDFLaTeX
|
||||||
TransformOption Rotate RotationLatexOption
|
TransformOption Rotate RotationLatexOption
|
||||||
@ -80,6 +82,7 @@ Template RasterImage
|
|||||||
UpdateFormat png
|
UpdateFormat png
|
||||||
UpdateResult "$$AbsPath$$Basename.png"
|
UpdateResult "$$AbsPath$$Basename.png"
|
||||||
Requirement "graphicx"
|
Requirement "graphicx"
|
||||||
|
ReferencedFile latex "$$AbsPath$$Basename.png"
|
||||||
FormatEnd
|
FormatEnd
|
||||||
Format Ascii
|
Format Ascii
|
||||||
Product "$$Contents(\"$$AbsPath$$Basename.asc\")"
|
Product "$$Contents(\"$$AbsPath$$Basename.asc\")"
|
||||||
@ -90,6 +93,8 @@ Template RasterImage
|
|||||||
Product "<graphic fileref=\"$$AbsOrRelPathMaster$$Basename.eps\"></graphic>"
|
Product "<graphic fileref=\"$$AbsOrRelPathMaster$$Basename.eps\"></graphic>"
|
||||||
UpdateFormat eps
|
UpdateFormat eps
|
||||||
UpdateResult "$$AbsPath$$Basename.eps"
|
UpdateResult "$$AbsPath$$Basename.eps"
|
||||||
|
ReferencedFile docbook "$$AbsPath$$Basename.eps"
|
||||||
|
ReferencedFile docbook-xml "$$AbsPath$$Basename.eps"
|
||||||
FormatEnd
|
FormatEnd
|
||||||
Format LinuxDoc
|
Format LinuxDoc
|
||||||
Product "[Bitmap: $$FName]"
|
Product "[Bitmap: $$FName]"
|
||||||
@ -116,6 +121,9 @@ Template XFig
|
|||||||
Requirement "graphicx"
|
Requirement "graphicx"
|
||||||
# Preamble WarnNotFound
|
# Preamble WarnNotFound
|
||||||
# Preamble InputOrWarn
|
# Preamble InputOrWarn
|
||||||
|
ReferencedFile latex "$$AbsPath$$Basename.pstex_t"
|
||||||
|
ReferencedFile latex "$$AbsPath$$Basename.pstex"
|
||||||
|
ReferencedFile dvi "$$AbsPath$$Basename.pstex"
|
||||||
FormatEnd
|
FormatEnd
|
||||||
Format PDFLaTeX
|
Format PDFLaTeX
|
||||||
TransformCommand Rotate RotationLatexCommand
|
TransformCommand Rotate RotationLatexCommand
|
||||||
@ -126,6 +134,8 @@ Template XFig
|
|||||||
Requirement "graphicx"
|
Requirement "graphicx"
|
||||||
# Preamble WarnNotFound
|
# Preamble WarnNotFound
|
||||||
# Preamble InputOrWarn
|
# Preamble InputOrWarn
|
||||||
|
ReferencedFile latex "$$AbsPath$$Basename.pdftex_t"
|
||||||
|
ReferencedFile latex "$$AbsPath$$Basename.pdftex"
|
||||||
FormatEnd
|
FormatEnd
|
||||||
Format Ascii
|
Format Ascii
|
||||||
Product "$$Contents(\"$$AbsPath$$Basename.asc\")"
|
Product "$$Contents(\"$$AbsPath$$Basename.asc\")"
|
||||||
@ -136,6 +146,8 @@ Template XFig
|
|||||||
Product "<graphic fileref=\"$$AbsOrRelPathMaster$$Basename.eps\"></graphic>"
|
Product "<graphic fileref=\"$$AbsOrRelPathMaster$$Basename.eps\"></graphic>"
|
||||||
UpdateFormat eps
|
UpdateFormat eps
|
||||||
UpdateResult "$$AbsPath$$Basename.eps"
|
UpdateResult "$$AbsPath$$Basename.eps"
|
||||||
|
ReferencedFile docbook "$$AbsPath$$Basename.eps"
|
||||||
|
ReferencedFile docbook-xml "$$AbsPath$$Basename.eps"
|
||||||
FormatEnd
|
FormatEnd
|
||||||
Format LinuxDoc
|
Format LinuxDoc
|
||||||
Product "[XFig: $$FName]"
|
Product "[XFig: $$FName]"
|
||||||
@ -170,6 +182,7 @@ Template ChessDiagram
|
|||||||
Format LaTeX
|
Format LaTeX
|
||||||
Product "\\loadgame{$$AbsOrRelPathMaster$$Basename}\\showboard"
|
Product "\\loadgame{$$AbsOrRelPathMaster$$Basename}\\showboard"
|
||||||
Requirement "chess"
|
Requirement "chess"
|
||||||
|
ReferencedFile latex "$$AbsPath$$Basename$$Extension"
|
||||||
FormatEnd
|
FormatEnd
|
||||||
Format Ascii
|
Format Ascii
|
||||||
Product "$$Contents(\"$$AbsPath$$Basename.asc\")"
|
Product "$$Contents(\"$$AbsPath$$Basename.asc\")"
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
2004-06-01 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
||||||
|
|
||||||
|
* exporter.C (checkOverwrite): new method
|
||||||
|
* exporter.C (copyFile): new method
|
||||||
|
* exporter.C (Export): copy referenced files to the document dir
|
||||||
|
* exporter.[Ch]: new class ExportedFile
|
||||||
|
* exporter.[Ch]: new class ExportData. Contains currently the
|
||||||
|
names of referenced external files
|
||||||
|
* outputparams.h: add exportdata member.
|
||||||
|
|
||||||
2004-05-28 Lars Gullik Bjonnes <larsbj@gullik.net>
|
2004-05-28 Lars Gullik Bjonnes <larsbj@gullik.net>
|
||||||
|
|
||||||
* Makefile.am (DISTCLEANFILES): add version.C, stamp-version and
|
* Makefile.am (DISTCLEANFILES): add version.C, stamp-version and
|
||||||
|
156
src/exporter.C
156
src/exporter.C
@ -29,13 +29,20 @@
|
|||||||
#include "outputparams.h"
|
#include "outputparams.h"
|
||||||
#include "frontends/Alert.h"
|
#include "frontends/Alert.h"
|
||||||
|
|
||||||
|
#include "support/FileInfo.h"
|
||||||
#include "support/filetools.h"
|
#include "support/filetools.h"
|
||||||
|
#include "support/lyxlib.h"
|
||||||
|
#include "support/os.h"
|
||||||
|
|
||||||
using lyx::support::AddName;
|
using lyx::support::AddName;
|
||||||
using lyx::support::bformat;
|
using lyx::support::bformat;
|
||||||
using lyx::support::ChangeExtension;
|
using lyx::support::ChangeExtension;
|
||||||
using lyx::support::contains;
|
using lyx::support::contains;
|
||||||
|
using lyx::support::MakeAbsPath;
|
||||||
using lyx::support::MakeDisplayPath;
|
using lyx::support::MakeDisplayPath;
|
||||||
|
using lyx::support::OnlyFilename;
|
||||||
|
using lyx::support::OnlyPath;
|
||||||
|
using lyx::support::prefixIs;
|
||||||
|
|
||||||
using std::find;
|
using std::find;
|
||||||
using std::string;
|
using std::string;
|
||||||
@ -53,6 +60,72 @@ vector<string> const Backends(Buffer const & buffer)
|
|||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// ask the user what to do if a file already exists
|
||||||
|
int checkOverwrite(string const & filename)
|
||||||
|
{
|
||||||
|
if (lyx::support::FileInfo(filename, true).exist()) {
|
||||||
|
string text = bformat(_("The file %1$s already exists.\n\n"
|
||||||
|
"Do you want to over-write that file?"),
|
||||||
|
MakeDisplayPath(filename));
|
||||||
|
return Alert::prompt(_("Over-write file?"),
|
||||||
|
text, 0, 2,
|
||||||
|
_("&Over-write"), _("Over-write &all"),
|
||||||
|
_("&Cancel export"));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
enum CopyStatus {
|
||||||
|
SUCCESS,
|
||||||
|
FORCE,
|
||||||
|
CANCEL
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** copy file \p sourceFile to \p destFile. If \p force is false, the user
|
||||||
|
* will be asked before existing files are overwritten.
|
||||||
|
* \return
|
||||||
|
* - SUCCESS if this file got copied
|
||||||
|
* - FORCE if subsequent calls should not ask for confirmation before
|
||||||
|
* overwriting files anymore.
|
||||||
|
* - CANCEL if the export should be cancelled
|
||||||
|
*/
|
||||||
|
CopyStatus copyFile(string const & sourceFile, string const & destFile,
|
||||||
|
bool force)
|
||||||
|
{
|
||||||
|
CopyStatus ret = force ? FORCE : SUCCESS;
|
||||||
|
|
||||||
|
// Only copy files that are in our tmp dir, all other files would
|
||||||
|
// overwrite themselves. This check could be changed to
|
||||||
|
// boost::filesystem::equivalent(sourceFile, destFile) if export to
|
||||||
|
// other directories than the document directory is desired.
|
||||||
|
if (!prefixIs(OnlyPath(sourceFile), lyx::support::os::getTmpDir()))
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if (!force) {
|
||||||
|
switch(checkOverwrite(destFile)) {
|
||||||
|
case 0:
|
||||||
|
ret = SUCCESS;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ret = FORCE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return CANCEL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lyx::support::copy(sourceFile, destFile))
|
||||||
|
Alert::error(_("Couldn't copy file"),
|
||||||
|
bformat(_("Copying %1$s to %2$s failed."),
|
||||||
|
MakeDisplayPath(sourceFile),
|
||||||
|
MakeDisplayPath(destFile)));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
} //namespace anon
|
} //namespace anon
|
||||||
|
|
||||||
|
|
||||||
@ -63,6 +136,8 @@ bool Exporter::Export(Buffer * buffer, string const & format,
|
|||||||
OutputParams runparams;
|
OutputParams runparams;
|
||||||
runparams.flavor = OutputParams::LATEX;
|
runparams.flavor = OutputParams::LATEX;
|
||||||
runparams.linelen = lyxrc.ascii_linelen;
|
runparams.linelen = lyxrc.ascii_linelen;
|
||||||
|
ExportData exportdata;
|
||||||
|
runparams.exportdata = &exportdata;
|
||||||
vector<string> backends = Backends(*buffer);
|
vector<string> backends = Backends(*buffer);
|
||||||
if (find(backends.begin(), backends.end(), format) == backends.end()) {
|
if (find(backends.begin(), backends.end(), format) == backends.end()) {
|
||||||
for (vector<string>::const_iterator it = backends.begin();
|
for (vector<string>::const_iterator it = backends.begin();
|
||||||
@ -115,18 +190,37 @@ bool Exporter::Export(Buffer * buffer, string const & format,
|
|||||||
buffer->makeLaTeXFile(filename, buffer->filePath(), runparams);
|
buffer->makeLaTeXFile(filename, buffer->filePath(), runparams);
|
||||||
}
|
}
|
||||||
|
|
||||||
string outfile_base = (put_in_tempdir)
|
if (!converters.convert(buffer, filename, filename,
|
||||||
? filename : buffer->getLatexName(false);
|
|
||||||
|
|
||||||
if (!converters.convert(buffer, filename, outfile_base,
|
|
||||||
backend_format, format, result_file))
|
backend_format, format, result_file))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!put_in_tempdir)
|
if (!put_in_tempdir) {
|
||||||
buffer->message(_("Document exported as ")
|
string const tmp_result_file = result_file;
|
||||||
+ formats.prettyName(format)
|
result_file = ChangeExtension(buffer->fileName(),
|
||||||
+ _(" to file `")
|
formats.extension(format));
|
||||||
+ MakeDisplayPath(result_file) +'\'');
|
// We need to copy referenced files (e. g. included graphics
|
||||||
|
// if format == "dvi") to the result dir.
|
||||||
|
vector<ExportedFile> const files = exportdata.externalFiles(format);
|
||||||
|
string const dest = OnlyPath(result_file);
|
||||||
|
CopyStatus status = SUCCESS;
|
||||||
|
for (vector<ExportedFile>::const_iterator it = files.begin();
|
||||||
|
it != files.end() && status != CANCEL; ++it)
|
||||||
|
status = copyFile(it->sourceName,
|
||||||
|
MakeAbsPath(it->exportName, dest),
|
||||||
|
status == FORCE);
|
||||||
|
if (status == CANCEL) {
|
||||||
|
buffer->message(_("Document export cancelled."));
|
||||||
|
} else {
|
||||||
|
// Finally copy the main file
|
||||||
|
status = copyFile(tmp_result_file, result_file,
|
||||||
|
status == FORCE);
|
||||||
|
buffer->message(bformat(_("Document exported as %1$s"
|
||||||
|
"to file `%2$s'"),
|
||||||
|
formats.prettyName(format),
|
||||||
|
MakeDisplayPath(result_file)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,3 +267,47 @@ Exporter::GetExportableFormats(Buffer const & buffer, bool only_viewable)
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ExportedFile::ExportedFile(string const & s, string const & e) :
|
||||||
|
sourceName(s), exportName(e) {}
|
||||||
|
|
||||||
|
|
||||||
|
bool operator==(ExportedFile const & f1, ExportedFile const & f2)
|
||||||
|
{
|
||||||
|
return f1.sourceName == f2.sourceName &&
|
||||||
|
f1.exportName == f2.exportName;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ExportData::addExternalFile(string const & format,
|
||||||
|
string const & sourceName,
|
||||||
|
string const & exportName)
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(lyx::support::AbsolutePath(sourceName));
|
||||||
|
|
||||||
|
// Make sure that we have every file only once, otherwise copyFile()
|
||||||
|
// would ask several times if it should overwrite a file.
|
||||||
|
vector<ExportedFile> & files = externalfiles[format];
|
||||||
|
ExportedFile file(sourceName, exportName);
|
||||||
|
if (find(files.begin(), files.end(), file) == files.end())
|
||||||
|
files.push_back(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ExportData::addExternalFile(string const & format,
|
||||||
|
string const & sourceName)
|
||||||
|
{
|
||||||
|
addExternalFile(format, sourceName, OnlyFilename(sourceName));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
vector<ExportedFile> const
|
||||||
|
ExportData::externalFiles(string const & format) const
|
||||||
|
{
|
||||||
|
FileMap::const_iterator cit = externalfiles.find(format);
|
||||||
|
if (cit != externalfiles.end())
|
||||||
|
return cit->second;
|
||||||
|
return vector<ExportedFile>();
|
||||||
|
}
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#ifndef EXPORTER_H
|
#ifndef EXPORTER_H
|
||||||
#define EXPORTER_H
|
#define EXPORTER_H
|
||||||
|
|
||||||
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -42,4 +43,44 @@ public:
|
|||||||
GetExportableFormats(Buffer const & buffer, bool only_viewable);
|
GetExportableFormats(Buffer const & buffer, bool only_viewable);
|
||||||
///
|
///
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct ExportedFile {
|
||||||
|
ExportedFile(std::string const &, std::string const &);
|
||||||
|
/// absolute name of the source file
|
||||||
|
std::string sourceName;
|
||||||
|
/// final name that the exported file should get (absolute name or
|
||||||
|
/// relative to the directory of the master document)
|
||||||
|
std::string exportName;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
bool operator==(ExportedFile const &, ExportedFile const &);
|
||||||
|
|
||||||
|
|
||||||
|
class ExportData {
|
||||||
|
public:
|
||||||
|
/** add a referenced file for one format.
|
||||||
|
* No inset should ever write any file outside the tempdir.
|
||||||
|
* Instead, files that need to be exported have to be registered
|
||||||
|
* with this method.
|
||||||
|
* Then the exporter mechanism copies them to the right place, asks
|
||||||
|
* for confirmation before overwriting existing files etc.
|
||||||
|
*/
|
||||||
|
void addExternalFile(std::string const &, std::string const &,
|
||||||
|
std::string const &);
|
||||||
|
/// add a referenced file for one format.
|
||||||
|
/// The final name is the source file name without path
|
||||||
|
void addExternalFile(std::string const &, std::string const &);
|
||||||
|
/// get referenced files for one format
|
||||||
|
std::vector<ExportedFile> const
|
||||||
|
externalFiles(std::string const &) const;
|
||||||
|
private:
|
||||||
|
typedef std::map<std::string, std::vector<ExportedFile> > FileMap;
|
||||||
|
/** Files that are referenced by the export result in the
|
||||||
|
* different formats.
|
||||||
|
*/
|
||||||
|
FileMap externalfiles;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,3 +1,21 @@
|
|||||||
|
2004-06-01 Georg Baum <Georg.Baum@post.rwth-aachen.de>
|
||||||
|
|
||||||
|
* ExternalSupport.[Ch] (doSubstitution): exchange filename argument
|
||||||
|
with external_in_tmpdir and compute filename ourself
|
||||||
|
* ExternalSupport.[Ch] (updateExternal): add exportdata argument and
|
||||||
|
use it to store referenced file(s)
|
||||||
|
* ExternalSupport.C (writeExternal): write relative filename if
|
||||||
|
running latex
|
||||||
|
* ExternalTemplate.[Ch]: add ReferencedFile command
|
||||||
|
* insetgraphics.C (prepareFile, docbook, linuxdoc): add file to
|
||||||
|
runparams.exportdata
|
||||||
|
* insetgraphics.C (prepareFile): write relative filename if
|
||||||
|
running latex
|
||||||
|
* insetinclude.C (latex, docbook, linuxdoc): add file to
|
||||||
|
runparams.exportdata and write it to the temp dir instead of
|
||||||
|
writing it to the final destination
|
||||||
|
* insetinclude.C (docbook, linuxdoc): don't copy runparams
|
||||||
|
|
||||||
2004-05-19 Angus Leeming <leeming@lyx.org>
|
2004-05-19 Angus Leeming <leeming@lyx.org>
|
||||||
|
|
||||||
* insetcite.[Ch]: small change because namespace biblio is
|
* insetcite.[Ch]: small change because namespace biblio is
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
#include "converter.h"
|
#include "converter.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "exporter.h"
|
||||||
#include "format.h"
|
#include "format.h"
|
||||||
|
|
||||||
#include "support/filetools.h"
|
#include "support/filetools.h"
|
||||||
@ -58,31 +59,32 @@ void editExternal(InsetExternalParams const & params, Buffer const & buffer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
/** Substitute meta-variables in the string \p s.
|
|
||||||
\p filename has to be the filename as read from the .lyx file (this
|
|
||||||
can be an absolute path or a path relative to the parent document).
|
|
||||||
Otherwise, the $$AbsOrRelPath* variables would not work.
|
|
||||||
If we are using a temporary directory, \p filename is the mangled name.
|
|
||||||
*/
|
|
||||||
string const doSubstitution(InsetExternalParams const & params,
|
string const doSubstitution(InsetExternalParams const & params,
|
||||||
Buffer const & buffer, string const & s,
|
Buffer const & buffer, string const & s,
|
||||||
string const & filename)
|
bool external_in_tmpdir)
|
||||||
{
|
{
|
||||||
|
Buffer const * m_buffer = buffer.getMasterBuffer();
|
||||||
|
string const parentpath = external_in_tmpdir ?
|
||||||
|
m_buffer->temppath() :
|
||||||
|
buffer.filePath();
|
||||||
|
string const filename = external_in_tmpdir ?
|
||||||
|
params.filename.mangledFilename() :
|
||||||
|
params.filename.outputFilename(parentpath);
|
||||||
string result;
|
string result;
|
||||||
string const basename = support::ChangeExtension(
|
string const basename = support::ChangeExtension(
|
||||||
support::OnlyFilename(filename), string());
|
support::OnlyFilename(filename), string());
|
||||||
string const absname = support::MakeAbsPath(filename, buffer.filePath());
|
string const absname = support::MakeAbsPath(filename, parentpath);
|
||||||
string const filepath = support::OnlyPath(filename);
|
string const filepath = support::OnlyPath(filename);
|
||||||
string const abspath = support::OnlyPath(absname);
|
string const abspath = support::OnlyPath(absname);
|
||||||
Buffer const * m_buffer = buffer.getMasterBuffer();
|
string const masterpath = external_in_tmpdir ?
|
||||||
|
m_buffer->temppath() :
|
||||||
|
m_buffer->filePath();
|
||||||
string relToMasterPath = support::OnlyPath(
|
string relToMasterPath = support::OnlyPath(
|
||||||
support::MakeRelPath(absname, m_buffer->filePath()));
|
support::MakeRelPath(absname, masterpath));
|
||||||
if (relToMasterPath == "./")
|
if (relToMasterPath == "./")
|
||||||
relToMasterPath.clear();
|
relToMasterPath.clear();
|
||||||
string relToParentPath = support::OnlyPath(
|
string relToParentPath = support::OnlyPath(
|
||||||
support::MakeRelPath(absname, buffer.filePath()));
|
support::MakeRelPath(absname, parentpath));
|
||||||
if (relToParentPath == "./")
|
if (relToParentPath == "./")
|
||||||
relToParentPath.clear();
|
relToParentPath.clear();
|
||||||
|
|
||||||
@ -131,6 +133,9 @@ string const doSubstitution(InsetExternalParams const & params,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
/** update the file represented by the template.
|
/** update the file represented by the template.
|
||||||
If \param external_in_tmpdir == true, then the generated file is
|
If \param external_in_tmpdir == true, then the generated file is
|
||||||
place in the buffer's temporary directory.
|
place in the buffer's temporary directory.
|
||||||
@ -138,6 +143,7 @@ string const doSubstitution(InsetExternalParams const & params,
|
|||||||
void updateExternal(InsetExternalParams const & params,
|
void updateExternal(InsetExternalParams const & params,
|
||||||
string const & format,
|
string const & format,
|
||||||
Buffer const & buffer,
|
Buffer const & buffer,
|
||||||
|
ExportData & exportdata,
|
||||||
bool external_in_tmpdir)
|
bool external_in_tmpdir)
|
||||||
{
|
{
|
||||||
Template const * const et_ptr = getTemplatePtr(params);
|
Template const * const et_ptr = getTemplatePtr(params);
|
||||||
@ -185,8 +191,6 @@ void updateExternal(InsetExternalParams const & params,
|
|||||||
return; // FAILURE
|
return; // FAILURE
|
||||||
}
|
}
|
||||||
|
|
||||||
string from_file = params.filename.outputFilename(buffer.filePath());
|
|
||||||
|
|
||||||
// The master buffer. This is useful when there are multiple levels
|
// The master buffer. This is useful when there are multiple levels
|
||||||
// of include files
|
// of include files
|
||||||
Buffer const * m_buffer = buffer.getMasterBuffer();
|
Buffer const * m_buffer = buffer.getMasterBuffer();
|
||||||
@ -209,19 +213,33 @@ void updateExternal(InsetExternalParams const & params,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
from_file = temp_file;
|
|
||||||
abs_from_file = temp_file;
|
abs_from_file = temp_file;
|
||||||
}
|
}
|
||||||
|
|
||||||
string const to_file = doSubstitution(params, buffer,
|
string const to_file = doSubstitution(params, buffer,
|
||||||
outputFormat.updateResult,
|
outputFormat.updateResult,
|
||||||
from_file);
|
external_in_tmpdir);
|
||||||
|
|
||||||
string const abs_to_file =
|
string const abs_to_file =
|
||||||
support::MakeAbsPath(to_file, external_in_tmpdir
|
support::MakeAbsPath(to_file, external_in_tmpdir
|
||||||
? m_buffer->temppath()
|
? m_buffer->temppath()
|
||||||
: buffer.filePath());
|
: buffer.filePath());
|
||||||
|
|
||||||
|
// record the referenced files for the exporter
|
||||||
|
typedef Template::Format::FileMap FileMap;
|
||||||
|
FileMap::const_iterator rit = outputFormat.referencedFiles.begin();
|
||||||
|
FileMap::const_iterator rend = outputFormat.referencedFiles.end();
|
||||||
|
for (; rit != rend; ++rit) {
|
||||||
|
vector<string>::const_iterator fit = rit->second.begin();
|
||||||
|
vector<string>::const_iterator fend = rit->second.end();
|
||||||
|
for (; fit != fend; ++fit) {
|
||||||
|
string const file = doSubstitution(params, buffer,
|
||||||
|
*fit,
|
||||||
|
external_in_tmpdir);
|
||||||
|
exportdata.addExternalFile(rit->first, file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Do we need to perform the conversion?
|
// Do we need to perform the conversion?
|
||||||
// Yes if to_file does not exist or if from_file is newer than to_file
|
// Yes if to_file does not exist or if from_file is newer than to_file
|
||||||
if (support::compare_timestamps(abs_from_file, abs_to_file) < 0)
|
if (support::compare_timestamps(abs_from_file, abs_to_file) < 0)
|
||||||
@ -248,6 +266,7 @@ string const substituteOptions(InsetExternalParams const & params,
|
|||||||
int writeExternal(InsetExternalParams const & params,
|
int writeExternal(InsetExternalParams const & params,
|
||||||
string const & format,
|
string const & format,
|
||||||
Buffer const & buffer, ostream & os,
|
Buffer const & buffer, ostream & os,
|
||||||
|
ExportData & exportdata,
|
||||||
bool external_in_tmpdir)
|
bool external_in_tmpdir)
|
||||||
{
|
{
|
||||||
Template const * const et_ptr = getTemplatePtr(params);
|
Template const * const et_ptr = getTemplatePtr(params);
|
||||||
@ -264,34 +283,16 @@ int writeExternal(InsetExternalParams const & params,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateExternal(params, format, buffer, external_in_tmpdir);
|
updateExternal(params, format, buffer, exportdata, external_in_tmpdir);
|
||||||
|
|
||||||
string from_file = params.filename.outputFilename(buffer.filePath());
|
|
||||||
if (external_in_tmpdir && !from_file.empty()) {
|
|
||||||
// We are running stuff through LaTeX
|
|
||||||
from_file =
|
|
||||||
support::MakeAbsPath(params.filename.mangledFilename(),
|
|
||||||
buffer.getMasterBuffer()->temppath());
|
|
||||||
}
|
|
||||||
|
|
||||||
string str = doSubstitution(params, buffer, cit->second.product,
|
string str = doSubstitution(params, buffer, cit->second.product,
|
||||||
from_file);
|
external_in_tmpdir);
|
||||||
str = substituteCommands(params, str, format);
|
str = substituteCommands(params, str, format);
|
||||||
str = substituteOptions(params, str, format);
|
str = substituteOptions(params, str, format);
|
||||||
os << str;
|
os << str;
|
||||||
return int(lyx::count(str.begin(), str.end(),'\n') + 1);
|
return int(lyx::count(str.begin(), str.end(),'\n') + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Substitute meta-variables in this string
|
|
||||||
string const doSubstitution(InsetExternalParams const & params,
|
|
||||||
Buffer const & buffer, string const & s)
|
|
||||||
{
|
|
||||||
string const buffer_path = buffer.filePath();
|
|
||||||
string const filename = params.filename.outputFilename(buffer_path);
|
|
||||||
return doSubstitution(params, buffer, s, filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
// Empty template, specialised below.
|
// Empty template, specialised below.
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class Buffer;
|
class Buffer;
|
||||||
|
class ExportData;
|
||||||
class InsetExternalParams;
|
class InsetExternalParams;
|
||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
@ -33,10 +34,17 @@ void editExternal(InsetExternalParams const & params,
|
|||||||
Buffer const & buffer);
|
Buffer const & buffer);
|
||||||
|
|
||||||
|
|
||||||
/// Substitute meta-variables in string s, making use of params and buffer.
|
/** Substitute meta-variables in string \p s, making use of \p params and
|
||||||
|
\p buffer.
|
||||||
|
If \p external_in_tmpdir is true, all files are assumed to be in the
|
||||||
|
master buffers temp path, and the mangled filename is used.
|
||||||
|
Otherwise, the output filename (absolute or relative to the parent
|
||||||
|
document, as written in the .lyx file) is used.
|
||||||
|
*/
|
||||||
std::string const doSubstitution(InsetExternalParams const & params,
|
std::string const doSubstitution(InsetExternalParams const & params,
|
||||||
Buffer const & buffer,
|
Buffer const & buffer,
|
||||||
std::string const & s);
|
std::string const & s,
|
||||||
|
bool external_in_tmpdir = false);
|
||||||
|
|
||||||
|
|
||||||
/** Write the output for a specific file format
|
/** Write the output for a specific file format
|
||||||
@ -48,6 +56,7 @@ int writeExternal(InsetExternalParams const &,
|
|||||||
std::string const & format,
|
std::string const & format,
|
||||||
Buffer const &,
|
Buffer const &,
|
||||||
std::ostream &,
|
std::ostream &,
|
||||||
|
ExportData &,
|
||||||
bool external_in_tmpdir = false);
|
bool external_in_tmpdir = false);
|
||||||
|
|
||||||
} // namespace external
|
} // namespace external
|
||||||
|
@ -146,6 +146,18 @@ public:
|
|||||||
ost << "\t\tPreamble " << *pit << '\n';
|
ost << "\t\tPreamble " << *pit << '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef Template::Format::FileMap FileMap;
|
||||||
|
FileMap::const_iterator rit = ft.referencedFiles.begin();
|
||||||
|
FileMap::const_iterator rend = ft.referencedFiles.end();
|
||||||
|
for (; rit != rend; ++rit) {
|
||||||
|
vector<string>::const_iterator fit = rit->second.begin();
|
||||||
|
vector<string>::const_iterator fend = rit->second.end();
|
||||||
|
for (; fit != fend; ++fit) {
|
||||||
|
ost << "\t\tReferencedFile " << rit->first
|
||||||
|
<< " \"" << *fit << "\"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ost << "\tFormatEnd\n";
|
ost << "\tFormatEnd\n";
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
@ -452,6 +464,7 @@ void Template::Format::readFormat(LyXLex & lex)
|
|||||||
FO_PREAMBLE,
|
FO_PREAMBLE,
|
||||||
FO_TRANSFORMCOMMAND,
|
FO_TRANSFORMCOMMAND,
|
||||||
FO_TRANSFORMOPTION,
|
FO_TRANSFORMOPTION,
|
||||||
|
FO_REFERENCEDFILE,
|
||||||
FO_END
|
FO_END
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -460,6 +473,7 @@ void Template::Format::readFormat(LyXLex & lex)
|
|||||||
{ "option", FO_OPTION },
|
{ "option", FO_OPTION },
|
||||||
{ "preamble", FO_PREAMBLE },
|
{ "preamble", FO_PREAMBLE },
|
||||||
{ "product", FO_PRODUCT },
|
{ "product", FO_PRODUCT },
|
||||||
|
{ "referencedfile", FO_REFERENCEDFILE },
|
||||||
{ "requirement", FO_REQUIREMENT },
|
{ "requirement", FO_REQUIREMENT },
|
||||||
{ "transformcommand", FO_TRANSFORMCOMMAND },
|
{ "transformcommand", FO_TRANSFORMCOMMAND },
|
||||||
{ "transformoption", FO_TRANSFORMOPTION },
|
{ "transformoption", FO_TRANSFORMOPTION },
|
||||||
@ -521,6 +535,15 @@ void Template::Format::readFormat(LyXLex & lex)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case FO_REFERENCEDFILE: {
|
||||||
|
lex.next(true);
|
||||||
|
string const format = lex.getString();
|
||||||
|
lex.next(true);
|
||||||
|
string const file = lex.getString();
|
||||||
|
referencedFiles[format].push_back(file);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case FO_END:
|
case FO_END:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -76,6 +76,11 @@ struct Template {
|
|||||||
/// The factory functions for each supported transformation.
|
/// The factory functions for each supported transformation.
|
||||||
std::map<TransformID, TransformStore> command_transformers;
|
std::map<TransformID, TransformStore> command_transformers;
|
||||||
std::map<TransformID, TransformStore> option_transformers;
|
std::map<TransformID, TransformStore> option_transformers;
|
||||||
|
|
||||||
|
typedef std::map<std::string,
|
||||||
|
std::vector<std::string> > FileMap;
|
||||||
|
/// Referenced files for some formats
|
||||||
|
FileMap referencedFiles;
|
||||||
};
|
};
|
||||||
///
|
///
|
||||||
typedef std::map<std::string, Format> Formats;
|
typedef std::map<std::string, Format> Formats;
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "cursor.h"
|
#include "cursor.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "dispatchresult.h"
|
#include "dispatchresult.h"
|
||||||
|
#include "exporter.h"
|
||||||
#include "funcrequest.h"
|
#include "funcrequest.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#include "LaTeXFeatures.h"
|
#include "LaTeXFeatures.h"
|
||||||
@ -687,32 +688,37 @@ int InsetExternal::latex(Buffer const & buf, ostream & os,
|
|||||||
et.formats.find("PDFLaTeX");
|
et.formats.find("PDFLaTeX");
|
||||||
if (cit != et.formats.end())
|
if (cit != et.formats.end())
|
||||||
return external::writeExternal(params_, "PDFLaTeX",
|
return external::writeExternal(params_, "PDFLaTeX",
|
||||||
buf, os, external_in_tmpdir);
|
buf, os,
|
||||||
|
*(runparams.exportdata),
|
||||||
|
external_in_tmpdir);
|
||||||
}
|
}
|
||||||
|
return external::writeExternal(params_, "LaTeX", buf, os,
|
||||||
return external::writeExternal(params_, "LaTeX",
|
*(runparams.exportdata),
|
||||||
buf, os, external_in_tmpdir);
|
external_in_tmpdir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int InsetExternal::plaintext(Buffer const & buf, ostream & os,
|
int InsetExternal::plaintext(Buffer const & buf, ostream & os,
|
||||||
OutputParams const &) const
|
OutputParams const & runparams) const
|
||||||
{
|
{
|
||||||
return external::writeExternal(params_, "Ascii", buf, os);
|
return external::writeExternal(params_, "Ascii", buf, os,
|
||||||
|
*(runparams.exportdata));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int InsetExternal::linuxdoc(Buffer const & buf, ostream & os,
|
int InsetExternal::linuxdoc(Buffer const & buf, ostream & os,
|
||||||
OutputParams const &) const
|
OutputParams const & runparams) const
|
||||||
{
|
{
|
||||||
return external::writeExternal(params_, "LinuxDoc", buf, os);
|
return external::writeExternal(params_, "LinuxDoc", buf, os,
|
||||||
|
*(runparams.exportdata));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int InsetExternal::docbook(Buffer const & buf, ostream & os,
|
int InsetExternal::docbook(Buffer const & buf, ostream & os,
|
||||||
OutputParams const &) const
|
OutputParams const & runparams) const
|
||||||
{
|
{
|
||||||
return external::writeExternal(params_, "DocBook", buf, os);
|
return external::writeExternal(params_, "DocBook", buf, os,
|
||||||
|
*(runparams.exportdata));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,6 +58,7 @@ TODO
|
|||||||
#include "cursor.h"
|
#include "cursor.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "dispatchresult.h"
|
#include "dispatchresult.h"
|
||||||
|
#include "exporter.h"
|
||||||
#include "format.h"
|
#include "format.h"
|
||||||
#include "funcrequest.h"
|
#include "funcrequest.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
@ -93,6 +94,7 @@ using lyx::support::GetExtension;
|
|||||||
using lyx::support::getExtFromContents;
|
using lyx::support::getExtFromContents;
|
||||||
using lyx::support::IsFileReadable;
|
using lyx::support::IsFileReadable;
|
||||||
using lyx::support::LibFileSearch;
|
using lyx::support::LibFileSearch;
|
||||||
|
using lyx::support::OnlyFilename;
|
||||||
using lyx::support::rtrim;
|
using lyx::support::rtrim;
|
||||||
using lyx::support::subst;
|
using lyx::support::subst;
|
||||||
using lyx::support::Systemcall;
|
using lyx::support::Systemcall;
|
||||||
@ -453,6 +455,10 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
|
|||||||
|
|
||||||
if (zipped) {
|
if (zipped) {
|
||||||
if (params().noUnzip) {
|
if (params().noUnzip) {
|
||||||
|
// We don't know wether latex can actually handle
|
||||||
|
// this file, but we can't check, because that would
|
||||||
|
// mean to unzip the file and thereby making the
|
||||||
|
// noUnzip parameter meaningless.
|
||||||
lyxerr[Debug::GRAPHICS]
|
lyxerr[Debug::GRAPHICS]
|
||||||
<< "\tpass zipped file to LaTeX.\n";
|
<< "\tpass zipped file to LaTeX.\n";
|
||||||
// LaTeX needs the bounding box file in the tmp dir
|
// LaTeX needs the bounding box file in the tmp dir
|
||||||
@ -462,7 +468,10 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
|
|||||||
ChangeExtension(temp_file, "bb"));
|
ChangeExtension(temp_file, "bb"));
|
||||||
if (status == FAILURE)
|
if (status == FAILURE)
|
||||||
return orig_file;
|
return orig_file;
|
||||||
return temp_file;
|
runparams.exportdata->addExternalFile("latex", temp_file);
|
||||||
|
runparams.exportdata->addExternalFile("latex", bb_file);
|
||||||
|
runparams.exportdata->addExternalFile("dvi", temp_file);
|
||||||
|
return OnlyFilename(temp_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
string const unzipped_temp_file = unzippedFileName(temp_file);
|
string const unzipped_temp_file = unzippedFileName(temp_file);
|
||||||
@ -493,8 +502,12 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
|
|||||||
lyxerr[Debug::GRAPHICS]
|
lyxerr[Debug::GRAPHICS]
|
||||||
<< "\tthe orig file is: " << orig_file << endl;
|
<< "\tthe orig file is: " << orig_file << endl;
|
||||||
|
|
||||||
if (from == to)
|
if (from == to) {
|
||||||
return stripExtensionIfPossible(temp_file, to);
|
// The extension of temp_file might be != to!
|
||||||
|
runparams.exportdata->addExternalFile("latex", temp_file);
|
||||||
|
runparams.exportdata->addExternalFile("dvi", temp_file);
|
||||||
|
return OnlyFilename(stripExtensionIfPossible(temp_file, to));
|
||||||
|
}
|
||||||
|
|
||||||
string const to_file_base = RemoveExtension(temp_file);
|
string const to_file_base = RemoveExtension(temp_file);
|
||||||
string const to_file = ChangeExtension(to_file_base, to);
|
string const to_file = ChangeExtension(to_file_base, to);
|
||||||
@ -507,7 +520,9 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
|
|||||||
<< bformat(_("No conversion of %1$s is needed after all"),
|
<< bformat(_("No conversion of %1$s is needed after all"),
|
||||||
rel_file)
|
rel_file)
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
return to_file_base;
|
runparams.exportdata->addExternalFile("latex", to_file);
|
||||||
|
runparams.exportdata->addExternalFile("dvi", to_file);
|
||||||
|
return OnlyFilename(to_file_base);
|
||||||
}
|
}
|
||||||
|
|
||||||
lyxerr[Debug::GRAPHICS]
|
lyxerr[Debug::GRAPHICS]
|
||||||
@ -523,13 +538,16 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
|
|||||||
string const command =
|
string const command =
|
||||||
"sh " + LibFileSearch("scripts", "convertDefault.sh") +
|
"sh " + LibFileSearch("scripts", "convertDefault.sh") +
|
||||||
' ' + from + ':' + temp_file + ' ' +
|
' ' + from + ':' + temp_file + ' ' +
|
||||||
to + ':' + to_file_base + '.' + to;
|
to + ':' + to_file;
|
||||||
lyxerr[Debug::GRAPHICS]
|
lyxerr[Debug::GRAPHICS]
|
||||||
<< "No converter defined! I use convertDefault.sh:\n\t"
|
<< "No converter defined! I use convertDefault.sh:\n\t"
|
||||||
<< command << endl;
|
<< command << endl;
|
||||||
Systemcall one;
|
Systemcall one;
|
||||||
one.startscript(Systemcall::Wait, command);
|
one.startscript(Systemcall::Wait, command);
|
||||||
if (!IsFileReadable(ChangeExtension(to_file_base, to))) {
|
if (IsFileReadable(to_file)) {
|
||||||
|
runparams.exportdata->addExternalFile("latex", to_file);
|
||||||
|
runparams.exportdata->addExternalFile("dvi", to_file);
|
||||||
|
} else {
|
||||||
string str = bformat(_("No information for converting %1$s "
|
string str = bformat(_("No information for converting %1$s "
|
||||||
"format files to %2$s.\n"
|
"format files to %2$s.\n"
|
||||||
"Try defining a convertor in the preferences."), from, to);
|
"Try defining a convertor in the preferences."), from, to);
|
||||||
@ -537,7 +555,7 @@ string const InsetGraphics::prepareFile(Buffer const & buf,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return to_file_base;
|
return OnlyFilename(to_file_base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -651,6 +669,8 @@ int InsetGraphics::linuxdoc(Buffer const & buf, ostream & os,
|
|||||||
params().filename.relFilename(buf.filePath()):
|
params().filename.relFilename(buf.filePath()):
|
||||||
params().filename.absFilename();
|
params().filename.absFilename();
|
||||||
|
|
||||||
|
runparams.exportdata->addExternalFile("linuxdoc",
|
||||||
|
params().filename.absFilename());
|
||||||
os << "<eps file=\"" << file_name << "\">\n";
|
os << "<eps file=\"" << file_name << "\">\n";
|
||||||
os << "<img src=\"" << file_name << "\">";
|
os << "<img src=\"" << file_name << "\">";
|
||||||
return 0;
|
return 0;
|
||||||
@ -658,14 +678,18 @@ int InsetGraphics::linuxdoc(Buffer const & buf, ostream & os,
|
|||||||
|
|
||||||
|
|
||||||
// For explanation on inserting graphics into DocBook checkout:
|
// For explanation on inserting graphics into DocBook checkout:
|
||||||
// http://en.tldp.org/LDP/LDP-Author-Guide/inserting-pictures.html
|
// http://en.tldp.org/LDP/LDP-Author-Guide/html/inserting-pictures.html
|
||||||
// See also the docbook guide at http://www.docbook.org/
|
// See also the docbook guide at http://www.docbook.org/
|
||||||
int InsetGraphics::docbook(Buffer const &, ostream & os,
|
int InsetGraphics::docbook(Buffer const &, ostream & os,
|
||||||
OutputParams const &) const
|
OutputParams const & runparams) const
|
||||||
{
|
{
|
||||||
// In DocBook v5.0, the graphic tag will be eliminated from DocBook, will
|
// In DocBook v5.0, the graphic tag will be eliminated from DocBook, will
|
||||||
// need to switch to MediaObject. However, for now this is sufficient and
|
// need to switch to MediaObject. However, for now this is sufficient and
|
||||||
// easier to use.
|
// easier to use.
|
||||||
|
runparams.exportdata->addExternalFile("docbook",
|
||||||
|
params().filename.absFilename());
|
||||||
|
runparams.exportdata->addExternalFile("docbook-xml",
|
||||||
|
params().filename.absFilename());
|
||||||
os << "<graphic fileref=\"&" << graphic_label << ";\">";
|
os << "<graphic fileref=\"&" << graphic_label << ";\">";
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "cursor.h"
|
#include "cursor.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "dispatchresult.h"
|
#include "dispatchresult.h"
|
||||||
|
#include "exporter.h"
|
||||||
#include "funcrequest.h"
|
#include "funcrequest.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#include "LaTeXFeatures.h"
|
#include "LaTeXFeatures.h"
|
||||||
@ -332,13 +333,15 @@ int InsetInclude::latex(Buffer const & buffer, ostream & os,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// write it to a file (so far the complete file)
|
// write it to a file (so far the complete file)
|
||||||
string writefile = ChangeExtension(included_file, ".tex");
|
string const exportfile = ChangeExtension(incfile, ".tex");
|
||||||
|
string const mangled = FileName(ChangeExtension(included_file,
|
||||||
|
".tex")).mangledFilename();
|
||||||
|
string const writefile = MakeAbsPath(mangled, m_buffer->temppath());
|
||||||
|
|
||||||
if (!runparams.nice) {
|
if (!runparams.nice)
|
||||||
incfile = FileName(writefile).mangledFilename();
|
incfile = mangled;
|
||||||
writefile = MakeAbsPath(incfile, m_buffer->temppath());
|
|
||||||
}
|
|
||||||
lyxerr[Debug::LATEX] << "incfile:" << incfile << endl;
|
lyxerr[Debug::LATEX] << "incfile:" << incfile << endl;
|
||||||
|
lyxerr[Debug::LATEX] << "exportfile:" << exportfile << endl;
|
||||||
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
|
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
|
||||||
|
|
||||||
if (loadIfNeeded(buffer, params_)) {
|
if (loadIfNeeded(buffer, params_)) {
|
||||||
@ -366,7 +369,7 @@ int InsetInclude::latex(Buffer const & buffer, ostream & os,
|
|||||||
tmp->makeLaTeXFile(writefile,
|
tmp->makeLaTeXFile(writefile,
|
||||||
OnlyPath(masterFilename(buffer)),
|
OnlyPath(masterFilename(buffer)),
|
||||||
runparams, false);
|
runparams, false);
|
||||||
} else if (!runparams.nice) {
|
} else {
|
||||||
// Copy the file to the temp dir, so that .aux files etc.
|
// Copy the file to the temp dir, so that .aux files etc.
|
||||||
// are not created in the original dir. Files included by
|
// are not created in the original dir. Files included by
|
||||||
// this file will be found via input@path, see ../buffer.C.
|
// this file will be found via input@path, see ../buffer.C.
|
||||||
@ -388,6 +391,9 @@ int InsetInclude::latex(Buffer const & buffer, ostream & os,
|
|||||||
if (isVerbatim(params_)) {
|
if (isVerbatim(params_)) {
|
||||||
os << '\\' << params_.getCmdName() << '{' << incfile << '}';
|
os << '\\' << params_.getCmdName() << '{' << incfile << '}';
|
||||||
} else if (type(params_) == INPUT) {
|
} else if (type(params_) == INPUT) {
|
||||||
|
runparams.exportdata->addExternalFile("latex", writefile,
|
||||||
|
exportfile);
|
||||||
|
|
||||||
// \input wants file with extension (default is .tex)
|
// \input wants file with extension (default is .tex)
|
||||||
if (!IsLyXFilename(included_file)) {
|
if (!IsLyXFilename(included_file)) {
|
||||||
os << '\\' << params_.getCmdName() << '{' << incfile << '}';
|
os << '\\' << params_.getCmdName() << '{' << incfile << '}';
|
||||||
@ -397,6 +403,9 @@ int InsetInclude::latex(Buffer const & buffer, ostream & os,
|
|||||||
<< '}';
|
<< '}';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
runparams.exportdata->addExternalFile("latex", writefile,
|
||||||
|
exportfile);
|
||||||
|
|
||||||
// \include don't want extension and demands that the
|
// \include don't want extension and demands that the
|
||||||
// file really have .tex
|
// file really have .tex
|
||||||
os << '\\' << params_.getCmdName() << '{'
|
os << '\\' << params_.getCmdName() << '{'
|
||||||
@ -428,31 +437,34 @@ int InsetInclude::linuxdoc(Buffer const & buffer, ostream & os,
|
|||||||
|
|
||||||
string const included_file = includedFilename(buffer, params_);
|
string const included_file = includedFilename(buffer, params_);
|
||||||
|
|
||||||
|
// write it to a file (so far the complete file)
|
||||||
|
string const exportfile = ChangeExtension(incfile, ".sgml");
|
||||||
|
string writefile = ChangeExtension(included_file, ".sgml");
|
||||||
|
|
||||||
if (loadIfNeeded(buffer, params_)) {
|
if (loadIfNeeded(buffer, params_)) {
|
||||||
Buffer * tmp = bufferlist.getBuffer(included_file);
|
Buffer * tmp = bufferlist.getBuffer(included_file);
|
||||||
|
|
||||||
// write it to a file (so far the complete file)
|
writefile = MakeAbsPath(FileName(writefile).mangledFilename(),
|
||||||
string writefile = ChangeExtension(included_file, ".sgml");
|
buffer.getMasterBuffer()->temppath());
|
||||||
|
if (!runparams.nice)
|
||||||
if (!runparams.nice) {
|
incfile = writefile;
|
||||||
incfile = FileName(writefile).mangledFilename();
|
|
||||||
writefile = MakeAbsPath(incfile,
|
|
||||||
buffer.getMasterBuffer()->temppath());
|
|
||||||
}
|
|
||||||
|
|
||||||
lyxerr[Debug::LATEX] << "incfile:" << incfile << endl;
|
lyxerr[Debug::LATEX] << "incfile:" << incfile << endl;
|
||||||
|
lyxerr[Debug::LATEX] << "exportfile:" << exportfile << endl;
|
||||||
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
|
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
|
||||||
|
|
||||||
OutputParams runp = runparams;
|
tmp->makeLinuxDocFile(writefile, runparams, true);
|
||||||
tmp->makeLinuxDocFile(writefile, runp, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isVerbatim(params_)) {
|
if (isVerbatim(params_)) {
|
||||||
os << "<![CDATA["
|
os << "<![CDATA["
|
||||||
<< GetFileContents(included_file)
|
<< GetFileContents(included_file)
|
||||||
<< "]]>";
|
<< "]]>";
|
||||||
} else
|
} else {
|
||||||
|
runparams.exportdata->addExternalFile("linuxdoc", writefile,
|
||||||
|
exportfile);
|
||||||
os << '&' << include_label << ';';
|
os << '&' << include_label << ';';
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -469,25 +481,31 @@ int InsetInclude::docbook(Buffer const & buffer, ostream & os,
|
|||||||
|
|
||||||
string const included_file = includedFilename(buffer, params_);
|
string const included_file = includedFilename(buffer, params_);
|
||||||
|
|
||||||
|
// write it to a file (so far the complete file)
|
||||||
|
string const exportfile = ChangeExtension(incfile, ".sgml");
|
||||||
|
string writefile = ChangeExtension(included_file, ".sgml");
|
||||||
|
|
||||||
if (loadIfNeeded(buffer, params_)) {
|
if (loadIfNeeded(buffer, params_)) {
|
||||||
Buffer * tmp = bufferlist.getBuffer(included_file);
|
Buffer * tmp = bufferlist.getBuffer(included_file);
|
||||||
|
|
||||||
// write it to a file (so far the complete file)
|
string const mangled = FileName(writefile).mangledFilename();
|
||||||
string writefile = ChangeExtension(included_file, ".sgml");
|
writefile = MakeAbsPath(mangled,
|
||||||
|
buffer.getMasterBuffer()->temppath());
|
||||||
if (!runparams.nice) {
|
if (!runparams.nice)
|
||||||
incfile = FileName(writefile).mangledFilename();
|
incfile = mangled;
|
||||||
writefile = MakeAbsPath(incfile,
|
|
||||||
buffer.getMasterBuffer()->temppath());
|
|
||||||
}
|
|
||||||
|
|
||||||
lyxerr[Debug::LATEX] << "incfile:" << incfile << endl;
|
lyxerr[Debug::LATEX] << "incfile:" << incfile << endl;
|
||||||
|
lyxerr[Debug::LATEX] << "exportfile:" << exportfile << endl;
|
||||||
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
|
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
|
||||||
|
|
||||||
OutputParams runp = runparams;
|
tmp->makeDocBookFile(writefile, runparams, true);
|
||||||
tmp->makeDocBookFile(writefile, runp, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
runparams.exportdata->addExternalFile("docbook", writefile,
|
||||||
|
exportfile);
|
||||||
|
runparams.exportdata->addExternalFile("docbook-xml", writefile,
|
||||||
|
exportfile);
|
||||||
|
|
||||||
if (isVerbatim(params_)) {
|
if (isVerbatim(params_)) {
|
||||||
os << "<inlinegraphic fileref=\""
|
os << "<inlinegraphic fileref=\""
|
||||||
<< '&' << include_label << ';'
|
<< '&' << include_label << ';'
|
||||||
|
@ -15,6 +15,9 @@
|
|||||||
#include "support/types.h"
|
#include "support/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
class ExportData;
|
||||||
|
|
||||||
|
|
||||||
struct OutputParams {
|
struct OutputParams {
|
||||||
//
|
//
|
||||||
enum FLAVOR {
|
enum FLAVOR {
|
||||||
@ -26,7 +29,7 @@ struct OutputParams {
|
|||||||
OutputParams()
|
OutputParams()
|
||||||
: flavor(LATEX), nice(false), moving_arg(false),
|
: flavor(LATEX), nice(false), moving_arg(false),
|
||||||
free_spacing(false), use_babel(false),
|
free_spacing(false), use_babel(false),
|
||||||
mixed_content(false), linelen(0)
|
mixed_content(false), linelen(0), exportdata(0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/** The latex that we export depends occasionally on what is to
|
/** The latex that we export depends occasionally on what is to
|
||||||
@ -65,6 +68,12 @@ struct OutputParams {
|
|||||||
/** Line length to use with ascii export.
|
/** Line length to use with ascii export.
|
||||||
*/
|
*/
|
||||||
lyx::size_type linelen;
|
lyx::size_type linelen;
|
||||||
|
|
||||||
|
/** Export data filled in by the latex(), docbook() etc methods.
|
||||||
|
This is a hack: Make it possible to add stuff to constant
|
||||||
|
OutputParams instances.
|
||||||
|
*/
|
||||||
|
ExportData *exportdata;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LATEXRUNPARAMS_H
|
#endif // LATEXRUNPARAMS_H
|
||||||
|
Loading…
Reference in New Issue
Block a user