X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fgraphics%2FPreviewLoader.cpp;h=b4d78e0ab5b68503d21445c7a2b652ecda124d90;hb=99c5a46c68bd605c03d4e3a86811831ed7dd3d37;hp=80740ac4dc3a016e298bc9d9c0b00f5330323f47;hpb=1899bf04faa53c39355adefc08b1b93165b1fffc;p=lyx.git diff --git a/src/graphics/PreviewLoader.cpp b/src/graphics/PreviewLoader.cpp index 80740ac4dc..b4d78e0ab5 100644 --- a/src/graphics/PreviewLoader.cpp +++ b/src/graphics/PreviewLoader.cpp @@ -216,7 +216,7 @@ private: /// Called by the ForkedCall process that generated the bitmap files. void finishedGenerating(pid_t, int); /// - void dumpPreamble(odocstream &) const; + void dumpPreamble(otexstream &) const; /// void dumpData(odocstream &, BitmapFile const &) const; @@ -388,11 +388,7 @@ namespace graphics { PreviewLoader::Impl::Impl(PreviewLoader & p, Buffer const & b) : parent_(p), buffer_(b) { - if (b.bufferFormat() == "lilypond-book") - pconverter_ = setConverter("lyxpreview-lytex"); - else if (b.params().encoding().package() == Encoding::japanese) - pconverter_ = setConverter("lyxpreview-platex"); - else + if (!pconverter_) pconverter_ = setConverter("lyxpreview"); } @@ -551,13 +547,14 @@ void PreviewLoader::Impl::startLoading(bool wait) 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; } TexRow texrow; + otexstream os(of, texrow); OutputParams runparams(&enc); LaTeXFeatures features(buffer_, buffer_.params(), runparams); @@ -570,9 +567,9 @@ void PreviewLoader::Impl::startLoading(bool wait) return; } of << "\\batchmode\n"; - dumpPreamble(of); + dumpPreamble(os); // handle inputenc etc. - buffer_.params().writeEncodingPreamble(of, features, texrow); + buffer_.params().writeEncodingPreamble(os, features); of << "\n\\begin{document}\n"; dumpData(of, inprogress.snippets); of << "\n\\end{document}\n"; @@ -586,28 +583,40 @@ void PreviewLoader::Impl::startLoading(bool wait) 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; + + // The conversion command. + ostringstream cs; + cs << pconverter_->command + << " " << quoteName(latexfile.toFilesystemEncoding()) + << " --dpi " << int(font_scaling_factor); // 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 << ' ' << pconverter_->to << ' ' - << quoteName(latexfile.toFilesystemEncoding()) << ' ' - << int(font_scaling_factor) << ' ' - << theApp()->hexName(fg) << ' ' - << theApp()->hexName(bg); + if (!buffer_.isExporting()) { + ColorCode const fg = PreviewLoader::foregroundColor(); + ColorCode const bg = PreviewLoader::backgroundColor(); + cs << " --fg " << theApp()->hexName(fg) + << " --bg " << theApp()->hexName(bg); + } + // FIXME what about LuaTeX? - if (buffer_.bufferFormat() == "xetex") - cs << " xelatex"; + if (buffer_.params().useNonTeXFonts) + cs << " --latex=xelatex"; + if (buffer_.params().encoding().package() == Encoding::japanese) + cs << " --latex=platex"; + if (buffer_.params().bibtex_command != "default") + cs << " --bibtex=" << quoteName(buffer_.params().bibtex_command); + else if (buffer_.params().encoding().package() == Encoding::japanese) + cs << " --bibtex=" << quoteName(lyxrc.jbibtex_command); + else + cs << " --bibtex=" << quoteName(lyxrc.bibtex_command); + if (buffer_.params().bufferFormat() == "lilypond-book") + cs << " --lilypond"; string const command = libScriptSearch(cs.str()); if (wait) { - ForkedCall call; + ForkedCall call(buffer_.filePath()); int ret = call.startScript(ForkedProcess::Wait, command); static int fake = (2^20) + 1; int pid = fake++; @@ -623,7 +632,7 @@ void PreviewLoader::Impl::startLoading(bool wait) convert_ptr(new ForkedCall::SignalType); convert_ptr->connect(bind(&Impl::finishedGenerating, this, _1, _2)); - ForkedCall call; + ForkedCall call(buffer_.filePath()); int ret = call.startScript(command, convert_ptr); if (ret != 0) { @@ -674,10 +683,14 @@ void PreviewLoader::Impl::finishedGenerating(pid_t pid, int retval) FileName const & file = it->second; double af = ascent_fractions[metrics_counter]; - PreviewImagePtr ptr(new PreviewImage(parent_, snip, file, af)); - cache_[snip] = ptr; + // Add the image to the cache only if it's actually present + if (file.isReadableFile()) { + PreviewImagePtr ptr(new PreviewImage(parent_, snip, file, af)); + cache_[snip] = ptr; + + newimages.push_back(ptr); + } - newimages.push_back(ptr); } // Remove the item from the list of still-executing processes. @@ -694,15 +707,19 @@ void PreviewLoader::Impl::finishedGenerating(pid_t pid, int retval) } -void PreviewLoader::Impl::dumpPreamble(odocstream & os) const +void PreviewLoader::Impl::dumpPreamble(otexstream & os) const { // Dump the preamble only. OutputParams runparams(&buffer_.params().encoding()); - runparams.flavor = OutputParams::LATEX; + if (buffer_.params().useNonTeXFonts) + runparams.flavor = OutputParams::XETEX; + else + runparams.flavor = OutputParams::LATEX; runparams.nice = true; runparams.moving_arg = true; runparams.free_spacing = true; - buffer_.writeLaTeXSource(os, buffer_.filePath(), 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: @@ -727,26 +744,7 @@ void PreviewLoader::Impl::dumpPreamble(odocstream & os) const // Also support PDF output (automatically generated e.g. when // \usepackage[pdftex]{hyperref} is used and XeTeX. os << "\n" - << "\\newif\\ifxetex\n" - << "\\expandafter\\ifx\\csname XeTeXrevision\\endcsname\\relax\n" - << " \\xetexfalse\n" - << "\\else\n" - << " \\xetextrue\n" - << "\\fi\n" - << "\\newif\\ifpdf\n" - << "\\ifx\\pdfoutput\\undefined\n" - << "\\else\\ifx\\pdfoutput\\relax\n" - << "\\else\\ifnum0=\\pdfoutput\n" - << "\\else\\pdftrue\\fi\\fi\\fi\n" - << "\\ifxetex\n" - << " \\usepackage[active,delayed,tightpage,showlabels,lyx,xetex]{preview}\n" - << "\\else\n" - << "\\ifpdf\n" - << " \\usepackage[active,delayed,tightpage,showlabels,lyx,pdftex]{preview}\n" - << "\\else\n" - << " \\usepackage[active,delayed,showlabels,lyx,dvips]{preview}\n" - << "\\fi\n" - << "\\fi\n" + << "\\usepackage[active,delayed,showlabels,lyx]{preview}\n" << "\n"; }