#include "Floating.h"
#include "FloatList.h"
#include "gettext.h"
+#include "InsetList.h"
#include "InsetIterator.h"
#include "Language.h"
#include "LaTeX.h"
+#include "Layout.h"
+#include "LayoutPtr.h"
#include "LyX.h"
#include "TextClass.h"
#include "TextClassList.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>
-#include <boost/filesystem/operations.hpp>
-
using std::min;
using std::string;
using support::unlink;
namespace Alert = frontend::Alert;
-namespace fs = boost::filesystem;
-
-namespace {
-
-bool readFile(Buffer * const b, FileName const & s)
-{
- BOOST_ASSERT(b);
-
- // File information about normal file
- if (!fs::exists(s.toFilesystemEncoding())) {
- 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 (fs::exists(e.toFilesystemEncoding()) &&
- fs::exists(s.toFilesystemEncoding()) &&
- fs::last_write_time(e.toFilesystemEncoding()) > fs::last_write_time(s.toFilesystemEncoding()))
- {
- 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 (fs::exists(a.toFilesystemEncoding()) &&
- fs::exists(s.toFilesystemEncoding()) &&
- fs::last_write_time(a.toFilesystemEncoding()) > fs::last_write_time(s.toFilesystemEncoding()))
- {
- 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 (fs::is_readable(s.toFilesystemEncoding())) {
- if (readFile(b, s)) {
- b->lyxvc().file_found_hook(s);
- if (!fs::is_writable(s.toFilesystemEncoding()))
- 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 (isFileReadable(filename)) {
+ 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)
}
b->setReadonly(false);
- b->fully_loaded(true);
+ b->setFullyLoaded(true);
return b;
}
-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));
- }
-}
-
-
-string const bufferFormat(Buffer const & buffer)
-{
- if (buffer.isDocBook())
- return "docbook";
- else if (buffer.isLiterate())
- return "literate";
- else
- return "latex";
-}
-
-
int countWords(DocIterator const & from, DocIterator const & to)
{
int count = 0;
depth_type getItemDepth(ParIterator const & it)
{
Paragraph const & par = *it;
- LYX_LABEL_TYPES const labeltype = par.layout()->labeltype;
+ LabelType const labeltype = par.layout()->labeltype;
if (labeltype != LABEL_ENUMERATE && labeltype != LABEL_ITEMIZE)
return 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;
- }
}
}
setLabel(buf, parit);
// Now the insets
- InsetList::const_iterator iit = parit->insetlist.begin();
- InsetList::const_iterator end = parit->insetlist.end();
+ InsetList::const_iterator iit = parit->insetList().begin();
+ InsetList::const_iterator end = parit->insetList().end();
for (; iit != end; ++iit) {
parit.pos() = iit->pos;
iit->inset->updateLabels(buf, parit);
// the contents of the paragraphs.
void updateLabels(Buffer const & buf, bool childonly)
{
- Buffer const * const master = buf.getMasterBuffer();
+ Buffer const * const master = buf.masterBuffer();
// Use the master text class also for child documents
TextClass const & textclass = master->params().getTextClass();
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();
}
void checkBufferStructure(Buffer & buffer, ParIterator const & par_it)
{
if (par_it->layout()->toclevel != Layout::NOT_IN_TOC) {
- Buffer * master = buffer.getMasterBuffer();
+ Buffer * master = buffer.masterBuffer();
master->tocBackend().updateItem(par_it);
master->structureChanged();
}
}
-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;
-}
-
-void loadChildDocuments(Buffer const & buf)
-{
- bool parse_error = false;
-
- for (InsetIterator it = inset_iterator_begin(buf.inset()); it; ++it) {
- if (it->lyxCode() != Inset::INCLUDE_CODE)
- continue;
- InsetInclude const & inset = static_cast<InsetInclude const &>(*it);
- InsetCommandParams const & ip = inset.params();
- Buffer * child = loadIfNeeded(buf, ip);
- if (!child)
- continue;
- parse_error |= !child->errorList("Parse").empty();
- loadChildDocuments(*child);
- }
-
- if (use_gui && buf.getMasterBuffer() == &buf)
- updateLabels(buf);
-}
} // namespace lyx