#include "support/lstrings.h"
#include "support/bind.h"
+#include "support/TempFile.h"
#include <sstream>
#include <fstream>
typedef vector<SnippetPair> BitmapFile;
-string const unique_filename(string const & bufferpath)
+FileName const unique_tex_filename(FileName const & bufferpath)
{
- static int theCounter = 0;
- string const filename = lyx::convert<string>(theCounter++) + "lyxpreview";
- return addName(bufferpath, filename);
+ TempFile tempfile(bufferpath, "lyxpreviewXXXXXX.tex");
+ tempfile.setAutoRemove(false);
+ return tempfile.name();
}
-lyx::Converter const * setConverter(string const from)
+lyx::Converter const * setConverter(string const & from)
{
typedef vector<string> FmtList;
typedef lyx::graphics::Cache GCache;
return ptr;
}
+ // FIXME THREAD
static bool first = true;
if (first) {
first = false;
/// Called by the ForkedCall process that generated the bitmap files.
void finishedGenerating(pid_t, int);
///
- void dumpPreamble(otexstream &) const;
+ void dumpPreamble(otexstream &, OutputParams::FLAVOR) const;
///
void dumpData(odocstream &, BitmapFile const &) const;
LYXERR(Debug::GRAPHICS, "PreviewLoader::startLoading()");
// As used by the LaTeX file and by the resulting image files
- string const directory = buffer_.temppath();
+ FileName const directory(buffer_.temppath());
- string const filename_base = unique_filename(directory);
+ FileName const latexfile = unique_tex_filename(directory);
+ string const filename_base = removeExtension(latexfile.absFileName());
// Create an InProgress instance to place in the map of all
// such processes if it starts correctly.
- InProgress inprogress(filename_base, pending_, pconverter_->to);
+ InProgress inprogress(filename_base, pending_, pconverter_->to());
// clear pending_, so we're ready to start afresh.
pending_.clear();
// Output the LaTeX file.
- FileName const latexfile(filename_base + ".tex");
-
// we use the encoding of the buffer
Encoding const & enc = buffer_.params().encoding();
ofdocstream of;
try { of.reset(enc.iconvName()); }
- catch (iconv_codecvt_facet_exception & e) {
+ catch (iconv_codecvt_facet_exception const & e) {
LYXERR0("Caught iconv exception: " << e.what()
<< "\nUnable to create LaTeX file: " << latexfile);
return;
return;
}
of << "\\batchmode\n";
- dumpPreamble(os);
+
+ LYXERR(Debug::LATEX, "Format = " << buffer_.params().getDefaultOutputFormat());
+ string latexparam = "";
+ OutputParams::FLAVOR flavor = buffer_.params().getOutputFlavor();
+ if (buffer_.params().encoding().package() == Encoding::japanese) {
+ latexparam = " --latex=platex";
+ flavor = OutputParams::LATEX;
+ }
+ else if (buffer_.params().useNonTeXFonts) {
+ if (flavor == OutputParams::LUATEX)
+ latexparam = " --latex=lualatex";
+ else {
+ flavor = OutputParams::XETEX;
+ latexparam = " --latex=xelatex";
+ }
+ }
+ else {
+ switch (flavor) {
+ case OutputParams::PDFLATEX:
+ latexparam = " --latex=pdflatex";
+ break;
+ case OutputParams::XETEX:
+ latexparam = " --latex=xelatex";
+ break;
+ case OutputParams::LUATEX:
+ latexparam = " --latex=lualatex";
+ break;
+ case OutputParams::DVILUATEX:
+ latexparam = " --latex=dvilualatex";
+ break;
+ default:
+ flavor = OutputParams::LATEX;
+ }
+ }
+ dumpPreamble(os, flavor);
// handle inputenc etc.
- buffer_.params().writeEncodingPreamble(os, features);
+ // I think, this is already hadled by dumpPreamble(): Kornel
+ // buffer_.params().writeEncodingPreamble(os, features);
of << "\n\\begin{document}\n";
dumpData(of, inprogress.snippets);
of << "\n\\end{document}\n";
return;
}
- double const font_scaling_factor =
- buffer_.isExporting() ? 75.0 * buffer_.params().html_math_img_scale
- : 0.01 * lyxrc.dpi * lyxrc.zoom * lyxrc.preview_scale_factor;
+ double const font_scaling_factor = buffer_.fontScalingFactor();
- // FIXME XHTML
- // The colors should be customizable.
- ColorCode const bg = buffer_.isExporting()
- ? Color_white : PreviewLoader::backgroundColor();
- ColorCode const fg = buffer_.isExporting()
- ? Color_black : PreviewLoader::foregroundColor();
// The conversion command.
ostringstream cs;
- cs << pconverter_->command
+ cs << pconverter_->command()
<< " " << quoteName(latexfile.toFilesystemEncoding())
- << " --dpi " << int(font_scaling_factor)
- << " --fg " << theApp()->hexName(fg)
- << " --bg " << theApp()->hexName(bg);
- // FIXME what about LuaTeX?
- if (buffer_.params().useNonTeXFonts)
- cs << " --latex=xelatex";
- if (buffer_.params().encoding().package() == Encoding::japanese)
- cs << " --latex=platex";
+ << " --dpi " << int(font_scaling_factor);
+
+ // FIXME XHTML
+ // The colors should be customizable.
+ if (!buffer_.isExporting()) {
+ ColorCode const fg = PreviewLoader::foregroundColor();
+ ColorCode const bg = PreviewLoader::backgroundColor();
+ cs << " --fg " << theApp()->hexName(fg)
+ << " --bg " << theApp()->hexName(bg);
+ }
+
+ cs << latexparam;
if (buffer_.params().bibtex_command != "default")
cs << " --bibtex=" << quoteName(buffer_.params().bibtex_command);
else if (buffer_.params().encoding().package() == Encoding::japanese)
if (buffer_.params().bufferFormat() == "lilypond-book")
cs << " --lilypond";
- string const command = libScriptSearch(cs.str());
+ string const command = cs.str();
if (wait) {
ForkedCall call(buffer_.filePath());
int ret = call.startScript(ForkedProcess::Wait, command);
+ // FIXME THREAD
static int fake = (2^20) + 1;
int pid = fake++;
inprogress.pid = pid;
}
+double PreviewLoader::displayPixelRatio() const
+{
+ return buffer().params().display_pixel_ratio;
+}
+
void PreviewLoader::Impl::finishedGenerating(pid_t pid, int retval)
{
// Paranoia check!
}
-void PreviewLoader::Impl::dumpPreamble(otexstream & os) const
+void PreviewLoader::Impl::dumpPreamble(otexstream & os, OutputParams::FLAVOR flavor) const
{
// Dump the preamble only.
+ LYXERR(Debug::LATEX, "dumpPreamble, flavor == " << flavor);
OutputParams runparams(&buffer_.params().encoding());
- if (buffer_.params().useNonTeXFonts)
- runparams.flavor = OutputParams::XETEX;
- else
- runparams.flavor = OutputParams::LATEX;
+ runparams.flavor = flavor;
runparams.nice = true;
runparams.moving_arg = true;
runparams.free_spacing = true;
- buffer_.writeLaTeXSource(os, runparams, true, false);
+ runparams.is_child = buffer_.parent();
+ buffer_.writeLaTeXSource(os, buffer_.filePath(), runparams, Buffer::OnlyPreamble);
// FIXME! This is a HACK! The proper fix is to control the 'true'
// passed to WriteStream below: