// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
-int const LYX_FORMAT = 374; // rgheck: HTML output options
+int const LYX_FORMAT = 375; // jspitzm: includeonly support
typedef map<string, bool> DepClean;
typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
{
LYXERR(Debug::INFO, "Buffer::Buffer()");
if (cloned_buffer) {
- d->inset = static_cast<InsetText *>(cloned_buffer->d->inset->clone());
+ d->inset = new InsetText(*cloned_buffer->d->inset);
d->inset->setBuffer(*this);
- } else
+ // FIXME: optimize this loop somewhat, maybe by creating a new
+ // general recursive Inset::setId().
+ DocIterator it = doc_iterator_begin(this);
+ DocIterator cloned_it = doc_iterator_begin(cloned_buffer);
+ for (; !it.atEnd(); it.forwardPar(), cloned_it.forwardPar())
+ it.paragraph().setId(cloned_it.paragraph().id());
+ } else
d->inset = new InsetText(this);
d->inset->setAutoBreakRows(true);
d->inset->getText(0)->setMacrocontextPosition(par_iterator_begin());
Buffer * Buffer::clone() const
{
+ // FIXME for asynchronous export and preview: We must also clone all
+ // the child buffers!
return new Buffer(fileName().absFilename(), false, this);
}
}
-void Buffer::changed() const
+void Buffer::changed(bool update_metrics) const
{
if (d->wa_)
- d->wa_->redrawAll();
+ d->wa_->redrawAll(update_metrics);
}
params().listings_params.clear();
params().clearLayoutModules();
params().clearRemovedModules();
+ params().clearIncludedChildren();
params().pdfoptions().clear();
params().indiceslist().clear();
params().backgroundcolor = lyx::rgbFromHexName("#ffffff");
listParentMacros(parentMacros, features);
// Write the preamble
- runparams.use_babel = params().writeLaTeX(os, features, d->texrow);
+ runparams.use_babel = params().writeLaTeX(os, features,
+ d->texrow,
+ d->filename.onlyPath());
runparams.use_japanese = features.isRequired("japanese");
LaTeXFeatures features(*this, params(), runparams);
validate(features);
updateLabels(UpdateMaster, true);
-
- d->texrow.reset();
+ checkBibInfoCache();
+ d->bibinfo_.collectCitedEntries(*this);
if (!only_body) {
os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
BiblioInfo const & Buffer::localBibInfo() const
{
- if (d->bibinfoCacheValid_) {
- support::FileNameList const & bibfilesCache = getBibfilesCache();
- // compare the cached timestamps with the actual ones.
- support::FileNameList::const_iterator ei = bibfilesCache.begin();
- support::FileNameList::const_iterator en = bibfilesCache.end();
- for (; ei != en; ++ ei) {
- time_t lastw = ei->lastModified();
- if (lastw != d->bibfileStatus_[*ei]) {
- d->bibinfoCacheValid_ = false;
- d->bibfileStatus_[*ei] = lastw;
- break;
- }
+ checkBibInfoCache();
+ return d->bibinfo_;
+}
+
+
+void Buffer::checkBibInfoCache() const
+{
+ support::FileNameList const & bibfilesCache = getBibfilesCache();
+ // compare the cached timestamps with the actual ones.
+ support::FileNameList::const_iterator ei = bibfilesCache.begin();
+ support::FileNameList::const_iterator en = bibfilesCache.end();
+ for (; ei != en; ++ ei) {
+ time_t lastw = ei->lastModified();
+ time_t prevw = d->bibfileStatus_[*ei];
+ if (lastw != prevw) {
+ d->bibinfoCacheValid_ = false;
+ d->bibfileStatus_[*ei] = lastw;
}
}
for (InsetIterator it = inset_iterator_begin(inset()); it; ++it)
it->fillWithBibKeys(d->bibinfo_, it);
d->bibinfoCacheValid_ = true;
- }
- return d->bibinfo_;
+ }
}
if (!success)
return false;
+ if (d->cloned_buffer_) {
+ // Enable reverse dvi or pdf to work by copying back the texrow
+ // object to the cloned buffer.
+ // FIXME: There is a possibility of concurrent access to texrow
+ // here from the main GUI thread that should be securized.
+ d->cloned_buffer_->d->texrow = d->texrow;
+ }
+
if (put_in_tempdir) {
result_file = tmp_result_file.absFilename();
return true;
return progress;
}
+
+bool Buffer::reload()
+{
+ setBusy(true);
+ // e.g., read-only status could have changed due to version control
+ d->filename.refresh();
+ docstring const disp_fn = makeDisplayPath(d->filename.absFilename());
+
+ bool const success = loadLyXFile(d->filename);
+ if (success) {
+ updateLabels();
+ changed(true);
+ errors("Parse");
+ message(bformat(_("Document %1$s reloaded."), disp_fn));
+ } else {
+ message(bformat(_("Could not reload document %1$s."), disp_fn));
+ }
+ setBusy(false);
+ return success;
+}
+
+
} // namespace lyx