X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetinclude.C;h=12315f3cc37c096106535b93d34575e46cb88b3c;hb=3ce727041d6eef7a30ea58d8469ac8042eb20409;hp=42dfa7bd8def2a59d19db20f39640d0680b576b4;hpb=fc8465aa1f6f29774d2f35d627b40198fa489cb1;p=lyx.git diff --git a/src/insets/insetinclude.C b/src/insets/insetinclude.C index 42dfa7bd8d..12315f3cc3 100644 --- a/src/insets/insetinclude.C +++ b/src/insets/insetinclude.C @@ -12,6 +12,7 @@ #include "insetinclude.h" #include "buffer.h" #include "bufferlist.h" +#include "BufferView.h" #include "debug.h" #include "support/filetools.h" #include "lyxrc.h" @@ -20,7 +21,6 @@ #include "gettext.h" #include "support/FileInfo.h" #include "layout.h" -#include "lyxfunc.h" using std::ostream; using std::endl; @@ -31,11 +31,11 @@ extern BufferList bufferlist; namespace { -inline -string const unique_id() { +string const unique_id() +{ static unsigned int seed = 1000; - std::ostringstream ost; + ostringstream ost; ost << "file" << ++seed; // Needed if we use lyxstring. @@ -45,19 +45,16 @@ string const unique_id() { } // namespace anon -InsetInclude::InsetInclude(InsetIncludeParams const & p) -{ - include_label = unique_id(); - setFromParams(p); - params_.buffer = p.buffer; -} +InsetInclude::InsetInclude(Params const & p) + : params_(p), include_label(unique_id()) +{} InsetInclude::InsetInclude(InsetCommandParams const & p, Buffer const & b) { + params_.cparams = p; + params_.masterFilename_ = b.fileName(); include_label = unique_id(); - params_.buffer = &b; - setFromParams(p); } @@ -67,66 +64,84 @@ InsetInclude::~InsetInclude() } -InsetInclude::InsetIncludeParams const & InsetInclude::params() const +InsetInclude::Params const & InsetInclude::params() const { return params_; } -void InsetInclude::setFromParams(InsetIncludeParams const & p) +bool InsetInclude::Params::operator==(Params const & o) const { - params_.cparams.setContents(p.cparams.getContents()); - params_.noload = p.noload; - if (params_.flag == p.flag) - return; + if (cparams == o.cparams && flag == o.flag && + noload == o.noload && masterFilename_ == o.masterFilename_) + return true; + + return false; +} - params_.flag = p.flag; - string command; +bool InsetInclude::Params::operator!=(Params const & o) const +{ + return !(*this == o); +} + +void InsetInclude::set(Params const & p) +{ + params_ = p; + + // Just to be safe... + string command; + switch (params_.flag) { - case INCLUDE: - command="include"; - break; - case VERB: - command="verbatiminput"; - break; - case INPUT: - command="input"; - break; - case VERBAST: - command="verbatiminput*"; - break; + case INCLUDE: + command="include"; + break; + case VERB: + command="verbatiminput"; + break; + case INPUT: + command="input"; + break; + case VERBAST: + command="verbatiminput*"; + break; } - + params_.cparams.setCmdName(command); } -Inset * InsetInclude::Clone(Buffer const & buffer) const +Inset * InsetInclude::clone(Buffer const & buffer, bool) const { - InsetIncludeParams p(params_); - p.buffer = &buffer; + Params p(params_); + p.masterFilename_ = buffer.fileName(); - return new InsetInclude (p); + return new InsetInclude(p); } -void InsetInclude::Edit(BufferView * bv, int, int, unsigned int) +void InsetInclude::edit(BufferView * bv, int, int, unsigned int) { bv->owner()->getDialogs()->showInclude(this); } -void InsetInclude::Write(Buffer const *, ostream & os) const +void InsetInclude::edit(BufferView * bv, bool) +{ + edit(bv, 0, 0, 0); +} + + +void InsetInclude::write(Buffer const *, ostream & os) const { os << "Include " << params_.cparams.getCommand() << "\n"; } -void InsetInclude::Read(Buffer const *, LyXLex & lex) +void InsetInclude::read(Buffer const *, LyXLex & lex) { - params_.cparams.Read(lex); + params_.cparams.read(lex); if (params_.cparams.getCmdName() == "include") params_.flag = INCLUDE; @@ -184,7 +199,7 @@ string const InsetInclude::getFileName() const string const InsetInclude::getMasterFilename() const { - return params_.buffer->fileName(); + return params_.masterFilename_; } @@ -206,7 +221,7 @@ bool InsetInclude::loadIfNeeded() const } -int InsetInclude::Latex(Buffer const * buffer, ostream & os, +int InsetInclude::latex(Buffer const * buffer, ostream & os, bool /*fragile*/, bool /*fs*/) const { string incfile(params_.cparams.getContents()); @@ -276,7 +291,7 @@ int InsetInclude::Latex(Buffer const * buffer, ostream & os, } -int InsetInclude::Ascii(Buffer const *, std::ostream & os, int) const +int InsetInclude::ascii(Buffer const *, std::ostream & os, int) const { if (isVerbatim()) os << GetFileContents(getFileName()); @@ -284,7 +299,7 @@ int InsetInclude::Ascii(Buffer const *, std::ostream & os, int) const } -int InsetInclude::Linuxdoc(Buffer const * buffer, ostream & os) const +int InsetInclude::linuxdoc(Buffer const * buffer, ostream & os) const { string incfile(params_.cparams.getContents()); @@ -323,7 +338,7 @@ int InsetInclude::Linuxdoc(Buffer const * buffer, ostream & os) const } -int InsetInclude::DocBook(Buffer const * buffer, ostream & os) const +int InsetInclude::docBook(Buffer const * buffer, ostream & os) const { string incfile(params_.cparams.getContents()); @@ -361,17 +376,17 @@ int InsetInclude::DocBook(Buffer const * buffer, ostream & os) const } -void InsetInclude::Validate(LaTeXFeatures & features) const +void InsetInclude::validate(LaTeXFeatures & features) const { string incfile(params_.cparams.getContents()); string writefile; - Buffer const & b = *params_.buffer; + Buffer const * const b = bufferlist.getBuffer(getMasterFilename()); - if (!b.tmppath.empty() && b.niceFile) { + if (b && !b->tmppath.empty() && b->niceFile) { incfile = subst(incfile, '/','@'); - writefile = AddName(b.tmppath, incfile); + writefile = AddName(b->tmppath, incfile); } else writefile = getFileName(); @@ -388,8 +403,9 @@ void InsetInclude::Validate(LaTeXFeatures & features) const // to be loaded: if (loadIfNeeded()) { // a file got loaded - Buffer * tmp = bufferlist.getBuffer(getFileName()); - tmp->validate(features); + Buffer const * const tmp = bufferlist.getBuffer(getFileName()); + if (tmp) + tmp->validate(features); } }