Ok, this is what I am going to commit.
I am not really happy with the fact that RandomListIterator really is
a std::list<>::iterator. I'd like it to be a real
random_access_iterator. We should probably create our own. (And no; I
don't agree that we should only work with offsets and indices,
iterators are nice and we should use them.)
This works for me.
[[
* output_latex.h:
* buffer.h:
* CutAndPaste.h:
* pariterator.h:
* paragraph_funcs.h:
* output_linuxdoc.h:
* output_docbook.h:
* insets/insettext.h: get forward declaration of ParagraphList
* output_plaintext.C:
* bufferlist.C:
* undo.C:
* lyxtext.h:
* undo.h:
* buffer_funcs.C:
* insets/insetbibitem.C: get proper ParagraphList decls
* output_linuxdoc.C (linuxdocParagraphs):
* output_latex.C (TeXOnePar):
* insets/insettext.C (appendParagraphs):
* insets/insetcharstyle.C (docbook): use std::distance
* CutAndPaste.C (pasteSelectionHelper, copySelectionHelper):
* paragraph_funcs.C (breakParagraph,
breakParagraphConservative, mergeParagraph):
* text.C (acceptChange, rejectChange):
* text2.C (deleteEmptyParagraphMechanism): use boost::next
* output_docbook.C (several places): use boost::next and
std::distance
* ParagraphList_fwd.h: modify to provid a forward declaratoin
of the new ParagraphList.
* RandomAccessList.h: New container for Paragraphs from
Abdelrazak Younes
* ParagraphList.h: new file, setup user of RandomAccessList
* paragraph.C: remove ParagraphList constructor from this file
]]
Index: src/insets/insettext.h
===================================================================
--- src/insets/insettext.h (revision 13423)
+++ src/insets/insettext.h (working copy)
@@ -16,6 +16,7 @@
#include "RowList_fwd.h"
#include "lyxfont.h"
#include "lyxtext.h"
+#include "ParagraphList_fwd.h"
#include "support/types.h"
@@ -27,7 +28,6 @@
class CursorSlice;
class Dimension;
class LColor_color;
-class ParagraphList;
/**
Index: src/insets/insetbibitem.C
===================================================================
--- src/insets/insetbibitem.C (revision 13423)
+++ src/insets/insetbibitem.C (working copy)
@@ -19,7 +19,7 @@
#include "lyxfont.h"
#include "lyxlex.h"
#include "paragraph.h"
-#include "ParagraphList_fwd.h"
+#include "ParagraphList.h"
#include "frontends/font_metrics.h"
Index: src/insets/insetcharstyle.C
===================================================================
--- src/insets/insetcharstyle.C (revision 13423)
+++ src/insets/insetcharstyle.C (working copy)
@@ -289,6 +289,7 @@
int InsetCharStyle::docbook(Buffer const & buf, ostream & os,
OutputParams const & runparams) const
{
+ ParagraphList::const_iterator beg = paragraphs().begin();
ParagraphList::const_iterator par = paragraphs().begin();
ParagraphList::const_iterator end = paragraphs().end();
@@ -298,7 +299,7 @@
for (; par != end; ++par) {
par->simpleDocBookOnePar(buf, os, runparams,
- outerFont(par - paragraphs().begin(),
+ outerFont(std::distance(beg, par),
paragraphs()));
}
Index: src/insets/insettext.C
===================================================================
--- src/insets/insettext.C (revision 13423)
+++ src/insets/insettext.C (working copy)
@@ -422,7 +422,8 @@
ParagraphList::iterator pit = plist.begin();
ParagraphList::iterator ins = pl.insert(pl.end(), *pit);
++pit;
- mergeParagraph(buffer->params(), pl, ins - pl.begin() - 1);
+ mergeParagraph(buffer->params(), pl,
+ std::distance(pl.begin(), ins) - 1);
for_each(pit, plist.end(),
bind(&ParagraphList::push_back, ref(pl), _1));
Index: src/output_plaintext.C
===================================================================
--- src/output_plaintext.C (revision 13423)
+++ src/output_plaintext.C (working copy)
@@ -19,7 +19,7 @@
#include "output.h"
#include "outputparams.h"
#include "paragraph.h"
-#include "ParagraphList_fwd.h"
+#include "ParagraphList.h"
#include "ParagraphParameters.h"
#include "support/lstrings.h"
Index: src/output_latex.h
===================================================================
--- src/output_latex.h (revision 13423)
+++ src/output_latex.h (working copy)
@@ -12,11 +12,12 @@
#ifndef OUTPUT_LATEX_H
#define OUTPUT_LATEX_H
+#include "ParagraphList_fwd.h"
+
#include <string>
class Buffer;
class OutputParams;
-class ParagraphList;
class TexRow;
/// Just a wrapper for the method below, first creating the ofstream.
Index: src/bufferlist.C
===================================================================
--- src/bufferlist.C (revision 13423)
+++ src/bufferlist.C (working copy)
@@ -22,7 +22,7 @@
#include "lyx_main.h"
#include "output_latex.h"
#include "paragraph.h"
-#include "ParagraphList_fwd.h"
+#include "ParagraphList.h"
#include "frontends/Alert.h"
Index: src/undo.C
===================================================================
--- src/undo.C (revision 13423)
+++ src/undo.C (working copy)
@@ -22,6 +22,7 @@
#include "BufferView.h"
#include "lyxtext.h"
#include "paragraph.h"
+#include "ParagraphList.h"
#include "mathed/math_support.h"
#include "insets/inset.h"
Index: src/text2.C
===================================================================
--- src/text2.C (revision 13423)
+++ src/text2.C (working copy)
@@ -1258,7 +1258,7 @@
max(old.pit() - 1, pit_type(0)),
min(old.pit() + 1, old.lastpit()));
ParagraphList & plist = old.text()->paragraphs();
- plist.erase(plist.begin() + old.pit());
+ plist.erase(boost::next(plist.begin(), old.pit()));
// see #warning above
if (cur.depth() >= old.depth()) {
Index: src/ParagraphList_fwd.h
===================================================================
--- src/ParagraphList_fwd.h (revision 13423)
+++ src/ParagraphList_fwd.h (working copy)
@@ -12,22 +12,11 @@
#ifndef PARAGRAPH_LIST_FWD_H
#define PARAGRAPH_LIST_FWD_H
-#include "paragraph.h"
+template <class T>
+class RandomAccessList;
-#include <vector>
+class Paragraph;
-class ParagraphList : public std::vector<Paragraph>
-{
-public:
- ///
- typedef std::vector<Paragraph> BaseType;
- ///
- ParagraphList();
- ///
- template <class Iter>
- ParagraphList(Iter beg, Iter end)
- : BaseType(beg, end)
- {}
-};
+typedef RandomAccessList<Paragraph> ParagraphList;
#endif
Index: src/CutAndPaste.C
===================================================================
--- src/CutAndPaste.C (revision 13423)
+++ src/CutAndPaste.C (working copy)
@@ -214,14 +214,16 @@
// Paste it!
if (empty) {
- pars.insert(pars.begin() + pit, insertion.begin(),
+ pars.insert(boost::next(pars.begin(), pit),
+ insertion.begin(),
insertion.end());
// merge the empty par with the last par of the insertion
mergeParagraph(buffer.params(), pars,
pit + insertion.size() - 1);
} else {
- pars.insert(pars.begin() + pit + 1, insertion.begin(),
+ pars.insert(boost::next(pars.begin(), pit + 1),
+ insertion.begin(),
insertion.end());
// merge the first par of the insertion with the current par
@@ -314,7 +316,8 @@
BOOST_ASSERT(startpit != endpit || start <= end);
// Clone the paragraphs within the selection.
- ParagraphList paragraphs(pars.begin() + startpit, pars.begin() + endpit + 1);
+ ParagraphList paragraphs(boost::next(pars.begin(), startpit),
+ boost::next(pars.begin(), endpit + 1));
for_each(paragraphs.begin(), paragraphs.end(), resetOwnerAndChanges());
Index: src/lyxtext.h
===================================================================
--- src/lyxtext.h (revision 13423)
+++ src/lyxtext.h (working copy)
@@ -21,7 +21,7 @@
#include "lyxfont.h"
#include "layout.h"
#include "lyxlayout_ptr_fwd.h"
-#include "ParagraphList_fwd.h"
+#include "ParagraphList.h"
#include <iosfwd>
Index: src/undo.h
===================================================================
--- src/undo.h (revision 13423)
+++ src/undo.h (working copy)
@@ -17,7 +17,7 @@
#define UNDO_H
#include "dociterator.h"
-#include "ParagraphList_fwd.h"
+#include "ParagraphList.h"
#include "bufferparams.h"
#include "support/types.h"
Index: src/buffer.h
===================================================================
--- src/buffer.h (revision 13423)
+++ src/buffer.h (working copy)
@@ -15,6 +15,7 @@
#include "InsetList.h"
#include "dociterator.h"
+#include "ParagraphList_fwd.h"
#include "support/limited_stack.h"
#include "support/types.h"
@@ -42,7 +43,6 @@
class Language;
class MacroData;
class OutputParams;
-class ParagraphList;
class ParConstIterator;
class ParIterator;
class TeXErrors;
Index: src/CutAndPaste.h
===================================================================
--- src/CutAndPaste.h (revision 13423)
+++ src/CutAndPaste.h (working copy)
@@ -14,6 +14,8 @@
#ifndef CUTANDPASTE_H
#define CUTANDPASTE_H
+#include "ParagraphList_fwd.h"
+
#include "support/types.h"
#include <string>
@@ -23,7 +25,6 @@
class ErrorList;
class LyXTextClass;
class LCursor;
-class ParagraphList;
///
namespace lyx {
Index: src/support/RandomAccessList.h
===================================================================
--- src/support/RandomAccessList.h (revision 0)
+++ src/support/RandomAccessList.h (revision 0)
@@ -0,0 +1,279 @@
+// -*- C++ -*-
+/**
+ * \file RandomAccessList.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Abdelrazak Younes
+ *
+ * Full author contact details are available in file CREDITS.
+ *
+ */
+
+#ifndef RANDOM_ACESS_LIST_H
+#define RANDOM_ACESS_LIST_H
+
+//#include "debug.h"
+
+#include <boost/utility.hpp>
+
+#include <vector>
+#include <list>
+#include <algorithm>
+
+#define USE_OLD_ITERATOR 1
+
+/// Random Access List.
+/**
+This templatized class provide a std::vector like interface to a
+standard std::list underneath. An important property is that it
+keeps the std::list::iterator interface. A typical use would be:
+
+ typedef RandomAccessList<some_class> MyContainer;
+
+Then you can use MyContainer as if it was a standard
+std::vector<some_class> for operator[] access and as if it was a
+standard std::list for iterator access. The main difference with
+std::vector is that insertion of elements is much less costly. Compared
+to a standard list alone, there is of course a small overhead because
+the class always keeps its internal vector of iterator (it_vector_) up
+to date.
+*/
+template <class T>
+class RandomAccessList {
+public:
+ // types
+ typedef std::list<T> Container;
+ typedef typename Container::reference reference;
+ typedef typename Container::const_reference const_reference;
+#if USE_OLD_ITERATOR
+ // iterator (below)
+ typedef typename Container::iterator iterator;
+ // const_iterator (below)
+ typedef typename Container::const_iterator const_iterator;
+#else
+ // wip
+#endif
+ typedef typename Container::size_type size_type;
+ typedef typename Container::difference_type difference_type;
+ typedef typename Container::value_type value_type;
+ typedef typename Container::allocator_type allocator_type;
+ typedef typename Container::pointer pointer;
+ typedef typename Container::const_pointer const_pointer;
+ // reverse_iterator
+ // const_reverse_iterator
+
+ typedef std::vector<typename Container::iterator> IterCont;
+
+ // construct/copy/destroy
+
+ RandomAccessList()
+ {}
+
+ // RandomAccessList(size_type n T const & value = T())
+
+ template<class InputIterator>
+ RandomAccessList(InputIterator first, InputIterator last)
+ {
+ assign(first, last);
+ }
+
+
+
+ RandomAccessList(RandomAccessList const & x)
+ {
+ assign(x.begin(), x.end());
+ }
+
+ // ~RandomAccessList()
+
+ ///
+ RandomAccessList & operator=(RandomAccessList const & x)
+ {
+ assign(x.begin(), x.end());
+ return *this;
+ }
+
+ template<class InputIterator>
+ void assign(InputIterator first, InputIterator last)
+ {
+ container_.assign(first, last);
+ recreateVector();
+ }
+
+
+ // void assign(size_type n, T const & u);
+
+ // iterators
+
+ iterator begin()
+ {
+ return container_.begin();
+ }
+
+ const_iterator begin() const
+ {
+ return container_.begin();
+ }
+
+ iterator end()
+ {
+ return container_.end();
+ }
+
+ const_iterator end() const
+ {
+ return container_.end();
+ }
+
+ // reverse_iterator rbegin();
+ // const_reverse_iterator rbegin() const;
+ // reverse_iterator rend();
+ // const_reverse_iterator rend() const;
+
+ // capacity
+ size_type size() const
+ {
+ return iterCont_.size();
+ }
+
+ size_type max_size() const
+ {
+ return iterCont_.max_size();
+ }
+
+ // void resize(size_type sz, T c = T());
+
+ size_type capacity() const
+ {
+ return iterCont_.capacity();
+ }
+
+ bool empty() const
+ {
+ return container_.empty();
+ }
+
+ // void reserve(size_type n);
+
+ // element access
+
+ reference operator[](size_type pos)
+ {
+ return *iterCont_[pos];
+ }
+
+ ///
+ const_reference operator[](size_type pos) const
+ {
+ return *iterCont_[pos];
+ }
+
+ reference at(size_type pos)
+ {
+ return *iterCont_.at(pos);
+ }
+
+ const_reference at(size_type pos) const
+ {
+ return *iterCont_.at(pos);
+ }
+
+ reference front()
+ {
+ return container_.front();
+ }
+
+ const_reference front() const
+ {
+ return container_.front();
+ }
+
+ reference back()
+ {
+ return container_.back();
+ }
+
+ const_reference back() const
+ {
+ return container_.back();
+ }
+
+ // modifiers
+
+ void push_back(T const & x)
+ {
+ typename Container::iterator it =
+ container_.insert(container_.end(), x);
+ iterCont_.push_back(it);
+ }
+
+ void pop_back()
+ {
+ container_.pop_back();
+ iterCont_.pop_back();
+ }
+
+ iterator insert(iterator position, T const & x)
+ {
+ typename Container::iterator it =
+ container_.insert(position, x);
+ recreateVector();
+ return it;
+ }
+
+ // void insert(iterator position, size_type n, T const & x);
+
+ template<class InputIterator>
+ void insert(iterator position,
+ InputIterator first, InputIterator last)
+ {
+ container_.insert(position, first, last);
+ recreateVector();
+ }
+
+ iterator erase(iterator position)
+ {
+ typename Container::iterator it =
+ container_.erase(position);
+ recreateVector();
+ return it;
+ }
+
+ iterator erase(iterator first, iterator last)
+ {
+ typename Container::iterator it =
+ container_.erase(first, last);
+ recreateVector();
+ return it;
+ }
+
+ void swap(RandomAccessList & x)
+ {
+ std::swap(container_, x.container_);
+ std::swap(iterCont_, x.iterCont_);
+ }
+
+ void clear()
+ {
+ container_.clear();
+ iterCont_.clear();
+ }
+
+private:
+ void recreateVector()
+ {
+ iterCont_.clear();
+ typename Container::iterator beg = container_.begin();
+ typename Container::iterator end = container_.end();
+ for (; beg != end; ++beg)
+ iterCont_.push_back(beg);
+ }
+
+ /// Our container.
+ Container container_;
+ /// Our container of iterators.
+ IterCont iterCont_;
+};
+
+#endif
Index: src/paragraph_funcs.C
===================================================================
--- src/paragraph_funcs.C (revision 13423)
+++ src/paragraph_funcs.C (working copy)
@@ -96,7 +96,8 @@
{
// create a new paragraph, and insert into the list
ParagraphList::iterator tmp =
- pars.insert(pars.begin() + par_offset + 1, Paragraph());
+ pars.insert(boost::next(pars.begin(), par_offset + 1),
+ Paragraph());
Paragraph & par = pars[par_offset];
@@ -193,7 +194,8 @@
ParagraphList & pars, pit_type par_offset, pos_type pos)
{
// create a new paragraph
- Paragraph & tmp = *pars.insert(pars.begin() + par_offset + 1, Paragraph());
+ Paragraph & tmp = *pars.insert(boost::next(pars.begin(), par_offset + 1),
+ Paragraph());
Paragraph & par = pars[par_offset];
if (bparams.tracking_changes)
@@ -259,7 +261,7 @@
// Move the change status of "carriage return" over
par.setChange(par.size(), cr);
- pars.erase(pars.begin() + par_offset + 1);
+ pars.erase(boost::next(pars.begin(), par_offset + 1));
}
Index: src/pariterator.h
===================================================================
--- src/pariterator.h (revision 13423)
+++ src/pariterator.h (working copy)
@@ -13,6 +13,7 @@
#define PARITERATOR_H
#include "dociterator.h"
+#include "ParagraphList_fwd.h"
#include "support/types.h"
@@ -24,7 +25,6 @@
class InsetBase;
class LyXText;
-class ParagraphList;
class ParIterator : public std::iterator<std::forward_iterator_tag, Paragraph>,
Index: src/output_linuxdoc.C
===================================================================
--- src/output_linuxdoc.C (revision 13423)
+++ src/output_linuxdoc.C (working copy)
@@ -17,7 +17,7 @@
#include "bufferparams.h"
#include "paragraph.h"
#include "paragraph_funcs.h"
-#include "ParagraphList_fwd.h"
+#include "ParagraphList.h"
#include "ParagraphParameters.h"
#include "sgml.h"
@@ -133,7 +133,7 @@
}
pit->simpleLinuxDocOnePar(buf, os,
- outerFont(pit - paragraphs.begin(), paragraphs),
+ outerFont(std::distance(paragraphs.begin(), pit), paragraphs),
runparams, depth);
os << "\n";
Index: src/ParagraphList.h
===================================================================
--- src/ParagraphList.h (revision 0)
+++ src/ParagraphList.h (revision 0)
@@ -0,0 +1,22 @@
+// -*- C++ -*-
+/**
+ * \file ParagraphList_fwd.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Angus Leeming
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#ifndef PARAGRAPH_LIST_H
+#define PARAGRAPH_LIST_H
+
+#include "paragraph.h"
+
+#include "support/RandomAccessList.h"
+
+/// Container for all kind of Paragraphs used in Lyx.
+typedef RandomAccessList<Paragraph> ParagraphList;
+
+#endif
Index: src/paragraph_funcs.h
===================================================================
--- src/paragraph_funcs.h (revision 13423)
+++ src/paragraph_funcs.h (working copy)
@@ -12,6 +12,8 @@
#ifndef PARAGRAPH_FUNCS_H
#define PARAGRAPH_FUNCS_H
+#include "ParagraphList_fwd.h"
+
#include "support/types.h"
class Buffer;
@@ -19,7 +21,6 @@
class InsetBase;
class LyXFont;
class Paragraph;
-class ParagraphList;
/**
* This breaks a paragraph at the specified position.
Index: src/output_docbook.C
===================================================================
--- src/output_docbook.C (revision 13423)
+++ src/output_docbook.C (working copy)
@@ -20,7 +20,7 @@
#include "debug.h"
#include "paragraph.h"
#include "paragraph_funcs.h"
-#include "ParagraphList_fwd.h"
+#include "ParagraphList.h"
#include "ParagraphParameters.h"
#include "sgml.h"
@@ -47,7 +47,7 @@
ParagraphList::const_iterator searchParagraph(ParagraphList::const_iterator const & par,
ParagraphList::const_iterator const & pend)
{
- ParagraphList::const_iterator p = par + 1;
+ ParagraphList::const_iterator p = boost::next(par);
for( ; p != pend && p->layout()->latextype == LATEX_PARAGRAPH; ++p);
@@ -59,7 +59,7 @@
ParagraphList::const_iterator const & pend)
{
LyXLayout_ptr const & bstyle = par->layout();
- ParagraphList::const_iterator p = par + 1;
+ ParagraphList::const_iterator p = boost::next(par);
for( ; p != pend; ++p) {
LyXLayout_ptr const & style = p->layout();
@@ -74,7 +74,7 @@
ParagraphList::const_iterator const & pend)
{
LyXLayout_ptr const & bstyle = par->layout();
- ParagraphList::const_iterator p = par + 1;
+ ParagraphList::const_iterator p = boost::next(par);
for( ; p != pend; ++p) {
LyXLayout_ptr const & style = p->layout();
if( style->latextype == LATEX_COMMAND)
@@ -108,10 +108,10 @@
if (par != pbegin)
os << '\n';
if (par->layout() == defaultstyle && par->emptyTag()) {
- par->simpleDocBookOnePar(buf, os, runparams, outerFont(par - paragraphs.begin(), paragraphs));
+ par->simpleDocBookOnePar(buf, os, runparams, outerFont(std::distance(paragraphs.begin(), par), paragraphs));
} else {
sgml::openTag(buf, os, runparams, *par);
- par->simpleDocBookOnePar(buf, os, runparams, outerFont(par - paragraphs.begin(), paragraphs));
+ par->simpleDocBookOnePar(buf, os, runparams, outerFont(std::distance(paragraphs.begin(), par), paragraphs));
sgml::closeTag(os, *par);
}
}
@@ -170,7 +170,7 @@
case LATEX_ITEM_ENVIRONMENT: {
if(par->params().depth() == pbegin->params().depth()) {
sgml::openTag(os, wrapper);
- par->simpleDocBookOnePar(buf, os, runparams, outerFont(par - paragraphs.begin(), paragraphs), sep);
+ par->simpleDocBookOnePar(buf, os, runparams, outerFont(std::distance(paragraphs.begin(), par), paragraphs), sep);
sgml::closeTag(os, wrapper);
++par;
}
@@ -239,7 +239,7 @@
// Opend inner tag and close inner tags
sgml::openTag(os, bstyle->innertag());
- par->simpleDocBookOnePar(buf, os, runparams, outerFont(par - paragraphs.begin(), paragraphs));
+ par->simpleDocBookOnePar(buf, os, runparams, outerFont(std::distance(paragraphs.begin(), par), paragraphs));
sgml::closeTag(os, bstyle->innertag());
os << '\n';
Index: src/output_linuxdoc.h
===================================================================
--- src/output_linuxdoc.h (revision 13423)
+++ src/output_linuxdoc.h (working copy)
@@ -13,10 +13,11 @@
#ifndef OUTPUT_LINUXDOC_H
#define OUTPUT_LINUXDOC_H
+#include "ParagraphList_fwd.h"
+
#include <iosfwd>
class Buffer;
-class ParagraphList;
class OutputParams;
///
Index: src/output_docbook.h
===================================================================
--- src/output_docbook.h (revision 13423)
+++ src/output_docbook.h (working copy)
@@ -13,11 +13,12 @@
#ifndef OUTPUT_DOCBOOK_H
#define OUTPUT_DOCBOOK_H
+#include "ParagraphList_fwd.h"
+
#include <iosfwd>
class Buffer;
class OutputParams;
-class ParagraphList;
///
void docbookParagraphs(ParagraphList const & subset,
Index: src/paragraph.C
===================================================================
--- src/paragraph.C (revision 13423)
+++ src/paragraph.C (working copy)
@@ -66,10 +66,6 @@
using std::ostringstream;
-ParagraphList::ParagraphList()
-{}
-
-
Paragraph::Paragraph()
: begin_of_body_(0), pimpl_(new Paragraph::Pimpl(this))
{
Index: src/buffer_funcs.C
===================================================================
--- src/buffer_funcs.C (revision 13423)
+++ src/buffer_funcs.C (working copy)
@@ -27,7 +27,7 @@
#include "lyxtextclass.h"
#include "paragraph.h"
#include "paragraph_funcs.h"
-#include "ParagraphList_fwd.h"
+#include "ParagraphList.h"
#include "ParagraphParameters.h"
#include "pariterator.h"
#include "lyxvc.h"
Index: src/text.C
===================================================================
--- src/text.C (revision 13423)
+++ src/text.C (working copy)
@@ -1414,8 +1414,8 @@
if (type == Change::DELETED) {
ParagraphList & plist = paragraphs();
if (it.pit() + 1 < et.pit())
- pars_.erase(plist.begin() + it.pit() + 1,
- plist.begin() + et.pit());
+ pars_.erase(boost::next(plist.begin(), it.pit() + 1),
+ boost::next(plist.begin(), et.pit()));
// Paragraph merge if appropriate:
if (pars_[it.pit()].lookupChange(pars_[it.pit()].size())
@@ -1451,8 +1451,8 @@
if (type == Change::INSERTED) {
ParagraphList & plist = paragraphs();
if (it.pit() + 1 < et.pit())
- pars_.erase(plist.begin() + it.pit() + 1,
- plist.begin() + et.pit());
+ pars_.erase(boost::next(plist.begin(), it.pit() + 1),
+ boost::next(plist.begin(), et.pit()));
// Paragraph merge if appropriate:
if (pars_[it.pit()].lookupChange(pars_[it.pit()].size())
== Change::INSERTED) {
Index: src/output_latex.C
===================================================================
--- src/output_latex.C (revision 13423)
+++ src/output_latex.C (working copy)
@@ -333,7 +333,7 @@
os << everypar;
bool need_par = pit->simpleTeXOnePar(buf, bparams,
- outerFont(pit - paragraphs.begin(), paragraphs),
+ outerFont(std::distance(paragraphs.begin(), pit), paragraphs),
os, texrow, runparams);
// Make sure that \\par is done with the font of the last
@@ -346,8 +346,8 @@
// We do not need to use to change the font for the last paragraph
// or for a command.
LyXFont const outerfont =
- outerFont(pit - paragraphs.begin(),
-paragraphs);
+ outerFont(std::distance(paragraphs.begin(), pit),
+ paragraphs);
LyXFont const font =
(pit->empty()
--
Lgb