from_utf8(d->temppath.absFileName())));
}
- // Remove any previewed LaTeX snippets associated with this buffer.
if (!isClone())
- thePreviews().removeLoader(*this);
+ removePreviews();
delete d;
}
Lexer lex;
istringstream is(s);
lex.setStream(is);
- FileName const name = FileName::tempName("Buffer_readString");
- switch (readFile(lex, name, true)) {
- case ReadFailure:
- return false;
+ FileName const fn = FileName::tempName("Buffer_readString");
+
+ int file_format;
+ ReadStatus const ret_plf = parseLyXFormat(lex, fn, file_format);
+ if (ret_plf != ReadSuccess)
+ return ret_plf;
- case ReadWrongVersion: {
+ if (file_format != LYX_FORMAT) {
// We need to call lyx2lyx, so write the input to a file
- ofstream os(name.toFilesystemEncoding().c_str());
+ ofstream os(fn.toFilesystemEncoding().c_str());
os << s;
os.close();
- return readFile(name);
- }
- default:
- break;
+ // lyxvc in readFile
+ return readFile(fn) == ReadSuccess;
}
+ if (readDocument(lex))
+ return false;
return true;
}
Lexer lex;
lex.setFile(fname);
- ReadStatus const ret_rf = readFile(lex, fname);
- if (ret_rf != ReadSuccess)
- return ret_rf;
+ int file_format;
+ ReadStatus const ret_plf = parseLyXFormat(lex, fn, file_format);
+ if (ret_plf != ReadSuccess)
+ return ret_plf;
+
+ if (file_format != LYX_FORMAT) {
+ FileName tmpFile;
+ ReadStatus const ret_clf = convertLyXFormat(fn, tmpFile, file_format);
+ if (ret_clf != ReadSuccess)
+ return ret_clf;
+ return readFile(tmpFile);
+ }
// InsetInfo needs to know if file is under VCS
lyxvc().file_found_hook(fn);
+
+ if (readDocument(lex)) {
+ Alert::error(_("Document format failure"),
+ bformat(_("%1$s ended unexpectedly, which means"
+ " that it is probably corrupted."),
+ from_utf8(fn.absFileName())));
+ return ReadDocumentFailure;
+ }
+
+ d->file_fully_loaded = true;
d->read_only = !fname.isWritable();
params().compressed = fname.isZippedFile();
+ saveCheckSum();
return ReadSuccess;
}
}
+void Buffer::updatePreviews() const
+{
+ if (graphics::Previews::status() != LyXRC::PREVIEW_OFF)
+ thePreviews().generateBufferPreviews(*this);
+}
+
+
+void Buffer::removePreviews() const
+{
+ thePreviews().removeLoader(*this);
+}
+
+
Buffer::ReadStatus Buffer::parseLyXFormat(Lexer & lex,
FileName const & fn, int & file_format) const
{
}
-Buffer::ReadStatus Buffer::readFile(Lexer & lex, FileName const & fn,
- bool fromstring)
-{
- int file_format;
- ReadStatus const ret_plf = parseLyXFormat(lex, fn, file_format);
- if (ret_plf != ReadSuccess)
- return ret_plf;
-
- if (file_format != LYX_FORMAT) {
- if (fromstring)
- // lyx2lyx would fail
- return ReadWrongVersion;
-
- FileName tmpFile;
- ReadStatus const ret_clf = convertLyXFormat(fn, tmpFile, file_format);
- if (ret_clf != ReadSuccess)
- return ret_clf;
- else
- return readFile(tmpFile);
- }
-
- if (readDocument(lex)) {
- Alert::error(_("Document format failure"),
- bformat(_("%1$s ended unexpectedly, which means"
- " that it is probably corrupted."),
- from_utf8(fn.absFileName())));
- return ReadDocumentFailure;
- }
-
- d->file_fully_loaded = true;
- return ReadSuccess;
-}
-
-
// Should probably be moved to somewhere else: BufferView? GuiView?
bool Buffer::save() const
{
// see bug 6587
// removeAutosaveFile();
- saveCheckSum(d->filename);
+ saveCheckSum();
message(str + _(" done."));
return true;
d->bibfiles_cache_.clear();
for (InsetIterator it = inset_iterator_begin(inset()); it; ++it) {
if (it->lyxCode() == BIBTEX_CODE) {
- InsetBibtex const & inset =
- static_cast<InsetBibtex const &>(*it);
+ InsetBibtex const & inset = static_cast<InsetBibtex const &>(*it);
support::FileNameList const bibfiles = inset.getBibFiles();
d->bibfiles_cache_.insert(d->bibfiles_cache_.end(),
bibfiles.begin(),
bibfiles.end());
} else if (it->lyxCode() == INCLUDE_CODE) {
- InsetInclude & inset =
- static_cast<InsetInclude &>(*it);
+ InsetInclude & inset = static_cast<InsetInclude &>(*it);
Buffer const * const incbuf = inset.getChildBuffer();
if (!incbuf)
continue;
bool success = false;
for (; it != end; ++it) {
if (it->lyxCode() == BRANCH_CODE) {
- InsetBranch & ins = dynamic_cast<InsetBranch &>(*it);
+ InsetBranch & ins = static_cast<InsetBranch &>(*it);
if (ins.branch() == oldname) {
undo().recordUndo(it);
ins.rename(newname);
}
-void Buffer::saveCheckSum(FileName const & file) const
+void Buffer::saveCheckSum() const
{
+ FileName const & file = d->filename;
if (file.exists()) {
d->timestamp_ = file.lastModified();
d->checksum_ = file.checksum();
continue;
}
- if (doing_export && iit->inset->asInsetMath()) {
- InsetMath * im = static_cast<InsetMath *>(iit->inset);
- if (im->asHullInset()) {
- InsetMathHull * hull = static_cast<InsetMathHull *>(im);
+ InsetMath * im = iit->inset->asInsetMath();
+ if (doing_export && im) {
+ InsetMathHull * hull = im->asHullInset();
+ if (hull)
hull->recordLocation(it);
- }
}
if (iit->inset->lyxCode() != MATHMACRO_CODE)
// get macro data
MathMacroTemplate & macroTemplate =
- static_cast<MathMacroTemplate &>(*iit->inset);
+ *iit->inset->asInsetMath()->asMacroTemplate();
MacroContext mc(owner_, it);
macroTemplate.updateToContext(mc);
InsetIterator const end = inset_iterator_end(inset());
for (; it != end; ++it) {
if (it->lyxCode() == BRANCH_CODE) {
- InsetBranch & br = dynamic_cast<InsetBranch &>(*it);
+ InsetBranch & br = static_cast<InsetBranch &>(*it);
docstring const name = br.branch();
if (!from_master && !params().branchlist().find(name))
result.push_back(name);
for (InsetIterator it = inset_iterator_begin(inset()); it; ++it) {
if (it->lyxCode() == code) {
- InsetCommand & inset = static_cast<InsetCommand &>(*it);
- docstring const oldValue = inset.getParam(paramName);
+ InsetCommand * inset = it->asInsetCommand();
+ if (!inset)
+ continue;
+ docstring const oldValue = inset->getParam(paramName);
if (oldValue == from)
- inset.setParam(paramName, to);
+ inset->setParam(paramName, to);
}
}
}
}
-Buffer::ReadStatus Buffer::readFromVC(FileName const & fn)
+Buffer::ReadStatus Buffer::extractFromVC(FileName const & fn)
{
bool const found = LyXVC::file_not_found_hook(fn);
if (!found)
}
-Buffer::ReadStatus Buffer::readEmergency(FileName const & fn)
+Buffer::ReadStatus Buffer::loadEmergency(FileName const & fn)
{
FileName const emergencyFile = getEmergencyFileNameFor(fn);
if (!emergencyFile.exists()
docstring const file = makeDisplayPath(fn.absFileName(), 20);
docstring const text = bformat(_("An emergency save of the document "
"%1$s exists.\n\nRecover emergency save?"), file);
- int const ret = Alert::prompt(_("Load emergency save?"), text,
+
+ int const load_emerg = Alert::prompt(_("Load emergency save?"), text,
0, 2, _("&Recover"), _("&Load Original"), _("&Cancel"));
- switch (ret)
+ switch (load_emerg)
{
case 0: {
- // the file is not saved if we load the emergency file.
- markDirty();
docstring str;
- bool res;
- ReadStatus const ret_rf = readFile(emergencyFile);
- if (res = (ret_rf == ReadSuccess)) {
- saveCheckSum(fn);
+ ReadStatus const ret_llf = loadThisLyXFile(emergencyFile);
+ bool const success = (ret_llf == ReadSuccess);
+ if (success) {
+ markDirty();
+ lyxvc().file_found_hook(fn);
str = _("Document was successfully recovered.");
} else
str = _("Document was NOT successfully recovered.");
str += "\n\n" + bformat(_("Remove emergency file now?\n(%1$s)"),
makeDisplayPath(emergencyFile.absFileName()));
- if (!Alert::prompt(_("Delete emergency file?"), str, 1, 1,
- _("&Remove"), _("&Keep"))) {
+ int const del_emerg =
+ Alert::prompt(_("Delete emergency file?"), str, 1, 1,
+ _("&Remove"), _("&Keep"));
+ if (del_emerg == 0) {
emergencyFile.removeFile();
- if (res)
+ if (success)
Alert::warning(_("Emergency file deleted"),
_("Do not forget to save your file now!"), true);
}
- return res ? ReadSuccess : ReadEmergencyFailure;
+ return success ? ReadSuccess : ReadEmergencyFailure;
}
- case 1:
- if (!Alert::prompt(_("Delete emergency file?"),
+ case 1: {
+ int const del_emerg =
+ Alert::prompt(_("Delete emergency file?"),
_("Remove emergency file now?"), 1, 1,
- _("&Remove"), _("&Keep")))
+ _("&Remove"), _("&Keep"));
+ if (del_emerg == 0)
emergencyFile.removeFile();
return ReadOriginal;
+ }
default:
break;
}
-Buffer::ReadStatus Buffer::readAutosave(FileName const & fn)
+Buffer::ReadStatus Buffer::loadAutosave(FileName const & fn)
{
// Now check if autosave file is newer.
FileName const autosaveFile = getAutosaveFileNameFor(fn);
switch (ret)
{
case 0: {
- ReadStatus const ret_rf = readFile(autosaveFile);
+ ReadStatus const ret_llf = loadThisLyXFile(autosaveFile);
// the file is not saved if we load the autosave file.
- if (ret_rf == ReadSuccess) {
+ if (ret_llf == ReadSuccess) {
markDirty();
- saveCheckSum(fn);
+ lyxvc().file_found_hook(fn);
return ReadSuccess;
}
return ReadAutosaveFailure;
Buffer::ReadStatus Buffer::loadLyXFile(FileName const & fn)
{
if (!fn.isReadableFile()) {
- ReadStatus const ret_rvc = readFromVC(fn);
+ ReadStatus const ret_rvc = extractFromVC(fn);
if (ret_rvc != ReadSuccess)
return ret_rvc;
}
- ReadStatus const ret_re = readEmergency(fn);
+ ReadStatus const ret_re = loadEmergency(fn);
if (ret_re == ReadSuccess || ret_re == ReadCancel)
return ret_re;
- ReadStatus const ret_ra = readAutosave(fn);
+ ReadStatus const ret_ra = loadAutosave(fn);
if (ret_ra == ReadSuccess || ret_ra == ReadCancel)
return ret_ra;
+ return loadThisLyXFile(fn);
+}
+
+
+Buffer::ReadStatus Buffer::loadThisLyXFile(FileName const & fn)
+{
return readFile(fn);
}
}
-bool Buffer::reload()
+Buffer::ReadStatus Buffer::reload()
{
setBusy(true);
// c.f. bug 6587
d->filename.refresh();
docstring const disp_fn = makeDisplayPath(d->filename.absFileName());
- bool const success = (loadLyXFile(d->filename) == ReadSuccess);
- if (success) {
+ ReadStatus const status = loadLyXFile(d->filename);
+ if (status == ReadSuccess) {
updateBuffer();
changed(true);
updateTitles();
markClean();
- saveCheckSum(d->filename);
message(bformat(_("Document %1$s reloaded."), disp_fn));
} else {
message(bformat(_("Could not reload document %1$s."), disp_fn));
}
setBusy(false);
- thePreviews().removeLoader(*this);
- if (graphics::Previews::status() != LyXRC::PREVIEW_OFF)
- thePreviews().generateBufferPreviews(*this);
+ removePreviews();
+ updatePreviews();
errors("Parse");
- return success;
+ return status;
}