]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insetexternal.C
* src/LyXAction.C: mark goto-clear-bookmark as working without buffer
[lyx.git] / src / insets / insetexternal.C
index 11ed1d86d1b31d7064aaea947345f729ab411a98..910d3d071a55a3d2230672a217d987144652de64 100644 (file)
@@ -22,6 +22,7 @@
 #include "debug.h"
 #include "dispatchresult.h"
 #include "exporter.h"
+#include "FuncStatus.h"
 #include "funcrequest.h"
 #include "gettext.h"
 #include "LaTeXFeatures.h"
@@ -31,9 +32,6 @@
 #include "metricsinfo.h"
 #include "outputparams.h"
 
-#include "frontends/lyx_gui.h"
-#include "frontends/LyXView.h"
-
 #include "graphics/PreviewLoader.h"
 
 #include "support/filetools.h"
 
 #include <sstream>
 
-namespace support = lyx::support;
-namespace external = lyx::external;
-namespace graphics = lyx::graphics;
-
 using std::endl;
 using std::string;
 using std::auto_ptr;
@@ -61,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;
 
@@ -71,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");
 }
 
 
@@ -132,7 +127,6 @@ Translator<DisplayType, string> const & displayTranslator()
 }
 
 } // namespace external
-} // namespace lyx
 
 
 InsetExternalParams::InsetExternalParams()
@@ -296,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;
@@ -438,7 +432,7 @@ void InsetExternal::doDispatch(LCursor & cur, FuncRequest & cmd)
        case LFUN_EXTERNAL_EDIT: {
                Buffer const & buffer = cur.buffer();
                InsetExternalParams p;
-               InsetExternalMailer::string2params(lyx::to_utf8(cmd.argument()), buffer, p);
+               InsetExternalMailer::string2params(to_utf8(cmd.argument()), buffer, p);
                external::editExternal(p, buffer);
                break;
        }
@@ -446,7 +440,7 @@ void InsetExternal::doDispatch(LCursor & cur, FuncRequest & cmd)
        case LFUN_INSET_MODIFY: {
                Buffer const & buffer = cur.buffer();
                InsetExternalParams p;
-               InsetExternalMailer::string2params(lyx::to_utf8(cmd.argument()), buffer, p);
+               InsetExternalMailer::string2params(to_utf8(cmd.argument()), buffer, p);
                setParams(p, buffer);
                break;
        }
@@ -488,10 +482,12 @@ void InsetExternal::edit(LCursor & cur, bool)
 }
 
 
-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;
 }
 
 
@@ -535,7 +531,7 @@ 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;
@@ -563,23 +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)
                // FIXME UNICODE
-               return lyx::to_utf8(support::bformat(_("External template %1$s is not installed"),
-                                       lyx::from_utf8(params.templatename())));
-       return external::doSubstitution(params, buffer, ptr->guiName, false);
+               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 &,
@@ -675,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;
        }
@@ -702,21 +701,25 @@ 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,
-                                                      runparams.inComment);
+                                                       buf, os,
+                                                       *(runparams.exportdata),
+                                                       external_in_tmpdir,
+                                                       runparams.inComment);
+                }
+                
        }
+        
        return external::writeExternal(params_, "LaTeX", buf, os,
-                                      *(runparams.exportdata),
-                                      external_in_tmpdir,
-                                      runparams.inComment);
+                                       *(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,
@@ -725,7 +728,7 @@ int InsetExternal::plaintext(Buffer const & buf, ostream & os,
 }
 
 
-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,
@@ -777,7 +780,7 @@ void InsetExternal::validate(LaTeXFeatures & features) const
        for (; it != end; ++it) {
                string const preamble = etm.getPreambleDefByName(*it);
                if (!preamble.empty())
-                       features.addExternalPreamble(preamble);
+                       features.addPreambleSnippet(preamble);
        }
 }
 
@@ -790,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();
 }
 
@@ -816,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);
        }
@@ -833,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);
        }
 }
@@ -893,3 +893,5 @@ InsetExternalMailer::params2string(InsetExternalParams const & params,
        data << "\\end_inset\n";
        return data.str();
 }
+
+} // namespace lyx