mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-13 17:20:55 +00:00
Merge Abdel's ParagraphList from trunk
* 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 git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_4_X@13487 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
3f2c546936
commit
5822df009a
@ -35,8 +35,3 @@ they have not yet been applied because of incomplete testing.
|
|||||||
making latex.
|
making latex.
|
||||||
http://bugzilla.lyx.org/show_bug.cgi?id=1973
|
http://bugzilla.lyx.org/show_bug.cgi?id=1973
|
||||||
|
|
||||||
- Bookmarks and links to LaTeX errors are broken after paragraph
|
|
||||||
deletion/insertion.
|
|
||||||
http://bugzilla.lyx.org/show_bug.cgi?id=2284
|
|
||||||
http://bugzilla.lyx.org/show_bug.cgi?id=2242
|
|
||||||
|
|
||||||
|
@ -214,14 +214,16 @@ pasteSelectionHelper(Buffer const & buffer,
|
|||||||
|
|
||||||
// Paste it!
|
// Paste it!
|
||||||
if (empty) {
|
if (empty) {
|
||||||
pars.insert(pars.begin() + pit, insertion.begin(),
|
pars.insert(boost::next(pars.begin(), pit),
|
||||||
|
insertion.begin(),
|
||||||
insertion.end());
|
insertion.end());
|
||||||
|
|
||||||
// merge the empty par with the last par of the insertion
|
// merge the empty par with the last par of the insertion
|
||||||
mergeParagraph(buffer.params(), pars,
|
mergeParagraph(buffer.params(), pars,
|
||||||
pit + insertion.size() - 1);
|
pit + insertion.size() - 1);
|
||||||
} else {
|
} else {
|
||||||
pars.insert(pars.begin() + pit + 1, insertion.begin(),
|
pars.insert(boost::next(pars.begin(), pit + 1),
|
||||||
|
insertion.begin(),
|
||||||
insertion.end());
|
insertion.end());
|
||||||
|
|
||||||
// merge the first par of the insertion with the current par
|
// merge the first par of the insertion with the current par
|
||||||
@ -314,7 +316,8 @@ void copySelectionHelper(ParagraphList & pars,
|
|||||||
BOOST_ASSERT(startpit != endpit || start <= end);
|
BOOST_ASSERT(startpit != endpit || start <= end);
|
||||||
|
|
||||||
// Clone the paragraphs within the selection.
|
// 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());
|
for_each(paragraphs.begin(), paragraphs.end(), resetOwnerAndChanges());
|
||||||
|
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
#ifndef CUTANDPASTE_H
|
#ifndef CUTANDPASTE_H
|
||||||
#define CUTANDPASTE_H
|
#define CUTANDPASTE_H
|
||||||
|
|
||||||
|
#include "ParagraphList_fwd.h"
|
||||||
|
|
||||||
#include "support/types.h"
|
#include "support/types.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -23,7 +25,6 @@ class Buffer;
|
|||||||
class ErrorList;
|
class ErrorList;
|
||||||
class LyXTextClass;
|
class LyXTextClass;
|
||||||
class LCursor;
|
class LCursor;
|
||||||
class ParagraphList;
|
|
||||||
|
|
||||||
///
|
///
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
|
22
src/ParagraphList.h
Normal file
22
src/ParagraphList.h
Normal file
@ -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
|
@ -12,22 +12,11 @@
|
|||||||
#ifndef PARAGRAPH_LIST_FWD_H
|
#ifndef PARAGRAPH_LIST_FWD_H
|
||||||
#define 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>
|
typedef RandomAccessList<Paragraph> ParagraphList;
|
||||||
{
|
|
||||||
public:
|
|
||||||
///
|
|
||||||
typedef std::vector<Paragraph> BaseType;
|
|
||||||
///
|
|
||||||
ParagraphList();
|
|
||||||
///
|
|
||||||
template <class Iter>
|
|
||||||
ParagraphList(Iter beg, Iter end)
|
|
||||||
: BaseType(beg, end)
|
|
||||||
{}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "InsetList.h"
|
#include "InsetList.h"
|
||||||
|
|
||||||
#include "dociterator.h"
|
#include "dociterator.h"
|
||||||
|
#include "ParagraphList_fwd.h"
|
||||||
|
|
||||||
#include "support/limited_stack.h"
|
#include "support/limited_stack.h"
|
||||||
#include "support/types.h"
|
#include "support/types.h"
|
||||||
@ -42,7 +43,6 @@ class LaTeXFeatures;
|
|||||||
class Language;
|
class Language;
|
||||||
class MacroData;
|
class MacroData;
|
||||||
class OutputParams;
|
class OutputParams;
|
||||||
class ParagraphList;
|
|
||||||
class ParConstIterator;
|
class ParConstIterator;
|
||||||
class ParIterator;
|
class ParIterator;
|
||||||
class TeXErrors;
|
class TeXErrors;
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#include "lyxtextclass.h"
|
#include "lyxtextclass.h"
|
||||||
#include "paragraph.h"
|
#include "paragraph.h"
|
||||||
#include "paragraph_funcs.h"
|
#include "paragraph_funcs.h"
|
||||||
#include "ParagraphList_fwd.h"
|
#include "ParagraphList.h"
|
||||||
#include "ParagraphParameters.h"
|
#include "ParagraphParameters.h"
|
||||||
#include "pariterator.h"
|
#include "pariterator.h"
|
||||||
#include "lyxvc.h"
|
#include "lyxvc.h"
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
#include "lyx_main.h"
|
#include "lyx_main.h"
|
||||||
#include "output_latex.h"
|
#include "output_latex.h"
|
||||||
#include "paragraph.h"
|
#include "paragraph.h"
|
||||||
#include "ParagraphList_fwd.h"
|
#include "ParagraphList.h"
|
||||||
|
|
||||||
#include "frontends/Alert.h"
|
#include "frontends/Alert.h"
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#include "lyxfont.h"
|
#include "lyxfont.h"
|
||||||
#include "lyxlex.h"
|
#include "lyxlex.h"
|
||||||
#include "paragraph.h"
|
#include "paragraph.h"
|
||||||
#include "ParagraphList_fwd.h"
|
#include "ParagraphList.h"
|
||||||
|
|
||||||
#include "frontends/font_metrics.h"
|
#include "frontends/font_metrics.h"
|
||||||
|
|
||||||
|
@ -289,6 +289,7 @@ int InsetCharStyle::linuxdoc(Buffer const & buf, ostream & os,
|
|||||||
int InsetCharStyle::docbook(Buffer const & buf, ostream & os,
|
int InsetCharStyle::docbook(Buffer const & buf, ostream & os,
|
||||||
OutputParams const & runparams) const
|
OutputParams const & runparams) const
|
||||||
{
|
{
|
||||||
|
ParagraphList::const_iterator beg = paragraphs().begin();
|
||||||
ParagraphList::const_iterator par = paragraphs().begin();
|
ParagraphList::const_iterator par = paragraphs().begin();
|
||||||
ParagraphList::const_iterator end = paragraphs().end();
|
ParagraphList::const_iterator end = paragraphs().end();
|
||||||
|
|
||||||
@ -298,7 +299,7 @@ int InsetCharStyle::docbook(Buffer const & buf, ostream & os,
|
|||||||
|
|
||||||
for (; par != end; ++par) {
|
for (; par != end; ++par) {
|
||||||
par->simpleDocBookOnePar(buf, os, runparams,
|
par->simpleDocBookOnePar(buf, os, runparams,
|
||||||
outerFont(par - paragraphs().begin(),
|
outerFont(std::distance(beg, par),
|
||||||
paragraphs()));
|
paragraphs()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -412,7 +412,8 @@ void InsetText::appendParagraphs(Buffer * buffer, ParagraphList & plist)
|
|||||||
ParagraphList::iterator pit = plist.begin();
|
ParagraphList::iterator pit = plist.begin();
|
||||||
ParagraphList::iterator ins = pl.insert(pl.end(), *pit);
|
ParagraphList::iterator ins = pl.insert(pl.end(), *pit);
|
||||||
++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(),
|
for_each(pit, plist.end(),
|
||||||
bind(&ParagraphList::push_back, ref(pl), _1));
|
bind(&ParagraphList::push_back, ref(pl), _1));
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "RowList_fwd.h"
|
#include "RowList_fwd.h"
|
||||||
#include "lyxfont.h"
|
#include "lyxfont.h"
|
||||||
#include "lyxtext.h"
|
#include "lyxtext.h"
|
||||||
|
#include "ParagraphList_fwd.h"
|
||||||
|
|
||||||
#include "support/types.h"
|
#include "support/types.h"
|
||||||
|
|
||||||
@ -27,7 +28,6 @@ class BufferView;
|
|||||||
class CursorSlice;
|
class CursorSlice;
|
||||||
class Dimension;
|
class Dimension;
|
||||||
class LColor_color;
|
class LColor_color;
|
||||||
class ParagraphList;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include "lyxfont.h"
|
#include "lyxfont.h"
|
||||||
#include "layout.h"
|
#include "layout.h"
|
||||||
#include "lyxlayout_ptr_fwd.h"
|
#include "lyxlayout_ptr_fwd.h"
|
||||||
#include "ParagraphList_fwd.h"
|
#include "ParagraphList.h"
|
||||||
|
|
||||||
#include <iosfwd>
|
#include <iosfwd>
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "paragraph.h"
|
#include "paragraph.h"
|
||||||
#include "paragraph_funcs.h"
|
#include "paragraph_funcs.h"
|
||||||
#include "ParagraphList_fwd.h"
|
#include "ParagraphList.h"
|
||||||
#include "ParagraphParameters.h"
|
#include "ParagraphParameters.h"
|
||||||
#include "sgml.h"
|
#include "sgml.h"
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ namespace {
|
|||||||
ParagraphList::const_iterator searchParagraph(ParagraphList::const_iterator const & par,
|
ParagraphList::const_iterator searchParagraph(ParagraphList::const_iterator const & par,
|
||||||
ParagraphList::const_iterator const & pend)
|
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);
|
for( ; p != pend && p->layout()->latextype == LATEX_PARAGRAPH; ++p);
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ ParagraphList::const_iterator searchCommand(ParagraphList::const_iterator const
|
|||||||
ParagraphList::const_iterator const & pend)
|
ParagraphList::const_iterator const & pend)
|
||||||
{
|
{
|
||||||
LyXLayout_ptr const & bstyle = par->layout();
|
LyXLayout_ptr const & bstyle = par->layout();
|
||||||
ParagraphList::const_iterator p = par + 1;
|
ParagraphList::const_iterator p = boost::next(par);
|
||||||
|
|
||||||
for( ; p != pend; ++p) {
|
for( ; p != pend; ++p) {
|
||||||
LyXLayout_ptr const & style = p->layout();
|
LyXLayout_ptr const & style = p->layout();
|
||||||
@ -74,7 +74,7 @@ ParagraphList::const_iterator searchEnvironment(ParagraphList::const_iterator co
|
|||||||
ParagraphList::const_iterator const & pend)
|
ParagraphList::const_iterator const & pend)
|
||||||
{
|
{
|
||||||
LyXLayout_ptr const & bstyle = par->layout();
|
LyXLayout_ptr const & bstyle = par->layout();
|
||||||
ParagraphList::const_iterator p = par + 1;
|
ParagraphList::const_iterator p = boost::next(par);
|
||||||
for( ; p != pend; ++p) {
|
for( ; p != pend; ++p) {
|
||||||
LyXLayout_ptr const & style = p->layout();
|
LyXLayout_ptr const & style = p->layout();
|
||||||
if( style->latextype == LATEX_COMMAND)
|
if( style->latextype == LATEX_COMMAND)
|
||||||
@ -108,10 +108,10 @@ ParagraphList::const_iterator makeParagraph(Buffer const & buf,
|
|||||||
if (par != pbegin)
|
if (par != pbegin)
|
||||||
os << '\n';
|
os << '\n';
|
||||||
if (par->layout() == defaultstyle && par->emptyTag()) {
|
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 {
|
} else {
|
||||||
sgml::openTag(buf, os, runparams, *par);
|
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);
|
sgml::closeTag(os, *par);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -170,7 +170,7 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf,
|
|||||||
case LATEX_ITEM_ENVIRONMENT: {
|
case LATEX_ITEM_ENVIRONMENT: {
|
||||||
if(par->params().depth() == pbegin->params().depth()) {
|
if(par->params().depth() == pbegin->params().depth()) {
|
||||||
sgml::openTag(os, wrapper);
|
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);
|
sgml::closeTag(os, wrapper);
|
||||||
++par;
|
++par;
|
||||||
}
|
}
|
||||||
@ -239,7 +239,7 @@ ParagraphList::const_iterator makeCommand(Buffer const & buf,
|
|||||||
|
|
||||||
// Opend inner tag and close inner tags
|
// Opend inner tag and close inner tags
|
||||||
sgml::openTag(os, bstyle->innertag());
|
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());
|
sgml::closeTag(os, bstyle->innertag());
|
||||||
os << '\n';
|
os << '\n';
|
||||||
|
|
||||||
|
@ -13,11 +13,12 @@
|
|||||||
#ifndef OUTPUT_DOCBOOK_H
|
#ifndef OUTPUT_DOCBOOK_H
|
||||||
#define OUTPUT_DOCBOOK_H
|
#define OUTPUT_DOCBOOK_H
|
||||||
|
|
||||||
|
#include "ParagraphList_fwd.h"
|
||||||
|
|
||||||
#include <iosfwd>
|
#include <iosfwd>
|
||||||
|
|
||||||
class Buffer;
|
class Buffer;
|
||||||
class OutputParams;
|
class OutputParams;
|
||||||
class ParagraphList;
|
|
||||||
|
|
||||||
///
|
///
|
||||||
void docbookParagraphs(ParagraphList const & subset,
|
void docbookParagraphs(ParagraphList const & subset,
|
||||||
|
@ -333,7 +333,7 @@ TeXOnePar(Buffer const & buf,
|
|||||||
|
|
||||||
os << everypar;
|
os << everypar;
|
||||||
bool need_par = pit->simpleTeXOnePar(buf, bparams,
|
bool need_par = pit->simpleTeXOnePar(buf, bparams,
|
||||||
outerFont(pit - paragraphs.begin(), paragraphs),
|
outerFont(std::distance(paragraphs.begin(), pit), paragraphs),
|
||||||
os, texrow, runparams);
|
os, texrow, runparams);
|
||||||
|
|
||||||
// Make sure that \\par is done with the font of the last
|
// Make sure that \\par is done with the font of the last
|
||||||
@ -346,8 +346,8 @@ TeXOnePar(Buffer const & buf,
|
|||||||
// We do not need to use to change the font for the last paragraph
|
// We do not need to use to change the font for the last paragraph
|
||||||
// or for a command.
|
// or for a command.
|
||||||
LyXFont const outerfont =
|
LyXFont const outerfont =
|
||||||
outerFont(pit - paragraphs.begin(),
|
outerFont(std::distance(paragraphs.begin(), pit),
|
||||||
paragraphs);
|
paragraphs);
|
||||||
|
|
||||||
LyXFont const font =
|
LyXFont const font =
|
||||||
(pit->empty()
|
(pit->empty()
|
||||||
|
@ -12,11 +12,12 @@
|
|||||||
#ifndef OUTPUT_LATEX_H
|
#ifndef OUTPUT_LATEX_H
|
||||||
#define OUTPUT_LATEX_H
|
#define OUTPUT_LATEX_H
|
||||||
|
|
||||||
|
#include "ParagraphList_fwd.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class Buffer;
|
class Buffer;
|
||||||
class OutputParams;
|
class OutputParams;
|
||||||
class ParagraphList;
|
|
||||||
class TexRow;
|
class TexRow;
|
||||||
|
|
||||||
/// Just a wrapper for the method below, first creating the ofstream.
|
/// Just a wrapper for the method below, first creating the ofstream.
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#include "bufferparams.h"
|
#include "bufferparams.h"
|
||||||
#include "paragraph.h"
|
#include "paragraph.h"
|
||||||
#include "paragraph_funcs.h"
|
#include "paragraph_funcs.h"
|
||||||
#include "ParagraphList_fwd.h"
|
#include "ParagraphList.h"
|
||||||
#include "ParagraphParameters.h"
|
#include "ParagraphParameters.h"
|
||||||
#include "sgml.h"
|
#include "sgml.h"
|
||||||
|
|
||||||
@ -133,7 +133,7 @@ void linuxdocParagraphs(Buffer const & buf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
pit->simpleLinuxDocOnePar(buf, os,
|
pit->simpleLinuxDocOnePar(buf, os,
|
||||||
outerFont(pit - paragraphs.begin(), paragraphs),
|
outerFont(std::distance(paragraphs.begin(), pit), paragraphs),
|
||||||
runparams, depth);
|
runparams, depth);
|
||||||
|
|
||||||
os << "\n";
|
os << "\n";
|
||||||
|
@ -13,10 +13,11 @@
|
|||||||
#ifndef OUTPUT_LINUXDOC_H
|
#ifndef OUTPUT_LINUXDOC_H
|
||||||
#define OUTPUT_LINUXDOC_H
|
#define OUTPUT_LINUXDOC_H
|
||||||
|
|
||||||
|
#include "ParagraphList_fwd.h"
|
||||||
|
|
||||||
#include <iosfwd>
|
#include <iosfwd>
|
||||||
|
|
||||||
class Buffer;
|
class Buffer;
|
||||||
class ParagraphList;
|
|
||||||
class OutputParams;
|
class OutputParams;
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
#include "output.h"
|
#include "output.h"
|
||||||
#include "outputparams.h"
|
#include "outputparams.h"
|
||||||
#include "paragraph.h"
|
#include "paragraph.h"
|
||||||
#include "ParagraphList_fwd.h"
|
#include "ParagraphList.h"
|
||||||
#include "ParagraphParameters.h"
|
#include "ParagraphParameters.h"
|
||||||
|
|
||||||
#include "support/lstrings.h"
|
#include "support/lstrings.h"
|
||||||
|
@ -66,10 +66,6 @@ using std::ostream;
|
|||||||
using std::ostringstream;
|
using std::ostringstream;
|
||||||
|
|
||||||
|
|
||||||
ParagraphList::ParagraphList()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
Paragraph::Paragraph()
|
Paragraph::Paragraph()
|
||||||
: begin_of_body_(0), pimpl_(new Paragraph::Pimpl(this))
|
: begin_of_body_(0), pimpl_(new Paragraph::Pimpl(this))
|
||||||
{
|
{
|
||||||
|
@ -96,7 +96,8 @@ void breakParagraph(BufferParams const & bparams,
|
|||||||
{
|
{
|
||||||
// create a new paragraph, and insert into the list
|
// create a new paragraph, and insert into the list
|
||||||
ParagraphList::iterator tmp =
|
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];
|
Paragraph & par = pars[par_offset];
|
||||||
|
|
||||||
@ -193,7 +194,8 @@ void breakParagraphConservative(BufferParams const & bparams,
|
|||||||
ParagraphList & pars, pit_type par_offset, pos_type pos)
|
ParagraphList & pars, pit_type par_offset, pos_type pos)
|
||||||
{
|
{
|
||||||
// create a new paragraph
|
// 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];
|
Paragraph & par = pars[par_offset];
|
||||||
|
|
||||||
if (bparams.tracking_changes)
|
if (bparams.tracking_changes)
|
||||||
@ -259,7 +261,7 @@ void mergeParagraph(BufferParams const & bparams,
|
|||||||
// Move the change status of "carriage return" over
|
// Move the change status of "carriage return" over
|
||||||
par.setChange(par.size(), cr);
|
par.setChange(par.size(), cr);
|
||||||
|
|
||||||
pars.erase(pars.begin() + par_offset + 1);
|
pars.erase(boost::next(pars.begin(), par_offset + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
#ifndef PARAGRAPH_FUNCS_H
|
#ifndef PARAGRAPH_FUNCS_H
|
||||||
#define PARAGRAPH_FUNCS_H
|
#define PARAGRAPH_FUNCS_H
|
||||||
|
|
||||||
|
#include "ParagraphList_fwd.h"
|
||||||
|
|
||||||
#include "support/types.h"
|
#include "support/types.h"
|
||||||
|
|
||||||
class Buffer;
|
class Buffer;
|
||||||
@ -19,7 +21,6 @@ class BufferParams;
|
|||||||
class InsetBase;
|
class InsetBase;
|
||||||
class LyXFont;
|
class LyXFont;
|
||||||
class Paragraph;
|
class Paragraph;
|
||||||
class ParagraphList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This breaks a paragraph at the specified position.
|
* This breaks a paragraph at the specified position.
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#define PARITERATOR_H
|
#define PARITERATOR_H
|
||||||
|
|
||||||
#include "dociterator.h"
|
#include "dociterator.h"
|
||||||
|
#include "ParagraphList_fwd.h"
|
||||||
|
|
||||||
#include "support/types.h"
|
#include "support/types.h"
|
||||||
|
|
||||||
@ -24,7 +25,6 @@
|
|||||||
|
|
||||||
class InsetBase;
|
class InsetBase;
|
||||||
class LyXText;
|
class LyXText;
|
||||||
class ParagraphList;
|
|
||||||
|
|
||||||
|
|
||||||
class ParIterator : public std::iterator<std::forward_iterator_tag, Paragraph>,
|
class ParIterator : public std::iterator<std::forward_iterator_tag, Paragraph>,
|
||||||
|
279
src/support/RandomAccessList.h
Normal file
279
src/support/RandomAccessList.h
Normal file
@ -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
|
@ -1414,8 +1414,8 @@ void LyXText::acceptChange(LCursor & cur)
|
|||||||
if (type == Change::DELETED) {
|
if (type == Change::DELETED) {
|
||||||
ParagraphList & plist = paragraphs();
|
ParagraphList & plist = paragraphs();
|
||||||
if (it.pit() + 1 < et.pit())
|
if (it.pit() + 1 < et.pit())
|
||||||
pars_.erase(plist.begin() + it.pit() + 1,
|
pars_.erase(boost::next(plist.begin(), it.pit() + 1),
|
||||||
plist.begin() + et.pit());
|
boost::next(plist.begin(), et.pit()));
|
||||||
|
|
||||||
// Paragraph merge if appropriate:
|
// Paragraph merge if appropriate:
|
||||||
if (pars_[it.pit()].lookupChange(pars_[it.pit()].size())
|
if (pars_[it.pit()].lookupChange(pars_[it.pit()].size())
|
||||||
@ -1451,8 +1451,8 @@ void LyXText::rejectChange(LCursor & cur)
|
|||||||
if (type == Change::INSERTED) {
|
if (type == Change::INSERTED) {
|
||||||
ParagraphList & plist = paragraphs();
|
ParagraphList & plist = paragraphs();
|
||||||
if (it.pit() + 1 < et.pit())
|
if (it.pit() + 1 < et.pit())
|
||||||
pars_.erase(plist.begin() + it.pit() + 1,
|
pars_.erase(boost::next(plist.begin(), it.pit() + 1),
|
||||||
plist.begin() + et.pit());
|
boost::next(plist.begin(), et.pit()));
|
||||||
// Paragraph merge if appropriate:
|
// Paragraph merge if appropriate:
|
||||||
if (pars_[it.pit()].lookupChange(pars_[it.pit()].size())
|
if (pars_[it.pit()].lookupChange(pars_[it.pit()].size())
|
||||||
== Change::INSERTED) {
|
== Change::INSERTED) {
|
||||||
|
@ -1258,7 +1258,7 @@ bool LyXText::deleteEmptyParagraphMechanism(LCursor & cur, LCursor & old)
|
|||||||
max(old.pit() - 1, pit_type(0)),
|
max(old.pit() - 1, pit_type(0)),
|
||||||
min(old.pit() + 1, old.lastpit()));
|
min(old.pit() + 1, old.lastpit()));
|
||||||
ParagraphList & plist = old.text()->paragraphs();
|
ParagraphList & plist = old.text()->paragraphs();
|
||||||
plist.erase(plist.begin() + old.pit());
|
plist.erase(boost::next(plist.begin(), old.pit()));
|
||||||
|
|
||||||
// see #warning above
|
// see #warning above
|
||||||
if (cur.depth() >= old.depth()) {
|
if (cur.depth() >= old.depth()) {
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "BufferView.h"
|
#include "BufferView.h"
|
||||||
#include "lyxtext.h"
|
#include "lyxtext.h"
|
||||||
#include "paragraph.h"
|
#include "paragraph.h"
|
||||||
|
#include "ParagraphList.h"
|
||||||
|
|
||||||
#include "mathed/math_support.h"
|
#include "mathed/math_support.h"
|
||||||
#include "insets/inset.h"
|
#include "insets/inset.h"
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#define UNDO_H
|
#define UNDO_H
|
||||||
|
|
||||||
#include "dociterator.h"
|
#include "dociterator.h"
|
||||||
#include "ParagraphList_fwd.h"
|
#include "ParagraphList.h"
|
||||||
#include "bufferparams.h"
|
#include "bufferparams.h"
|
||||||
|
|
||||||
#include "support/types.h"
|
#include "support/types.h"
|
||||||
|
@ -107,3 +107,6 @@ What's new
|
|||||||
|
|
||||||
- Compilation fix (gtk frontend) for gcc 4.1.
|
- Compilation fix (gtk frontend) for gcc 4.1.
|
||||||
|
|
||||||
|
- Bookmarks and links to LaTeX errors are broken after paragraph
|
||||||
|
deletion/insertion (bugs 2284 and 2242).
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user