X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetexternal.C;h=910d3d071a55a3d2230672a217d987144652de64;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=6fc0e5e05c5d55a0890a0f6c32ff97e7379d0523;hpb=6a55be9506b112110826cf63bc21786044569f1d;p=lyx.git diff --git a/src/insets/insetexternal.C b/src/insets/insetexternal.C index 6fc0e5e05c..910d3d071a 100644 --- a/src/insets/insetexternal.C +++ b/src/insets/insetexternal.C @@ -18,11 +18,11 @@ #include "insets/render_preview.h" #include "buffer.h" -#include "BufferView.h" #include "cursor.h" #include "debug.h" #include "dispatchresult.h" #include "exporter.h" +#include "FuncStatus.h" #include "funcrequest.h" #include "gettext.h" #include "LaTeXFeatures.h" @@ -32,26 +32,18 @@ #include "metricsinfo.h" #include "outputparams.h" -#include "frontends/lyx_gui.h" -#include "frontends/LyXView.h" - #include "graphics/PreviewLoader.h" -#include "support/FileInfo.h" #include "support/filetools.h" #include "support/lstrings.h" #include "support/lyxlib.h" -#include "support/tostr.h" +#include "support/convert.h" #include "support/translator.h" #include #include -namespace support = lyx::support; -namespace external = lyx::external; -namespace graphics = lyx::graphics; - using std::endl; using std::string; using std::auto_ptr; @@ -63,7 +55,7 @@ using std::vector; namespace { -external::DisplayType const defaultDisplayType = external::NoDisplay; +lyx::external::DisplayType const defaultDisplayType = lyx::external::NoDisplay; unsigned int const defaultLyxScale = 100; @@ -73,15 +65,16 @@ string defaultTemplateName = "RasterImage"; namespace lyx { + namespace external { TempName::TempName() { - tempname_ = support::tempName(string(), "lyxext"); + support::FileName const tempname(support::tempName(support::FileName(), "lyxext")); // FIXME: This is unsafe - support::unlink(tempname_); + support::unlink(tempname); // must have an extension for the converter code to work correctly. - tempname_ += ".tmp"; + tempname_ = support::FileName(tempname.absFilename() + ".tmp"); } @@ -134,7 +127,6 @@ Translator const & displayTranslator() } } // namespace external -} // namespace lyx InsetExternalParams::InsetExternalParams() @@ -228,7 +220,7 @@ void InsetExternalParams::write(Buffer const & buffer, ostream & os) const if (!resizedata.no_resize()) { using support::float_equal; - double scl = support::strToDbl(resizedata.scale); + double const scl = convert(resizedata.scale); if (!float_equal(scl, 0.0, 0.05)) { if (!float_equal(scl, 100.0, 0.05)) os << "\tscale " @@ -298,7 +290,7 @@ bool InsetExternalParams::read(Buffer const & buffer, LyXLex & lex) break; case EX_FILENAME: { - lex.next(); + lex.eatLine(); string const name = lex.getString(); filename.set(name, buffer.filePath()); break; @@ -440,7 +432,7 @@ void InsetExternal::doDispatch(LCursor & cur, FuncRequest & cmd) case LFUN_EXTERNAL_EDIT: { Buffer const & buffer = cur.buffer(); InsetExternalParams p; - InsetExternalMailer::string2params(cmd.argument, buffer, p); + InsetExternalMailer::string2params(to_utf8(cmd.argument()), buffer, p); external::editExternal(p, buffer); break; } @@ -448,7 +440,7 @@ void InsetExternal::doDispatch(LCursor & cur, FuncRequest & cmd) case LFUN_INSET_MODIFY: { Buffer const & buffer = cur.buffer(); InsetExternalParams p; - InsetExternalMailer::string2params(cmd.argument, buffer, p); + InsetExternalMailer::string2params(to_utf8(cmd.argument()), buffer, p); setParams(p, buffer); break; } @@ -467,16 +459,35 @@ void InsetExternal::doDispatch(LCursor & cur, FuncRequest & cmd) } +bool InsetExternal::getStatus(LCursor & cur, FuncRequest const & cmd, + FuncStatus & flag) const +{ + switch (cmd.action) { + + case LFUN_EXTERNAL_EDIT: + case LFUN_INSET_MODIFY: + case LFUN_INSET_DIALOG_UPDATE: + flag.enabled(true); + return true; + + default: + return InsetBase::getStatus(cur, cmd, flag); + } +} + + void InsetExternal::edit(LCursor & cur, bool) { InsetExternalMailer(*this).showDialog(&cur.bv()); } -void InsetExternal::metrics(MetricsInfo & mi, Dimension & dim) const +bool InsetExternal::metrics(MetricsInfo & mi, Dimension & dim) const { renderer_->metrics(mi, dim); + bool const changed = dim_ != dim; dim_ = dim; + return changed; } @@ -520,11 +531,11 @@ graphics::Params get_grfx_params(InsetExternalParams const & eparams) { graphics::Params gparams; - gparams.filename = eparams.filename.absFilename(); + gparams.filename = eparams.filename; gparams.scale = eparams.lyxscale; if (eparams.clipdata.clip) gparams.bb = eparams.clipdata.bbox; - gparams.angle = lyx::support::strToDbl(eparams.rotationdata.adjAngle()); + gparams.angle = convert(eparams.rotationdata.adjAngle()); switch (eparams.display) { case external::DefaultDisplay: @@ -548,22 +559,25 @@ graphics::Params get_grfx_params(InsetExternalParams const & eparams) if (gparams.display == graphics::DefaultDisplay) gparams.display = lyxrc.display_graphics; // Override the above if we're not using a gui - if (!lyx_gui::use_gui) + if (!use_gui) gparams.display = graphics::NoDisplay; return gparams; } -string const getScreenLabel(InsetExternalParams const & params, +docstring const getScreenLabel(InsetExternalParams const & params, Buffer const & buffer) { external::Template const * const ptr = external::getTemplatePtr(params); if (!ptr) - return support::bformat(_("External template %1$s is not installed"), - params.templatename()); - return external::doSubstitution(params, buffer, ptr->guiName); + // FIXME UNICODE + return support::bformat((_("External template %1$s is not installed")), + from_utf8(params.templatename())); + // FIXME UNICODE + return from_utf8(external::doSubstitution(params, buffer, + ptr->guiName, false)); } void add_preview_and_start_loading(RenderMonitoredPreview &, @@ -659,12 +673,13 @@ void InsetExternal::read(Buffer const & buffer, LyXLex & lex) } -int InsetExternal::latex(Buffer const & buf, ostream & os, +int InsetExternal::latex(Buffer const & buf, odocstream & os, OutputParams const & runparams) const { if (params_.draft) { + // FIXME UNICODE os << "\\fbox{\\ttfamily{}" - << params_.filename.outputFilename(buf.filePath()) + << from_utf8(params_.filename.outputFilename(buf.filePath())) << "}\n"; return 1; } @@ -673,7 +688,7 @@ int InsetExternal::latex(Buffer const & buf, ostream & os, // run through the LaTeX compiler. // If we're running through the LaTeX compiler, we should write the // generated files in the bufer's temporary directory. - bool const external_in_tmpdir = !runparams.nice; + bool const external_in_tmpdir = !runparams.nice && !runparams.dryrun; // If the template has specified a PDFLaTeX output, then we try and // use that. @@ -686,39 +701,39 @@ int InsetExternal::latex(Buffer const & buf, ostream & os, external::Template::Formats::const_iterator cit = et.formats.find("PDFLaTeX"); - if (cit != et.formats.end()) + + if (cit != et.formats.end()) { return external::writeExternal(params_, "PDFLaTeX", - buf, os, - *(runparams.exportdata), - external_in_tmpdir); + buf, os, + *(runparams.exportdata), + external_in_tmpdir, + runparams.inComment); + } + } + return external::writeExternal(params_, "LaTeX", buf, os, - *(runparams.exportdata), - external_in_tmpdir); + *(runparams.exportdata), + external_in_tmpdir, + runparams.inComment); } -int InsetExternal::plaintext(Buffer const & buf, ostream & os, +int InsetExternal::plaintext(Buffer const & buf, odocstream & os, OutputParams const & runparams) const { return external::writeExternal(params_, "Ascii", buf, os, - *(runparams.exportdata)); -} - - -int InsetExternal::linuxdoc(Buffer const & buf, ostream & os, - OutputParams const & runparams) const -{ - return external::writeExternal(params_, "LinuxDoc", buf, os, - *(runparams.exportdata)); + *(runparams.exportdata), false, + runparams.inComment); } -int InsetExternal::docbook(Buffer const & buf, ostream & os, +int InsetExternal::docbook(Buffer const & buf, odocstream & os, OutputParams const & runparams) const { return external::writeExternal(params_, "DocBook", buf, os, - *(runparams.exportdata)); + *(runparams.exportdata), false, + runparams.inComment); } @@ -733,22 +748,39 @@ void InsetExternal::validate(LaTeXFeatures & features) const return; external::Template const & et = *et_ptr; + string format; + switch (features.runparams().flavor) { + case OutputParams::LATEX: + format = "LaTeX"; + break; + case OutputParams::PDFLATEX: + format = "PDFLaTeX"; + break; + case OutputParams::XML: + format = "DocBook"; + break; + } external::Template::Formats::const_iterator cit = - et.formats.find("LaTeX"); + et.formats.find(format); if (cit == et.formats.end()) return; - if (!cit->second.requirement.empty()) - features.require(cit->second.requirement); + // FIXME: We don't need that always + features.require("lyxdot"); + + vector::const_iterator it = cit->second.requirements.begin(); + vector::const_iterator end = cit->second.requirements.end(); + for (; it != end; ++it) + features.require(*it); external::TemplateManager & etm = external::TemplateManager::get(); - vector::const_iterator it = cit->second.preambleNames.begin(); - vector::const_iterator end = cit->second.preambleNames.end(); + it = cit->second.preambleNames.begin(); + end = cit->second.preambleNames.end(); for (; it != end; ++it) { string const preamble = etm.getPreambleDefByName(*it); if (!preamble.empty()) - features.addExternalPreamble(preamble); + features.addPreambleSnippet(preamble); } } @@ -761,20 +793,17 @@ namespace { bool preview_wanted(InsetExternalParams const & params) { - string const included_file = params.filename.absFilename(); - return params.display == external::PreviewDisplay && - support::IsFileReadable(included_file); + support::isFileReadable(params.filename); } -string const latex_string(InsetExternal const & inset, Buffer const & buffer) +docstring const latex_string(InsetExternal const & inset, Buffer const & buffer) { - ostringstream os; + odocstringstream os; OutputParams runparams; runparams.flavor = OutputParams::LATEX; inset.latex(buffer, os, runparams); - return os.str(); } @@ -787,8 +816,8 @@ void add_preview_and_start_loading(RenderMonitoredPreview & renderer, if (RenderPreview::status() != LyXRC::PREVIEW_OFF && preview_wanted(params)) { - renderer.setAbsFile(params.filename.absFilename()); - string const snippet = latex_string(inset, buffer); + renderer.setAbsFile(params.filename); + docstring const snippet = latex_string(inset, buffer); renderer.addPreview(snippet, buffer); renderer.startLoading(buffer); } @@ -804,8 +833,8 @@ void InsetExternal::addPreview(graphics::PreviewLoader & ploader) const return; if (preview_wanted(params())) { - ptr->setAbsFile(params_.filename.absFilename()); - string const snippet = latex_string(*this, ploader.buffer()); + ptr->setAbsFile(params_.filename); + docstring const snippet = latex_string(*this, ploader.buffer()); ptr->addPreview(snippet, ploader); } } @@ -864,3 +893,5 @@ InsetExternalMailer::params2string(InsetExternalParams const & params, data << "\\end_inset\n"; return data.str(); } + +} // namespace lyx