+2004-11-01 Georg Baum <Georg.Baum@post.rwth-aachen.de>
+
+ * configure.m4: add copier for pstex_t and pdftex_t files
+ * external_templates: (Template XFig): correct referenced files
+ * scripts/tex_copy.py: new
+ * Makefile.am: add scripts/tex_copy.py
+
2004-10-30 José Matos <jamatos@lyx.org>
* db_stdclasses.inc:
scripts/fig2pstex.sh \
scripts/listerrors \
scripts/legacy_lyxpreview2ppm.py \
- scripts/lyxpreview2bitmap.py
+ scripts/lyxpreview2bitmap.py \
+ scripts/tex_copy.py
templatesdir = $(pkgdatadir)/templates
dist_templates_DATA = \
\\converter ps fax "$fax_command" ""
\\converter ps pdf "$ps_to_pdf_command" ""
\\converter word latex "$word_to_latex_command" ""
-
-\\copier fig "sh \$\$s/fig_copy.sh \$\$i \$\$o"
EOF
### the graphic converter part with the predefined ones
cat >>$outfile <<EOF
+\\copier fig "sh \$\$s/fig_copy.sh \$\$i \$\$o"
+\\copier pstex "python \$\$s/tex_copy.py \$\$i \$\$o \$\$l"
+\\copier pdftex "python \$\$s/tex_copy.py \$\$i \$\$o \$\$l"
+
$rc_entries
\\font_encoding "$chk_fontenc"
EOF
Requirement "graphicx"
# Preamble WarnNotFound
# Preamble InputOrWarn
- ReferencedFile latex "$$AbsPath$$Basename.pstex_t"
- ReferencedFile latex "$$AbsPath$$Basename.pstex"
- ReferencedFile dvi "$$AbsPath$$Basename.pstex"
+ ReferencedFile latex "$$AbsOrRelPathMaster$$Basename.pstex_t"
+ ReferencedFile latex "$$AbsPath$$Basename.eps"
+ ReferencedFile dvi "$$AbsPath$$Basename.eps"
FormatEnd
Format PDFLaTeX
TransformCommand Rotate RotationLatexCommand
Requirement "graphicx"
# Preamble WarnNotFound
# Preamble InputOrWarn
- ReferencedFile latex "$$AbsPath$$Basename.pdftex_t"
- ReferencedFile latex "$$AbsPath$$Basename.pdftex"
+ ReferencedFile latex "$$AbsOrRelPathMaster$$Basename.pdftex_t"
+ ReferencedFile latex "$$AbsPath$$Basename.pdf"
FormatEnd
Format Ascii
Product "$$Contents(\"$$AbsPath$$Basename.asc\")"
--- /dev/null
+#! /usr/bin/env python
+# -*- coding: iso-8859-1 -*-
+
+# file tex_copy.py
+# This file is part of LyX, the document processor.
+# Licence details can be found in the file COPYING.
+
+# author Angus Leeming
+# author Georg Baum
+
+# Full author contact details are available in file CREDITS
+
+# Usage:
+# tex_copy.py from file> <to file> <latex name>
+
+# This script will copy a file <from file> to <to file>.
+# <to file> is no exact copy of <from file>, but any occurence of <basename>
+# where <basename> is <from file> without directory and extension parts is
+# replaced by <latex name> without extension.
+
+
+import os, string, sys
+
+from lyxpreview_tools import error
+
+
+def usage(prog_name):
+ return "Usage: %s <from file> <to file> <latex name>" % prog_name
+
+
+def main(argv):
+ # Parse and manipulate the command line arguments.
+ if len(argv) != 4:
+ error(usage(argv[0]))
+
+ # input file
+ abs_from_file = argv[1]
+ if not os.path.isabs(abs_from_file):
+ error("%s is no absolute file name.\n%s"\
+ % abs_from_file, usage(argv[0]))
+ from_dir, rel_from_file = os.path.split(abs_from_file)
+ from_base, from_ext = os.path.splitext(rel_from_file)
+
+ # output file
+ abs_to_file = argv[2]
+ if not os.path.isabs(abs_to_file):
+ error("%s is no absolute file name.\n%s"\
+ % abs_to_file, usage(argv[0]))
+ to_dir, rel_to_file = os.path.split(abs_to_file)
+ to_base, to_ext = os.path.splitext(rel_to_file)
+
+ # latex file name
+ latex_file = argv[3]
+ latex_base, latex_ext = os.path.splitext(latex_file)
+
+ # Read the input file and write the output file
+ from_file = open(abs_from_file, 'rb')
+ to_file = open(abs_to_file, 'wb')
+ lines = from_file.readlines()
+ for line in lines:
+ to_file.write(line.replace(from_base, latex_base))
+ from_file.close()
+ to_file.close()
+
+ return 0
+
+
+if __name__ == "__main__":
+ main(sys.argv)
+2004-11-01 Georg Baum <Georg.Baum@post.rwth-aachen.de>
+
+ * exporter.C (copyFile): use the mover instead of support::copy()
+ * exporter.C (Export): pass format and latex name to copyFile()
+ * exporter.h (addExternalFile): document
+ * mover.[Ch] (do_copy, do_rename): new methods with 3 arguments
+
2004-10-31 Jürgen Spitzmüller <j.spitzmueller@gmx.de>
* text.C (leftMargin): do not indent paragraphs in charstyle insets.
#include "format.h"
#include "gettext.h"
#include "lyxrc.h"
+#include "mover.h"
#include "output_plaintext.h"
#include "outputparams.h"
#include "frontends/Alert.h"
using lyx::support::bformat;
using lyx::support::ChangeExtension;
using lyx::support::contains;
+using lyx::support::getFormatFromContents;
using lyx::support::MakeAbsPath;
using lyx::support::MakeDisplayPath;
using lyx::support::OnlyFilename;
* overwriting files anymore.
* - CANCEL if the export should be cancelled
*/
-CopyStatus copyFile(string const & sourceFile, string const & destFile,
- bool force)
+CopyStatus copyFile(string const & format,
+ string const & sourceFile, string const & destFile,
+ string const & latexFile, bool force)
{
CopyStatus ret = force ? FORCE : SUCCESS;
}
}
- if (!lyx::support::copy(sourceFile, destFile))
+ Mover const & mover = movers(format);
+ if (!mover.copy(sourceFile, destFile, latexFile))
Alert::error(_("Couldn't copy file"),
bformat(_("Copying %1$s to %2$s failed."),
MakeDisplayPath(sourceFile),
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,
+ it != files.end() && status != CANCEL; ++it) {
+ string const fmt = getFormatFromContents(it->sourceName);
+ status = copyFile(fmt, it->sourceName,
MakeAbsPath(it->exportName, dest),
- status == FORCE);
+ it->exportName, status == FORCE);
+ }
if (status == CANCEL) {
buffer->message(_("Document export cancelled."));
} else {
// Finally copy the main file
- status = copyFile(tmp_result_file, result_file,
+ status = copyFile(format, tmp_result_file,
+ result_file, result_file,
status == FORCE);
buffer->message(bformat(_("Document exported as %1$s"
"to file `%2$s'"),
* with this method.
* Then the exporter mechanism copies them to the right place, asks
* for confirmation before overwriting existing files etc.
+ * \param format format that references the given file
+ * \param sourceName source file name. Needs to be absolute
+ * \param exportName resulting file name. Can be either absolute
+ * or relative to the exported document.
*/
- 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
+ void addExternalFile(std::string const & format,
+ std::string const & sourceName,
+ std::string const & exportName);
+ /** add a referenced file for one format.
+ * The final name is the source file name without path.
+ * \param format format that references the given file
+ * \param sourceName source file name. Needs to be absolute
+ */
+ void addExternalFile(std::string const & format,
+ std::string const & sourceName);
+ /// get referenced files for \p format
std::vector<ExportedFile> const
- externalFiles(std::string const &) const;
+ externalFiles(std::string const & format) const;
private:
typedef std::map<std::string, std::vector<ExportedFile> > FileMap;
/** Files that are referenced by the export result in the
+2004-11-01 Georg Baum <Georg.Baum@post.rwth-aachen.de>
+
+ * ExternalSupport.C (updateExternal): convert files in the temp dir
+
2004-10-31 Jürgen Spitzmüller <j.spitzmueller@gmx.de>
* insetcharstyle.C: drawing cosmetics.
// of include files
Buffer const * m_buffer = buffer.getMasterBuffer();
- if (external_in_tmpdir && !abs_from_file.empty()) {
- // We are running stuff through LaTeX
- string const temp_file =
- support::MakeAbsPath(params.filename.mangledFilename(),
- m_buffer->temppath());
+ // We copy the source file to the temp dir and do the conversion
+ // there if necessary
+ string const temp_file =
+ support::MakeAbsPath(params.filename.mangledFilename(),
+ m_buffer->temppath());
+ if (!abs_from_file.empty()) {
unsigned long const from_checksum = support::sum(abs_from_file);
unsigned long const temp_checksum = support::sum(temp_file);
return; // FAILURE
}
}
-
- abs_from_file = temp_file;
}
+ // the generated file (always in the temp dir)
string const to_file = doSubstitution(params, buffer,
outputFormat.updateResult,
- external_in_tmpdir);
-
+ true);
string const abs_to_file =
- support::MakeAbsPath(to_file, external_in_tmpdir
- ? m_buffer->temppath()
- : buffer.filePath());
+ support::MakeAbsPath(to_file, m_buffer->temppath());
- // record the referenced files for the exporter
+ // Record the referenced files for the exporter.
+ // The exporter will copy them to the export dir.
typedef Template::Format::FileMap FileMap;
FileMap::const_iterator rit = outputFormat.referencedFiles.begin();
FileMap::const_iterator rend = outputFormat.referencedFiles.end();
vector<string>::const_iterator fit = rit->second.begin();
vector<string>::const_iterator fend = rit->second.end();
for (; fit != fend; ++fit) {
+ string const source = support::MakeAbsPath(
+ doSubstitution(params, buffer, *fit,
+ true),
+ m_buffer->temppath());
string const file = doSubstitution(params, buffer,
*fit,
external_in_tmpdir);
- exportdata.addExternalFile(rit->first, file);
+ // if file is a relative name, it is interpreted
+ // relative to the master document.
+ exportdata.addExternalFile(rit->first, source, file);
}
}
// Do we need to perform the conversion?
// 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(temp_file, abs_to_file) < 0)
return; // SUCCESS
-
string const to_file_base =
support::ChangeExtension(to_file, string());
/* bool const success = */
- converters.convert(&buffer, abs_from_file, to_file_base,
+ converters.convert(&buffer, temp_file, to_file_base,
from_format, to_format);
// return success
}
Movers system_movers;
-bool Mover::do_copy(string const & from, string const & to) const
+bool Mover::do_copy(string const & from, string const & to,
+ string const &) const
{
return support::copy(from, to);
}
-bool Mover::do_rename(string const & from, string const & to) const
+bool Mover::do_rename(string const & from, string const & to,
+ string const &) const
{
return support::rename(from, to);
}
-bool SpecialisedMover::do_copy(string const & from, string const & to) const
+bool SpecialisedMover::do_copy(string const & from, string const & to,
+ string const & latex) const
{
if (command_.empty())
- return Mover::do_copy(from, to);
+ return Mover::do_copy(from, to, latex);
string command = support::LibScriptSearch(command_);
command = support::subst(command, "$$i", from);
command = support::subst(command, "$$o", to);
+ command = support::subst(command, "$$l", latex);
support::Systemcall one;
return one.startscript(support::Systemcall::Wait, command) == 0;
}
-bool SpecialisedMover::do_rename(string const & from, string const & to) const
+bool SpecialisedMover::do_rename(string const & from, string const & to,
+ string const & latex) const
{
if (command_.empty())
- return Mover::do_rename(from, to);
+ return Mover::do_rename(from, to, latex);
- if (!do_copy(from, to))
+ if (!do_copy(from, to, latex))
return false;
return support::unlink(from) == 0;
}
virtual ~Mover() {}
/** Copy file @c from to @c to.
+ * This version should be used to copy files from the original
+ * location to the temporary directory, since @c to and @c latex
+ * would be equal in this case.
* \returns true if successful.
*/
bool
copy(std::string const & from, std::string const & to) const
{
- return do_copy(from, to);
+ return do_copy(from, to, to);
+ }
+
+ /** Copy file @c from to @c to.
+ * \see SpecialisedMover::SpecialisedMover() for an explanation of
+ * @c latex.
+ * This version should be used to copy files from the temporary
+ * directory to the export location, since @c to and @c latex may
+ * not be equal in this case.
+ * \returns true if successful.
+ */
+ bool
+ copy(std::string const & from, std::string const & to,
+ std::string const & latex) const
+ {
+ return do_copy(from, to, latex);
}
/** Rename file @c from as @c to.
+ * This version should be used to move files from the original
+ * location to the temporary directory, since @c to and @c latex
+ * would be equal in this case.
* \returns true if successful.
*/
bool
rename(std::string const & from, std::string const & to) const
{
- return do_rename(from, to);
+ return do_rename(from, to, to);
+ }
+
+ /** Rename file @c from as @c to.
+ * \see SpecialisedMover::SpecialisedMover() for an explanation of
+ * @c latex.
+ * This version should be used to move files from the temporary
+ * directory to the export location, since @c to and @c latex may
+ * not be equal in this case.
+ * \returns true if successful.
+ */
+ bool
+ rename(std::string const & from, std::string const & to,
+ std::string const & latex) const
+ {
+ return do_rename(from, to, latex);
}
protected:
virtual bool
- do_copy(std::string const & from, std::string const & to) const;
+ do_copy(std::string const & from, std::string const & to,
+ std::string const &) const;
virtual bool
- do_rename(std::string const & from, std::string const & to) const;
+ do_rename(std::string const & from, std::string const & to,
+ std::string const &) const;
};
/** @c command should be of the form
* <code>
- * sh $$s/copy_fig.sh $$i $$o
+ * sh $$s/copy_fig.sh $$i $$o $$l
* </code>
* where $$s is a placeholder for the lyx script directory,
* $$i is a placeholder for the name of the file to be moved,
- * $$o is a placeholder for the name of the file after moving.
+ * $$o is a placeholder for the name of the file after moving,
+ * $$l is a placeholder for the name of the file after moving,
+ * suitable as argument to a latex include command. This is
+ * either an absolute filename or relative to the master
+ * document.
+ * $$o and $$l can only differ if the file is copied from the
+ * temporary directory to the export location. If it is copied
+ * from the original location to the temporary directory, they
+ * are the same, so $$l may be ommitted in this case.
*/
SpecialisedMover(std::string const & command)
: command_(command) {}
private:
virtual bool
- do_copy(std::string const & from, std::string const & to) const;
+ do_copy(std::string const & from, std::string const & to,
+ std::string const & latex) const;
virtual bool
- do_rename(std::string const & from, std::string const & to) const;
+ do_rename(std::string const & from, std::string const & to,
+ std::string const & latex) const;
std::string command_;
};