X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbuffer_funcs.cpp;h=41b59a5b1cb30ebd58a52bd95256ffff628cd322;hb=e01e14872d60935908ad42bc164bff1342277b22;hp=8ca9ea36b36080db684aa0f273739a06c14009b6;hpb=8b6415f3089b7eda83758de5b21fa8c02d87c72d;p=lyx.git diff --git a/src/buffer_funcs.cpp b/src/buffer_funcs.cpp index 8ca9ea36b3..41b59a5b1c 100644 --- a/src/buffer_funcs.cpp +++ b/src/buffer_funcs.cpp @@ -22,14 +22,11 @@ #include "Floating.h" #include "FloatList.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 "Paragraph.h" #include "paragraph_funcs.h" #include "ParagraphList.h" @@ -80,7 +77,14 @@ Buffer * checkAndLoadLyXFile(FileName const & filename) return checkAndLoadLyXFile(filename); } - if (filename.isReadableFile()) { + if (filename.exists()) { + if (!filename.isReadableFile()) { + docstring text = bformat(_("The file %1$s exists but is not " + "readable by the current user."), + from_utf8(filename.absFilename())); + Alert::error(_("File not readable!"), text); + return 0; + } Buffer * b = theBufferList().newBuffer(filename.absFilename()); if (!b) // Buffer creation is not possible. @@ -194,8 +198,7 @@ int countChars(DocIterator const & from, DocIterator const & to, bool with_blank pos_type const pos = dit.pos(); if (pos != dit.lastpos() && !par.isDeleted(pos)) { - if (par.isInset(pos)) { - Inset const * ins = par.getInset(pos); + if (Inset const * ins = par.getInset(pos)) { if (ins->isLetter()) ++chars; else if (with_blanks && ins->isSpace()) @@ -229,7 +232,7 @@ depth_type getDepth(DocIterator const & it) depth_type getItemDepth(ParIterator const & it) { Paragraph const & par = *it; - LabelType const labeltype = par.layout()->labeltype; + LabelType const labeltype = par.layout().labeltype; if (labeltype != LABEL_ENUMERATE && labeltype != LABEL_ITEMIZE) return 0; @@ -253,7 +256,7 @@ depth_type getItemDepth(ParIterator const & it) // that is not more deeply nested. Paragraph & prev_par = *prev_it; depth_type const prev_depth = getDepth(prev_it); - if (labeltype == prev_par.layout()->labeltype) { + if (labeltype == prev_par.layout().labeltype) { if (prev_depth < min_depth) return prev_par.itemdepth + 1; if (prev_depth == min_depth) @@ -271,14 +274,14 @@ depth_type getItemDepth(ParIterator const & it) bool needEnumCounterReset(ParIterator const & it) { Paragraph const & par = *it; - BOOST_ASSERT(par.layout()->labeltype == LABEL_ENUMERATE); + BOOST_ASSERT(par.layout().labeltype == LABEL_ENUMERATE); depth_type const cur_depth = par.getDepth(); ParIterator prev_it = it; while (prev_it.pit()) { --prev_it.top().pit(); Paragraph const & prev_par = *prev_it; if (prev_par.getDepth() <= cur_depth) - return prev_par.layout()->labeltype != LABEL_ENUMERATE; + return prev_par.layout().labeltype != LABEL_ENUMERATE; } // start of nested inset: reset return true; @@ -288,9 +291,9 @@ bool needEnumCounterReset(ParIterator const & it) // set the label of a paragraph. This includes the counters. void setLabel(Buffer const & buf, ParIterator & it) { - TextClass const & textclass = buf.params().getTextClass(); + DocumentClass const & textclass = buf.params().documentClass(); Paragraph & par = it.paragraph(); - LayoutPtr const & layout = par.layout(); + Layout const & layout = par.layout(); Counters & counters = textclass.counters(); if (par.params().startOfAppendix()) { @@ -304,19 +307,19 @@ void setLabel(Buffer const & buf, ParIterator & it) // Compute the item depth of the paragraph par.itemdepth = getItemDepth(it); - if (layout->margintype == MARGIN_MANUAL) { + 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(), buf.params())); } else { par.params().labelWidthString(docstring()); } - switch(layout->labeltype) { + switch(layout.labeltype) { case LABEL_COUNTER: - if (layout->toclevel <= buf.params().secnumdepth - && (layout->latextype != LATEX_ENVIRONMENT + if (layout.toclevel <= buf.params().secnumdepth + && (layout.latextype != LATEX_ENVIRONMENT || isFirstInSequence(it.pit(), it.plist()))) { - counters.step(layout->counter); + counters.step(layout.counter); par.params().labelString( par.expandLabel(layout, buf.params())); } else @@ -430,7 +433,7 @@ void setLabel(Buffer const & buf, ParIterator & it) case LABEL_STATIC: case LABEL_BIBLIO: par.params().labelString( - par.translateIfPossible(layout->labelstring(), + par.translateIfPossible(layout.labelstring(), buf.params())); break; } @@ -463,10 +466,9 @@ void updateLabels(Buffer const & buf, ParIterator & parit) InsetList::const_iterator end = parit->insetList().end(); for (; iit != end; ++iit) { parit.pos() = iit->pos; - iit->inset->updateLabels(buf, parit); + iit->inset->updateLabels(parit); } } - } @@ -476,7 +478,7 @@ void updateLabels(Buffer const & buf, bool childonly) { Buffer const * const master = buf.masterBuffer(); // Use the master text class also for child documents - TextClass const & textclass = master->params().getTextClass(); + DocumentClass const & textclass = master->params().documentClass(); if (!childonly) { // If this is a child document start with the master @@ -487,6 +489,8 @@ void updateLabels(Buffer const & buf, bool childonly) // start over the counters textclass.counters().reset(); + buf.clearReferenceCache(); + buf.updateMacros(); } Buffer & cbuf = const_cast(buf);