X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Finsets%2FInsetExternal.cpp;h=3d286b6f6041785837bdab4c9a04bbc6f505641b;hb=7b0ecf1f38ca87fc364c053ca5cc6e0bc4bc17d6;hp=ef49384ce646d1ac1dc64d084b7c6bdc018f0f2a;hpb=237c132c1e6fc720b87f2fea6deb18a8395cbe0a;p=lyx.git diff --git a/src/insets/InsetExternal.cpp b/src/insets/InsetExternal.cpp index ef49384ce6..3d286b6f60 100644 --- a/src/insets/InsetExternal.cpp +++ b/src/insets/InsetExternal.cpp @@ -12,50 +12,49 @@ #include "InsetExternal.h" #include "insets/ExternalSupport.h" -#include "insets/ExternalTemplate.h" #include "insets/RenderButton.h" #include "insets/RenderGraphic.h" #include "insets/RenderPreview.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" -#include "LyX.h" #include "Lexer.h" +#include "LyX.h" // use_gui #include "LyXRC.h" #include "MetricsInfo.h" #include "OutputParams.h" +#include "output_latex.h" + +#include "frontends/alert.h" +#include "frontends/Application.h" #include "graphics/PreviewLoader.h" +#include "support/bind.h" +#include "support/convert.h" +#include "support/debug.h" +#include "support/ExceptionMessage.h" #include "support/filetools.h" +#include "support/gettext.h" +#include "support/lassert.h" #include "support/lstrings.h" #include "support/lyxlib.h" -#include "support/convert.h" -#include "support/Translator.h" - -#include +#include "support/TempFile.h" #include +#include -using std::string; -using std::istringstream; -using std::ostream; -using std::ostringstream; -using std::vector; - -using lyx::support::DocFileName; +using namespace std; +using namespace lyx::support; namespace { -lyx::external::DisplayType const defaultDisplayType = lyx::external::NoDisplay; - unsigned int const defaultLyxScale = 100; string defaultTemplateName; @@ -65,78 +64,56 @@ string defaultTemplateName; namespace lyx { +namespace Alert = frontend::Alert; + namespace external { -TempName::TempName() +TempName::TempName() : tempfile_(new support::TempFile("lyxextXXXXXX.tmp")) { - support::FileName const tempname(support::tempName(support::FileName(), "lyxext")); - // FIXME: This is unsafe - support::unlink(tempname); // must have an extension for the converter code to work correctly. - tempname_ = support::FileName(tempname.absFilename() + ".tmp"); } -TempName::TempName(TempName const &) +TempName::TempName(TempName const & that) : tempfile_(0) { - tempname_ = TempName()(); + *this = that; } TempName::~TempName() { - support::unlink(tempname_); + delete tempfile_; } -TempName & -TempName::operator=(TempName const & other) +TempName & TempName::operator=(TempName const & other) { - if (this != &other) - tempname_ = TempName()(); + if (this != &other) { + delete tempfile_; + tempfile_ = new support::TempFile("lyxextXXXXXX.tmp"); + } return *this; } -namespace { - -/// The translator between the Display enum and corresponding lyx string. -Translator const initTranslator() +support::FileName TempName::operator()() const { - Translator translator(DefaultDisplay, "default"); - - // Fill the display translator - translator.addPair(MonochromeDisplay, "monochrome"); - translator.addPair(GrayscaleDisplay, "grayscale"); - translator.addPair(ColorDisplay, "color"); - translator.addPair(PreviewDisplay, "preview"); - translator.addPair(NoDisplay, "none"); - - return translator; -} - -} // namespace anon - - -Translator const & displayTranslator() -{ - static Translator const translator = - initTranslator(); - return translator; + return tempfile_->name(); } } // namespace external InsetExternalParams::InsetExternalParams() - : display(defaultDisplayType), + : display(true), lyxscale(defaultLyxScale), draft(false) { if (defaultTemplateName.empty()) { external::TemplateManager const & etm = external::TemplateManager::get(); - templatename_ = etm.getTemplates().begin()->first; + if (!etm.getTemplates().empty()) + templatename_ = etm.getTemplates().begin()->first; } else templatename_ = defaultTemplateName; } @@ -153,7 +130,7 @@ void clearIfNotFound(T & data, external::TransformID value, const_iterator it = ids.begin(); const_iterator end = ids.end(); - it = std::find(it, end, value); + it = find(it, end, value); if (it == end) data = T(); } @@ -179,28 +156,22 @@ void InsetExternalParams::settemplate(string const & name) clearIfNotFound(extradata, external::Extra, ids); clearIfNotFound(resizedata, external::Resize, ids); clearIfNotFound(rotationdata, external::Rotate, ids); + + // + preview_mode = et->preview_mode; } -void InsetExternalParams::write(Buffer const & buffer, ostream & os) const +void InsetExternalParams::write(Buffer const & buf, ostream & os) const { os << "External\n" << "\ttemplate " << templatename() << '\n'; - if (!filename.empty()) { - // when we save, we still use the original filename - EmbeddedFiles::EmbeddedFileList::const_iterator it = - buffer.embeddedFiles().find(filename.toFilesystemEncoding()); - if (it != buffer.embeddedFiles().end()) - os << "\tfilename " << DocFileName(it->absFilename()).outputFilename(buffer.filePath()) << '\n'; - else - os << "\tfilename " << filename.outputFilename(buffer.filePath()) << '\n'; - } - - if (display != defaultDisplayType) - os << "\tdisplay " - << external::displayTranslator().find(display) - << '\n'; + if (!filename.empty()) + os << "\tfilename " << filename.outputFileName(buf.filePath()) << '\n'; + + if (!display) + os << "\tdisplay false\n"; if (lyxscale != defaultLyxScale) os << "\tlyxscale " << convert(lyxscale) << '\n'; @@ -229,7 +200,6 @@ void InsetExternalParams::write(Buffer const & buffer, ostream & os) const } if (!resizedata.no_resize()) { - using support::float_equal; double const scl = convert(resizedata.scale); if (!float_equal(scl, 0.0, 0.05)) { if (!float_equal(scl, 100.0, 0.05)) @@ -251,7 +221,7 @@ void InsetExternalParams::write(Buffer const & buffer, ostream & os) const bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) { - enum ExternalTags { + enum { EX_TEMPLATE = 1, EX_FILENAME, EX_DISPLAY, @@ -269,7 +239,7 @@ bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) EX_END }; - keyword_item external_tags[] = { + LexerKeyword external_tags[] = { { "\\end_inset", EX_END }, { "boundingBox", EX_BOUNDINGBOX }, { "clip", EX_CLIP }, @@ -287,7 +257,7 @@ bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) { "width", EX_WIDTH } }; - PushPopHelper pph(lex, external_tags, EX_END); + PushPopHelper pph(lex, external_tags); bool found_end = false; bool read_error = false; @@ -302,20 +272,13 @@ bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) case EX_FILENAME: { lex.eatLine(); string const name = lex.getString(); - filename.set(name, buffer.filePath()); - // maybe this file is embedded - EmbeddedFiles::EmbeddedFileList::const_iterator it = buffer.embeddedFiles().find(filename.toFilesystemEncoding()); - if (it != buffer.embeddedFiles().end()) - // using available file, embedded or external, depending on file availability and - // embedding status. - filename = DocFileName(it->availableFile(&buffer)); + filename.set(name, buffer.originFilePath()); break; } - + case EX_DISPLAY: { lex.next(); - string const name = lex.getString(); - display = external::displayTranslator().find(name); + display = lex.getString() != "false"; break; } @@ -385,8 +348,7 @@ bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) break; default: - lex.printError("ExternalInset::read: " - "Wrong tag: $$Token"); + lex.printError("ExternalInset::read: Wrong tag: $$Token"); read_error = true; break; } @@ -410,11 +372,13 @@ bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) } -InsetExternal::InsetExternal() - : renderer_(new RenderButton) -{} +InsetExternal::InsetExternal(Buffer * buf) + : Inset(buf), renderer_(new RenderButton) +{ +} +// Mouse hover is not copied and remains empty InsetExternal::InsetExternal(InsetExternal const & other) : Inset(other), boost::signals::trackable(), @@ -423,51 +387,54 @@ InsetExternal::InsetExternal(InsetExternal const & other) {} -Inset * InsetExternal::clone() const +InsetExternal::~InsetExternal() { - return new InsetExternal(*this); + hideDialogs("external", this); + + map::iterator it = mouse_hover_.begin(); + map::iterator end = mouse_hover_.end(); + for (; it != end; ++it) + if (it->second) + it->first->clearLastInset(this); } -InsetExternal::~InsetExternal() +bool InsetExternal::setMouseHover(BufferView const * bv, bool mouse_hover) const { - InsetExternalMailer(*this).hideDialog(); + mouse_hover_[bv] = mouse_hover; + return true; } void InsetExternal::statusChanged() const { - LyX::cref().updateInset(this); + updateFrontend(); } void InsetExternal::doDispatch(Cursor & cur, FuncRequest & cmd) { - switch (cmd.action) { + switch (cmd.action()) { - case LFUN_EXTERNAL_EDIT: { - Buffer const & buffer = cur.buffer(); - InsetExternalParams p; - InsetExternalMailer::string2params(to_utf8(cmd.argument()), buffer, p); - external::editExternal(p, buffer); + case LFUN_INSET_EDIT: { + InsetExternalParams p = params(); + if (!cmd.argument().empty()) + string2params(to_utf8(cmd.argument()), buffer(), p); + external::editExternal(p, buffer()); break; } case LFUN_INSET_MODIFY: { - Buffer const & buffer = cur.buffer(); InsetExternalParams p; - InsetExternalMailer::string2params(to_utf8(cmd.argument()), buffer, p); - setParams(p, buffer); + string2params(to_utf8(cmd.argument()), buffer(), p); + cur.recordUndo(); + setParams(p); break; } case LFUN_INSET_DIALOG_UPDATE: - InsetExternalMailer(*this).updateDialog(&cur.bv()); - break; - - case LFUN_MOUSE_RELEASE: - if (!cur.selection()) - InsetExternalMailer(*this).showDialog(&cur.bv()); + cur.bv().updateDialog("external", + params2string(params(), cur.bv().buffer())); break; default: @@ -479,12 +446,12 @@ void InsetExternal::doDispatch(Cursor & cur, FuncRequest & cmd) bool InsetExternal::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & flag) const { - switch (cmd.action) { + switch (cmd.action()) { - case LFUN_EXTERNAL_EDIT: + case LFUN_INSET_EDIT: case LFUN_INSET_MODIFY: case LFUN_INSET_DIALOG_UPDATE: - flag.enabled(true); + flag.setEnabled(true); return true; default: @@ -493,16 +460,11 @@ bool InsetExternal::getStatus(Cursor & cur, FuncRequest const & cmd, } -void InsetExternal::registerEmbeddedFiles(Buffer const &, - EmbeddedFiles & files) const +bool InsetExternal::showInsetDialog(BufferView * bv) const { - files.registerFile(params_.filename.absFilename(), false, this); -} - - -void InsetExternal::edit(Cursor & cur, bool) -{ - InsetExternalMailer(*this).showDialog(&cur.bv()); + bv->showDialog("external", params2string(params(), bv->buffer()), + const_cast(this)); + return true; } @@ -514,39 +476,14 @@ void InsetExternal::metrics(MetricsInfo & mi, Dimension & dim) const void InsetExternal::draw(PainterInfo & pi, int x, int y) const { + if (renderer_->asButton()) + renderer_->setRenderState(mouse_hover_[pi.base.bv]); renderer_->draw(pi, x, y); } namespace { -enum RenderType { - RENDERBUTTON, - RENDERGRAPHIC, - RENDERPREVIEW -}; - - -RenderType getRenderType(InsetExternalParams const & p) -{ - if (!external::getTemplatePtr(p) || - p.filename.empty() || - p.display == external::NoDisplay) - return RENDERBUTTON; - - if (p.display == external::PreviewDisplay) { - if (RenderPreview::status() != LyXRC::PREVIEW_OFF) - return RENDERPREVIEW; - return RENDERBUTTON; - } - - if (p.display == external::DefaultDisplay && - lyxrc.display_graphics == graphics::NoDisplay) - return RENDERBUTTON; - return RENDERGRAPHIC; -} - - graphics::Params get_grfx_params(InsetExternalParams const & eparams) { graphics::Params gparams; @@ -556,66 +493,84 @@ graphics::Params get_grfx_params(InsetExternalParams const & eparams) if (eparams.clipdata.clip) gparams.bb = eparams.clipdata.bbox; gparams.angle = convert(eparams.rotationdata.adjAngle()); - - switch (eparams.display) { - case external::DefaultDisplay: - gparams.display = graphics::DefaultDisplay; - break; - case external::MonochromeDisplay: - gparams.display = graphics::MonochromeDisplay; - break; - case external::GrayscaleDisplay: - gparams.display = graphics::GrayscaleDisplay; - break; - case external::ColorDisplay: - gparams.display = graphics::ColorDisplay; - break; - case external::NoDisplay: - gparams.display = graphics::NoDisplay; - break; - default: - BOOST_ASSERT(false); - } - if (gparams.display == graphics::DefaultDisplay) - gparams.display = lyxrc.display_graphics; - // Override the above if we're not using a gui - if (!use_gui) - gparams.display = graphics::NoDisplay; + gparams.display = eparams.display; return gparams; } -docstring const getScreenLabel(InsetExternalParams const & params, +docstring screenLabel(InsetExternalParams const & params, Buffer const & buffer) { external::Template const * const ptr = external::getTemplatePtr(params); if (!ptr) // FIXME UNICODE - return support::bformat((_("External template %1$s is not installed")), + return bformat((_("External template %1$s is not installed")), from_utf8(params.templatename())); // FIXME UNICODE docstring gui = _(ptr->guiName); - return from_utf8(external::doSubstitution(params, buffer, - to_utf8(gui), false)); -} + gui += ": "; + + if (params.filename.empty()) + gui += "???"; + else + gui += from_utf8(params.filename.relFileName(buffer.filePath())); -void add_preview_and_start_loading(RenderMonitoredPreview &, - InsetExternal const &, - Buffer const &); + return gui; +} } // namespace anon +static bool isPreviewWanted(InsetExternalParams const & params) +{ + return params.display && params.filename.isReadableFile(); +} + + +static docstring latexString(InsetExternal const & inset) +{ + TexRow texrow; + odocstringstream ods; + otexstream os(ods, texrow); + // We don't need to set runparams.encoding since it is not used by + // latex(). + OutputParams runparams(0); + runparams.flavor = OutputParams::LATEX; + inset.latex(os, runparams); + return ods.str(); +} + + +static void add_preview_and_start_loading(RenderMonitoredPreview & renderer, + InsetExternal const & inset, + Buffer const & buffer) +{ + InsetExternalParams const & params = inset.params(); + + if (RenderPreview::previewText() && isPreviewWanted(params)) { + renderer.setAbsFile(params.filename); + docstring const snippet = latexString(inset); + renderer.addPreview(snippet, buffer); + renderer.startLoading(buffer); + } +} + + InsetExternalParams const & InsetExternal::params() const { return params_; } -void InsetExternal::setParams(InsetExternalParams const & p, - Buffer const & buffer) +void InsetExternal::updatePreview() +{ + setParams(params_); +} + + +void InsetExternal::setParams(InsetExternalParams const & p) { params_ = p; @@ -623,42 +578,44 @@ void InsetExternal::setParams(InsetExternalParams const & p, // will use this. defaultTemplateName = params_.templatename(); - switch (getRenderType(params_)) { - case RENDERBUTTON: { + if (!external::getTemplatePtr(params_) || params_.filename.empty() + || !params_.display + || !lyxrc.display_graphics + || params_.preview_mode == PREVIEW_OFF + || (params_.preview_mode == PREVIEW_INSTANT + && !RenderPreview::previewText())) { RenderButton * button_ptr = renderer_->asButton(); if (!button_ptr) { renderer_.reset(new RenderButton); button_ptr = renderer_->asButton(); } + button_ptr->update(screenLabel(params_, buffer()), true); + return; + } - button_ptr->update(getScreenLabel(params_, buffer), true); + switch (params_.preview_mode) { + case PREVIEW_OFF: + // Already taken care of above. + LASSERT(false, return); break; - - } case RENDERGRAPHIC: { + case PREVIEW_INSTANT: { + //FIXME: why is the value below immediately forgotten? + RenderMonitoredPreview * preview_ptr = renderer_->asMonitoredPreview(); + renderer_.reset(new RenderMonitoredPreview(this)); + preview_ptr = renderer_->asMonitoredPreview(); + preview_ptr->fileChanged(bind(&InsetExternal::fileChanged, this)); + if (preview_ptr->monitoring()) + preview_ptr->stopMonitoring(); + add_preview_and_start_loading(*preview_ptr, *this, buffer()); + break; + } + case PREVIEW_GRAPHICS: { RenderGraphic * graphic_ptr = renderer_->asGraphic(); if (!graphic_ptr) { renderer_.reset(new RenderGraphic(this)); graphic_ptr = renderer_->asGraphic(); } - graphic_ptr->update(get_grfx_params(params_)); - - break; - - } case RENDERPREVIEW: { - RenderMonitoredPreview * preview_ptr = - renderer_->asMonitoredPreview(); - if (!preview_ptr) { - renderer_.reset(new RenderMonitoredPreview(this)); - preview_ptr = renderer_->asMonitoredPreview(); - preview_ptr->fileChanged( - boost::bind(&InsetExternal::fileChanged, this)); - } - - if (preview_ptr->monitoring()) - preview_ptr->stopMonitoring(); - add_preview_and_start_loading(*preview_ptr, *this, buffer); - break; } } @@ -667,42 +624,40 @@ void InsetExternal::setParams(InsetExternalParams const & p, void InsetExternal::fileChanged() const { - Buffer const * const buffer_ptr = LyX::cref().updateInset(this); - if (!buffer_ptr) + Buffer const * const buffer = updateFrontend(); + if (!buffer) return; RenderMonitoredPreview * const ptr = renderer_->asMonitoredPreview(); - BOOST_ASSERT(ptr); + LASSERT(ptr, return); - Buffer const & buffer = *buffer_ptr; - ptr->removePreview(buffer); - add_preview_and_start_loading(*ptr, *this, buffer); + ptr->removePreview(*buffer); + add_preview_and_start_loading(*ptr, *this, *buffer); } -void InsetExternal::write(Buffer const & buffer, ostream & os) const +void InsetExternal::write(ostream & os) const { - params_.write(buffer, os); + params_.write(buffer(), os); } -void InsetExternal::read(Buffer const & buffer, Lexer & lex) +void InsetExternal::read(Lexer & lex) { InsetExternalParams params; - if (params.read(buffer, lex)) - setParams(params, buffer); + if (params.read(buffer(), lex)) + setParams(params); } -int InsetExternal::latex(Buffer const & buf, odocstream & os, - OutputParams const & runparams) const +void InsetExternal::latex(otexstream & os, OutputParams const & runparams) const { if (params_.draft) { // FIXME UNICODE os << "\\fbox{\\ttfamily{}" - << from_utf8(params_.filename.outputFilename(buf.filePath())) + << from_utf8(params_.filename.outputFileName(buffer().filePath())) << "}\n"; - return 1; + return; } // "nice" means that the buffer is exported to LaTeX format but not @@ -718,45 +673,67 @@ int InsetExternal::latex(Buffer const & buf, odocstream & os, external::Template const * const et_ptr = external::getTemplatePtr(params_); if (!et_ptr) - return 0; + return; external::Template const & et = *et_ptr; external::Template::Formats::const_iterator cit = et.formats.find("PDFLaTeX"); if (cit != et.formats.end()) { - return external::writeExternal(params_, "PDFLaTeX", - buf, os, - *(runparams.exportdata), - external_in_tmpdir, - dryrun); + external::writeExternal(params_, "PDFLaTeX", + buffer(), os, + *(runparams.exportdata), + external_in_tmpdir, + dryrun); + return; } } - return external::writeExternal(params_, "LaTeX", buf, os, - *(runparams.exportdata), - external_in_tmpdir, - dryrun); + external::writeExternal(params_, "LaTeX", buffer(), os, + *(runparams.exportdata), + external_in_tmpdir, + dryrun); } -int InsetExternal::plaintext(Buffer const & buf, odocstream & os, - OutputParams const & runparams) const +int InsetExternal::plaintext(odocstringstream & os, + OutputParams const & runparams, size_t) const { - os << '\n'; // output external material on a new line - external::writeExternal(params_, "Ascii", buf, os, + // this is too slow for constant use + if (runparams.for_tooltip) + return 0; + + TexRow texrow; + otexstream ots(os, texrow); + ots << '\n'; // output external material on a new line + external::writeExternal(params_, "Ascii", buffer(), ots, *(runparams.exportdata), false, runparams.dryrun || runparams.inComment); return PLAINTEXT_NEWLINE; } -int InsetExternal::docbook(Buffer const & buf, odocstream & os, +int InsetExternal::docbook(odocstream & os, OutputParams const & runparams) const { - return external::writeExternal(params_, "DocBook", buf, os, - *(runparams.exportdata), false, - runparams.dryrun || runparams.inComment); + TexRow texrow; + odocstringstream ods; + otexstream ots(ods, texrow); + external::writeExternal(params_, "DocBook", buffer(), ots, + *(runparams.exportdata), false, + runparams.dryrun || runparams.inComment); + os << ods.str(); + return int(count(ods.str().begin(), ods.str().end(), '\n')); +} + + +docstring InsetExternal::xhtml(XHTMLStream & /*xs*/, + OutputParams const & /*rp*/) const +{ +// external::writeExternal(params_, "XHTML", buffer(), os, +// *(runparams.exportdata), false, +// runparams.dryrun || runparams.inComment); + return docstring(); } @@ -774,21 +751,42 @@ void InsetExternal::validate(LaTeXFeatures & features) const string format; switch (features.runparams().flavor) { case OutputParams::LATEX: + case OutputParams::DVILUATEX: format = "LaTeX"; break; + case OutputParams::LUATEX: case OutputParams::PDFLATEX: + case OutputParams::XETEX: format = "PDFLaTeX"; break; case OutputParams::XML: format = "DocBook"; break; + case OutputParams::HTML: + format = "html"; + break; + case OutputParams::TEXT: + format = "text"; + break; + case OutputParams::LYX: + format = "lyx"; + break; } external::Template::Formats::const_iterator cit = et.formats.find(format); - if (cit == et.formats.end()) - return; - // FIXME: We don't need that always + if (cit == et.formats.end()) { + // If the template has not specified a PDFLaTeX output, + // we try the LaTeX format. + if (format == "PDFLaTeX") { + cit = et.formats.find("LaTeX"); + if (cit == et.formats.end()) + return; + } else + return; + } + + // FIXME: We don't need that always, see InsetGraphics features.require("lyxdot"); vector::const_iterator it = cit->second.requirements.begin(); @@ -808,112 +806,65 @@ void InsetExternal::validate(LaTeXFeatures & features) const } -// -// preview stuff -// - -namespace { - -bool preview_wanted(InsetExternalParams const & params) -{ - return params.display == external::PreviewDisplay && - support::isFileReadable(params.filename); -} - - -docstring const latex_string(InsetExternal const & inset, Buffer const & buffer) -{ - odocstringstream os; - // We don't need to set runparams.encoding since it is not used by - // latex(). - OutputParams runparams(0); - runparams.flavor = OutputParams::LATEX; - inset.latex(buffer, os, runparams); - return os.str(); -} - - -void add_preview_and_start_loading(RenderMonitoredPreview & renderer, - InsetExternal const & inset, - Buffer const & buffer) -{ - InsetExternalParams const & params = inset.params(); - - if (RenderPreview::status() != LyXRC::PREVIEW_OFF && - preview_wanted(params)) { - renderer.setAbsFile(params.filename); - docstring const snippet = latex_string(inset, buffer); - renderer.addPreview(snippet, buffer); - renderer.startLoading(buffer); - } -} - -} // namespace anon - - -void InsetExternal::addPreview(graphics::PreviewLoader & ploader) const +void InsetExternal::addPreview(DocIterator const & /*inset_pos*/, + graphics::PreviewLoader & ploader) const { RenderMonitoredPreview * const ptr = renderer_->asMonitoredPreview(); if (!ptr) return; - if (preview_wanted(params())) { + if (isPreviewWanted(params())) { ptr->setAbsFile(params_.filename); - docstring const snippet = latex_string(*this, ploader.buffer()); + docstring const snippet = latexString(*this); ptr->addPreview(snippet, ploader); } } -/// Mailer stuff - -string const InsetExternalMailer::name_("external"); - -InsetExternalMailer::InsetExternalMailer(InsetExternal & inset) - : inset_(inset) -{} - - -string const InsetExternalMailer::inset2string(Buffer const & buffer) const +string InsetExternal::contextMenuName() const { - return params2string(inset_.params(), buffer); + return "context-external"; } -void InsetExternalMailer::string2params(string const & in, - Buffer const & buffer, - InsetExternalParams & params) +void InsetExternal::string2params(string const & in, Buffer const & buffer, + InsetExternalParams & params) { params = InsetExternalParams(); if (in.empty()) return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; lex >> name; - if (!lex || name != name_) - return print_mailer_error("InsetExternalMailer", in, 1, name_); + if (!lex || name != "external") { + LYXERR0("InsetExternal::string2params(" << in << ")\n" + "Expected arg 1 to be \"external\"\n"); + return; + } // This is part of the inset proper that is usually swallowed // by Text::readInset string id; lex >> id; - if (!lex || id != "External") - return print_mailer_error("InsetBoxMailer", in, 2, "External"); + if (!lex || id != "External") { + LYXERR0("InsetExternal::string2params(" << in << ")\n" + "Expected arg 2 to be \"External\"\n"); + return; + } params.read(buffer, lex); } -string const -InsetExternalMailer::params2string(InsetExternalParams const & params, - Buffer const & buffer) +string InsetExternal::params2string(InsetExternalParams const & params, + Buffer const & buffer) { ostringstream data; - data << name_ << ' '; + data << "external" << ' '; params.write(buffer, data); data << "\\end_inset\n"; return data.str();