#include "Language.h"
#include "LaTeX.h"
#include "Layout.h"
+#include "LayoutPtr.h"
#include "LyX.h"
-#include "lyxlayout_ptr_fwd.h"
#include "TextClass.h"
#include "TextClassList.h"
#include "Paragraph.h"
#include "ParagraphList.h"
#include "ParagraphParameters.h"
#include "ParIterator.h"
-#include "LyXVC.h"
#include "TexRow.h"
#include "Text.h"
#include "TocBackend.h"
-#include "VCBackend.h"
#include "frontends/alert.h"
#include "insets/InsetInclude.h"
#include "support/filetools.h"
-#include "support/fs_extras.h"
#include "support/lyxlib.h"
-#include <boost/bind.hpp>
-
using std::min;
using std::string;
namespace Alert = frontend::Alert;
-namespace {
-
-bool readFile(Buffer * const b, FileName const & s)
-{
- BOOST_ASSERT(b);
-
- // File information about normal file
- if (!s.exists()) {
- docstring const file = makeDisplayPath(s.absFilename(), 50);
- docstring text = bformat(_("The specified document\n%1$s"
- "\ncould not be read."), file);
- Alert::error(_("Could not read document"), text);
- return false;
- }
-
- // Check if emergency save file exists and is newer.
- FileName const e(s.absFilename() + ".emergency");
-
- if (e.exists() && s.exists() && e.lastModified() > s.lastModified()) {
- docstring const file = makeDisplayPath(s.absFilename(), 20);
- docstring const text =
- bformat(_("An emergency save of the document "
- "%1$s exists.\n\n"
- "Recover emergency save?"), file);
- switch (Alert::prompt(_("Load emergency save?"), text, 0, 2,
- _("&Recover"), _("&Load Original"),
- _("&Cancel")))
- {
- case 0:
- // the file is not saved if we load the emergency file.
- b->markDirty();
- return b->readFile(e);
- case 1:
- break;
- default:
- return false;
- }
- }
-
- // Now check if autosave file is newer.
- FileName const a(onlyPath(s.absFilename()) + '#' + onlyFilename(s.absFilename()) + '#');
-
- if (a.exists() && s.exists() && a.lastModified() > s.lastModified()) {
- docstring const file = makeDisplayPath(s.absFilename(), 20);
- docstring const text =
- bformat(_("The backup of the document "
- "%1$s is newer.\n\nLoad the "
- "backup instead?"), file);
- switch (Alert::prompt(_("Load backup?"), text, 0, 2,
- _("&Load backup"), _("Load &original"),
- _("&Cancel") ))
- {
- case 0:
- // the file is not saved if we load the autosave file.
- b->markDirty();
- return b->readFile(a);
- case 1:
- // Here we delete the autosave
- unlink(a);
- break;
- default:
- return false;
- }
- }
- return b->readFile(s);
-}
-
-
-} // namespace anon
-
-
-
-bool loadLyXFile(Buffer * b, FileName const & s)
-{
- BOOST_ASSERT(b);
-
- if (s.isReadable()) {
- if (readFile(b, s)) {
- b->lyxvc().file_found_hook(s);
- if (!s.isWritable())
- b->setReadonly(true);
- return true;
- }
- } else {
- docstring const file = makeDisplayPath(s.absFilename(), 20);
- // Here we probably should run
- if (LyXVC::file_not_found_hook(s)) {
- docstring const text =
- bformat(_("Do you want to retrieve the document"
- " %1$s from version control?"), file);
- int const ret = Alert::prompt(_("Retrieve from version control?"),
- text, 0, 1, _("&Retrieve"), _("&Cancel"));
-
- if (ret == 0) {
- // How can we know _how_ to do the checkout?
- // With the current VC support it has to be,
- // a RCS file since CVS do not have special ,v files.
- RCS::retrieve(s);
- return loadLyXFile(b, s);
- }
- }
- }
- return false;
-}
-
-
-bool checkIfLoaded(FileName const & fn)
-{
- return theBufferList().getBuffer(fn.absFilename());
-}
-
Buffer * checkAndLoadLyXFile(FileName const & filename)
{
if (theBufferList().close(checkBuffer, false))
// Load it again.
return checkAndLoadLyXFile(filename);
- else
- // The file could not be closed.
- return 0;
+ // The file could not be closed.
+ return 0;
}
if (filename.isReadable()) {
Buffer * b = theBufferList().newBuffer(filename.absFilename());
- if (!lyx::loadLyXFile(b, filename)) {
+ if (!b->loadLyXFile(filename)) {
theBufferList().release(b);
return 0;
}
return 0;
}
+
// FIXME newFile() should probably be a member method of Application...
Buffer * newFile(string const & filename, string const & templatename,
bool const isNamed)
}
-void bufferErrors(Buffer const & buf, TeXErrors const & terr,
- ErrorList & errorList)
-{
- TeXErrors::Errors::const_iterator cit = terr.begin();
- TeXErrors::Errors::const_iterator end = terr.end();
-
- for (; cit != end; ++cit) {
- int id_start = -1;
- int pos_start = -1;
- int errorrow = cit->error_in_line;
- bool found = buf.texrow().getIdFromRow(errorrow, id_start,
- pos_start);
- int id_end = -1;
- int pos_end = -1;
- do {
- ++errorrow;
- found = buf.texrow().getIdFromRow(errorrow, id_end,
- pos_end);
- } while (found && id_start == id_end && pos_start == pos_end);
-
- errorList.push_back(ErrorItem(cit->error_desc,
- cit->error_text, id_start, pos_start, pos_end));
- }
-}
-
-
int countWords(DocIterator const & from, DocIterator const & to)
{
int count = 0;
Paragraph & prev_par = *prev_it;
depth_type const prev_depth = getDepth(prev_it);
if (labeltype == prev_par.layout()->labeltype) {
- if (prev_depth < min_depth) {
+ if (prev_depth < min_depth)
return prev_par.itemdepth + 1;
- }
- else if (prev_depth == min_depth) {
+ if (prev_depth == min_depth)
return prev_par.itemdepth;
- }
}
min_depth = std::min(min_depth, prev_depth);
// small optimization: if we are at depth 0, we won't
// find anything else
- if (prev_depth == 0) {
+ if (prev_depth == 0)
return 0;
- }
}
}
cbuf.tocBackend().update();
if (!childonly)
cbuf.structureChanged();
- // FIXME
- // the embedding signal is emitted with structureChanged signal
- // this is inaccurate so these two will be separated later.
- //cbuf.embeddedFiles().update();
- //cbuf.embeddingChanged();
}
}
-textclass_type defaultTextclass()
-{
- // We want to return the article class. if `first' is
- // true in the returned pair, then `second' is the textclass
- // number; if it is false, second is 0. In both cases, second
- // is what we want.
- return textclasslist.numberOfClass("article").second;
-}
-
} // namespace lyx