X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbuffer.C;h=5fa662477800cf598057e9cc4304f2b75faef88e;hb=78046794ccfce3a20751e00b35295c290853afd6;hp=9bf58d5507e05005088d6f91abbe8ea0ba2e8105;hpb=e7e92ec6609a97554e36833d799da03802881bcf;p=lyx.git diff --git a/src/buffer.C b/src/buffer.C index 9bf58d5507..5fa6624778 100644 --- a/src/buffer.C +++ b/src/buffer.C @@ -22,6 +22,7 @@ #include "errorlist.h" #include "exporter.h" #include "format.h" +#include "funcrequest.h" #include "gettext.h" #include "iterators.h" #include "language.h" @@ -122,6 +123,7 @@ using std::ofstream; using std::pair; using std::stack; using std::vector; +using std::string; // all these externs should eventually be removed. @@ -184,13 +186,19 @@ struct Buffer::Impl string filepath; boost::scoped_ptr messages; + + /** set to true only when the file is fully loaded. + * Used to prevent the premature generation of previews + * and by the citation inset. + */ + bool file_fully_loaded; }; Buffer::Impl::Impl(Buffer & parent, string const & file, bool readonly_) : nicefile(true), lyx_clean(true), bak_clean(true), unnamed(false), read_only(readonly_), - filename(file), filepath(OnlyPath(file)) + filename(file), filepath(OnlyPath(file)), file_fully_loaded(false) { lyxvc.buffer(&parent); if (readonly_ || lyxrc.use_tempdir) @@ -479,7 +487,7 @@ bool Buffer::readBody(LyXLex & lex, ParagraphList::iterator pit) int Buffer::readParagraph(LyXLex & lex, string const & token, ParagraphList & pars, ParagraphList::iterator & pit, - Paragraph::depth_type & depth) + lyx::depth_type & depth) { static Change current_change; int unknown = 0; @@ -604,6 +612,12 @@ bool Buffer::readFile(string const & filename, ParagraphList::iterator pit) } +bool Buffer::fully_loaded() const +{ + return pimpl_->file_fully_loaded; +} + + bool Buffer::readFile(LyXLex & lex, string const & filename, ParagraphList::iterator pit) { @@ -695,6 +709,7 @@ bool Buffer::readFile(LyXLex & lex, string const & filename, " that it is probably corrupted."), filename)); } + pimpl_->file_fully_loaded = true; return true; } @@ -1111,7 +1126,7 @@ void Buffer::makeLaTeXFile(ostream & os, // validate the buffer. lyxerr[Debug::LATEX] << " Validating buffer..." << endl; - LaTeXFeatures features(params()); + LaTeXFeatures features(*this, params()); validate(features); lyxerr[Debug::LATEX] << " Buffer validation done." << endl; @@ -1250,7 +1265,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only) niceFile() = nice; // this will be used by included files. - LaTeXFeatures features(params()); + LaTeXFeatures features(*this, params()); validate(features); @@ -1481,7 +1496,7 @@ void reset(PAR_TAG & p1, PAR_TAG const & p2) // Handle internal paragraph parsing -- layout already processed. void Buffer::simpleLinuxDocOnePar(ostream & os, ParagraphList::iterator par, - Paragraph::depth_type /*depth*/) const + lyx::depth_type /*depth*/) const { LyXLayout_ptr const & style = par->layout(); @@ -1680,7 +1695,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body) niceFile() = nice; // this will be used by Insetincludes. - LaTeXFeatures features(params()); + LaTeXFeatures features(*this, params()); validate(features); texrow().reset(); @@ -1951,7 +1966,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body) void Buffer::simpleDocBookOnePar(ostream & os, ParagraphList::iterator par, int & desc_on, - Paragraph::depth_type depth) const + lyx::depth_type depth) const { bool emph_flag = false; @@ -2140,7 +2155,7 @@ void Buffer::getLabelList(std::vector & list) const for (inset_iterator it = inset_const_iterator_begin(); it != inset_const_iterator_end(); ++it) { - it->getLabelList(list); + it->getLabelList(*this, list); } } @@ -2161,14 +2176,19 @@ void Buffer::fillWithBibKeys(std::vector > & keys) con for (inset_iterator it = inset_const_iterator_begin(); it != inset_const_iterator_end(); ++it) { - if (it->lyxCode() == InsetOld::BIBTEX_CODE) - static_cast(*it).fillWithBibKeys(*this, keys); - else if (it->lyxCode() == InsetOld::INCLUDE_CODE) - static_cast(*it).fillWithBibKeys(keys); - else if (it->lyxCode() == InsetOld::BIBITEM_CODE) { - InsetBibitem & bib = static_cast(*it); - string const key = bib.getContents(); - string const opt = bib.getOptions(); + if (it->lyxCode() == InsetOld::BIBTEX_CODE) { + InsetBibtex const & inset = + dynamic_cast(*it); + inset.fillWithBibKeys(*this, keys); + } else if (it->lyxCode() == InsetOld::INCLUDE_CODE) { + InsetInclude const & inset = + dynamic_cast(*it); + inset.fillWithBibKeys(*this, keys); + } else if (it->lyxCode() == InsetOld::BIBITEM_CODE) { + InsetBibitem const & inset = + dynamic_cast(*it); + string const key = inset.getContents(); + string const opt = inset.getOptions(); string const ref; // = pit->asString(this, false); string const info = opt + "TheBibliographyRef" + ref; keys.push_back(pair(key, info)); @@ -2194,22 +2214,17 @@ void Buffer::markDepClean(string const & name) bool Buffer::dispatch(string const & command, bool * result) { - // Split command string into command and argument - string cmd; - string line = ltrim(command); - string const arg = trim(split(line, cmd, ' ')); - - return dispatch(lyxaction.LookupFunc(cmd), arg, result); + return dispatch(lyxaction.lookupFunc(command), result); } -bool Buffer::dispatch(int action, string const & argument, bool * result) +bool Buffer::dispatch(FuncRequest const & func, bool * result) { bool dispatched = true; - switch (action) { + switch (func.action) { case LFUN_EXPORT: { - bool const tmp = Exporter::Export(this, argument, false); + bool const tmp = Exporter::Export(this, func.argument, false); if (result) *result = tmp; break;