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);
+ }
+
+ 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;
// InsetInfo needs to know if file is under VCS
lyxvc().file_found_hook(fn);
d->read_only = !fname.isWritable();
}
-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
{
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)) {
+ ReadStatus const ret_llf = loadThisLyXFile(emergencyFile);
+ bool const success = (ret_llf == ReadSuccess);
+ if (success) {
saveCheckSum(fn);
+ markDirty();
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;
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);
return ReadSuccess;
if (ret_ra == ReadSuccess || ret_ra == ReadCancel)
return ret_ra;
+ return loadThisLyXFile(fn);
+}
+
+
+Buffer::ReadStatus Buffer::loadThisLyXFile(FileName const & fn)
+{
return readFile(fn);
}