X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbuffer_funcs.cpp;h=17aab767c2c91c04b3a86a78533a7c5d97cd87da;hb=cca78e3c8ae27431323746abd64f9d7db017099d;hp=16a3ca1cb82aa6150564f7be6ae7659c9a4911bd;hpb=7f461f4392a19cf488dec005d2f12cfea83655d9;p=lyx.git diff --git a/src/buffer_funcs.cpp b/src/buffer_funcs.cpp index 16a3ca1cb8..17aab767c2 100644 --- a/src/buffer_funcs.cpp +++ b/src/buffer_funcs.cpp @@ -41,7 +41,7 @@ #include "insets/InsetBibitem.h" #include "insets/InsetInclude.h" -#include "support/assert.h" +#include "support/lassert.h" #include "support/convert.h" #include "support/debug.h" #include "support/filetools.h" @@ -60,7 +60,7 @@ namespace Alert = frontend::Alert; Buffer * checkAndLoadLyXFile(FileName const & filename) { // File already open? - Buffer * checkBuffer = theBufferList().getBuffer(filename.absFilename()); + Buffer * checkBuffer = theBufferList().getBuffer(filename); if (checkBuffer) { if (checkBuffer->isClean()) return checkBuffer; @@ -153,16 +153,15 @@ Buffer * newUnnamedFile(string const & templatename, FileName const & path) { static int newfile_number; - string document_path = path.absFilename(); - string filename = addName(document_path, + FileName filename(path, "newfile" + convert(++newfile_number) + ".lyx"); while (theBufferList().exists(filename) - || FileName(filename).isReadableFile()) { + || filename.isReadableFile()) { ++newfile_number; - filename = addName(document_path, + filename.set(path, "newfile" + convert(newfile_number) + ".lyx"); } - return newFile(filename, templatename, false); + return newFile(filename.absFilename(), templatename, false); } @@ -292,7 +291,8 @@ bool needEnumCounterReset(ParIterator const & it) // set the label of a paragraph. This includes the counters. void setLabel(Buffer const & buf, ParIterator & it) { - DocumentClass const & textclass = buf.params().documentClass(); + BufferParams const & bp = buf.masterBuffer()->params(); + DocumentClass const & textclass = bp.documentClass(); Paragraph & par = it.paragraph(); Layout const & layout = par.layout(); Counters & counters = textclass.counters(); @@ -310,19 +310,19 @@ void setLabel(Buffer const & buf, ParIterator & it) if (layout.margintype == MARGIN_MANUAL) { if (par.params().labelWidthString().empty()) - par.params().labelWidthString(par.translateIfPossible(layout.labelstring(), buf.params())); + par.params().labelWidthString(par.translateIfPossible(layout.labelstring(), bp)); } else { par.params().labelWidthString(docstring()); } switch(layout.labeltype) { case LABEL_COUNTER: - if (layout.toclevel <= buf.params().secnumdepth + if (layout.toclevel <= bp.secnumdepth && (layout.latextype != LATEX_ENVIRONMENT || isFirstInSequence(it.pit(), it.plist()))) { counters.step(layout.counter); par.params().labelString( - par.expandLabel(layout, buf.params())); + par.expandLabel(layout, bp)); } else par.params().labelString(docstring()); break; @@ -331,7 +331,7 @@ void setLabel(Buffer const & buf, ParIterator & it) // At some point of time we should do something more // clever here, like: // par.params().labelString( - // buf.params().user_defined_bullet(par.itemdepth).getText()); + // bp.user_defined_bullet(par.itemdepth).getText()); // for now, use a simple hardcoded label docstring itemlabel; switch (par.itemdepth) { @@ -400,7 +400,7 @@ void setLabel(Buffer const & buf, ParIterator & it) } par.params().labelString(counters.counterLabel( - par.translateIfPossible(from_ascii(format), buf.params()))); + par.translateIfPossible(from_ascii(format), bp))); break; } @@ -434,8 +434,7 @@ void setLabel(Buffer const & buf, ParIterator & it) case LABEL_STATIC: case LABEL_BIBLIO: par.params().labelString( - par.translateIfPossible(layout.labelstring(), - buf.params())); + par.translateIfPossible(layout.labelstring(), bp)); break; } } @@ -491,24 +490,22 @@ void updateLabels(Buffer const & buf, bool childonly) // start over the counters textclass.counters().reset(); buf.clearReferenceCache(); + buf.inset().setBuffer(const_cast(buf)); buf.updateMacros(); } Buffer & cbuf = const_cast(buf); - if (buf.text().empty()) { - // FIXME: we don't call continue with updateLabels() - // here because it crashes on newly created documents. - // But the TocBackend needs to be initialised - // nonetheless so we update the tocBackend manually. - cbuf.tocBackend().update(); - return; - } + BOOST_ASSERT(!buf.text().paragraphs().empty()); // do the real work ParIterator parit = par_iterator_begin(buf.inset()); updateLabels(buf, parit); + if (master != &buf) + // TocBackend update will be done later. + return; + cbuf.tocBackend().update(); if (!childonly) cbuf.structureChanged();