The ParagraphList stuff

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@4937 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 2002-08-12 00:15:19 +00:00
parent 83f4b0018e
commit 5bd7f9d67b
16 changed files with 361 additions and 128 deletions

View File

@ -522,7 +522,7 @@ bool BufferView::lockInset(UpdatableInset * inset)
}
}
// Then do a deep look of the inset and lock the right one
Paragraph * par = buffer()->paragraph;
Paragraph * par = &*(buffer()->paragraphs.begin());
int const id = inset->id();
while (par) {
InsetList::iterator it =

View File

@ -1,3 +1,16 @@
2002-08-12 Lars Gullik Bjønnes <larsbj@gullik.net>
* ParagraphList.[Ch]: new files
* Makefile.am (lyx_SOURCES): add ParagraphList.[Ch]
* BufferView2.C (lockInset): ParagraphList changes
* toc.C: ditto
* text2.C: ditto
* bufferlist.C: ditto
* buffer.h: ditto
* buffer.C: ditto
2002-08-11 Lars Gullik Bjønnes <larsbj@gullik.net>
* paragraph_pimpl.h: remove inclusion of boost/array.hpp, remove

View File

@ -79,6 +79,8 @@ lyx_SOURCES = \
LyXAction.h \
MenuBackend.C \
MenuBackend.h \
ParagraphList.C \
ParagraphList.h \
ParagraphParameters.C \
ParagraphParameters.h \
ParameterStruct.h \

144
src/ParagraphList.C Normal file
View File

@ -0,0 +1,144 @@
#include <config.h>
#include "ParagraphList.h"
#include "paragraph.h"
////////// The ParagraphList::iterator
ParagraphList::iterator::iterator()
: ptr(0)
{}
ParagraphList::iterator::iterator(Paragraph * p)
: ptr(p)
{}
ParagraphList::iterator::reference
ParagraphList::iterator::operator*()
{
return *ptr;
}
ParagraphList::iterator::pointer
ParagraphList::iterator::operator->()
{
return ptr;
}
ParagraphList::iterator &
ParagraphList::iterator::operator++()
{
ptr = ptr->next();
return *this;
}
ParagraphList::iterator
ParagraphList::iterator::operator++(int)
{
iterator tmp = *this;
++*this;
return tmp;
}
ParagraphList::iterator &
ParagraphList::iterator::operator--()
{
ptr = ptr->previous();
return *this;
}
ParagraphList::iterator
ParagraphList::iterator::operator--(int)
{
iterator tmp = *this;
--*this;
return tmp;
}
bool operator==(ParagraphList::iterator const & i1,
ParagraphList::iterator const & i2)
{
return &(*const_cast<ParagraphList::iterator&>(i1)) == &(*const_cast<ParagraphList::iterator&>(i2));
}
bool operator!=(ParagraphList::iterator const & i1,
ParagraphList::iterator const & i2)
{
return !(i1 == i2);
}
////////// The ParagraphList proper
ParagraphList::ParagraphList()
: parlist(0)
{}
void ParagraphList::clear()
{
while (parlist) {
Paragraph * tmp = parlist->next();
delete parlist;
parlist = tmp;
}
}
ParagraphList::iterator ParagraphList::begin()
{
return iterator(parlist);
}
ParagraphList::iterator ParagraphList::begin() const
{
return iterator(parlist);
}
ParagraphList::iterator ParagraphList::end()
{
return iterator();
}
ParagraphList::iterator ParagraphList::end() const
{
return iterator();
}
void ParagraphList::set(Paragraph * p)
{
parlist = p;
}
int ParagraphList::size() const
{
// When we switch to a std::container this will be O(1)
// instead of O(n). (Lgb)
Paragraph * tmp = parlist;
int c = 0;
while (tmp) {
++c;
tmp = tmp->next();
}
return c;
}
bool ParagraphList::empty() const
{
return parlist == 0;
}

76
src/ParagraphList.h Normal file
View File

@ -0,0 +1,76 @@
// -*- C++ -*-
#ifndef PARAGRAPH_LIST_H
#define PARAGRAPH_LIST_H
#include <iterator>
class Paragraph;
///
class ParagraphList {
public:
///
class iterator {
public:
///
typedef std::bidirectional_iterator_tag iterator_category;
///
typedef Paragraph * value_type;
///
typedef ptrdiff_t difference_type;
///
typedef Paragraph * pointer;
///
typedef Paragraph & reference;
///
iterator();
///
iterator(value_type);
///
reference operator*();
///
pointer operator->();
///
iterator & operator++();
///
iterator operator++(int);
///
iterator & operator--();
///
iterator operator--(int);
private:
///
Paragraph * ptr;
};
///
ParagraphList();
///
void clear();
///
iterator begin();
///
iterator begin() const;
///
iterator end();
///
iterator end() const;
///
void set(Paragraph *);
///
int size() const;
///
bool empty() const;
private:
///
Paragraph * parlist;
};
///
bool operator==(ParagraphList::iterator const & i1,
ParagraphList::iterator const & i2);
///
bool operator!=(ParagraphList::iterator const & i1,
ParagraphList::iterator const & i2);
#endif

View File

@ -146,14 +146,13 @@ const int LYX_FORMAT = 220;
} // namespace anon
Buffer::Buffer(string const & file, bool ronly)
: paragraph(0), niceFile(true), lyx_clean(true), bak_clean(true),
: niceFile(true), lyx_clean(true), bak_clean(true),
unnamed(false), dep_clean(0), read_only(ronly),
filename_(file), users(0)
{
lyxerr[Debug::INFO] << "Buffer::Buffer()" << endl;
// filename = file;
filepath_ = OnlyPath(file);
// paragraph = 0;
// lyx_clean = true;
// bak_clean = true;
// dep_clean = 0;
@ -184,14 +183,7 @@ Buffer::~Buffer()
DestroyBufferTmpDir(tmppath);
}
Paragraph * par = paragraph;
Paragraph * tmppar;
while (par) {
tmppar = par->next();
delete par;
par = tmppar;
}
paragraph = 0;
paragraphs.clear();
// Remove any previewed LaTeX snippets assocoated with this buffer.
grfx::Previews::get().removeLoader(this);
@ -379,7 +371,7 @@ bool Buffer::readLyXformat2(LyXLex & lex, Paragraph * par)
if (!first_par)
first_par = par;
paragraph = first_par;
paragraphs.set(first_par);
if (unknown_layouts > 0) {
string s = _("Couldn't set the layout for ");
@ -1848,7 +1840,7 @@ bool Buffer::writeFile(string const & fname) const
// this will write out all the paragraphs
// using recursive descent.
paragraph->writeFile(this, ofs, params, depth);
paragraphs.begin()->writeFile(this, ofs, params, depth);
// Write marker that shows file is complete
ofs << "\n\\the_end" << endl;
@ -2123,7 +2115,7 @@ void Buffer::writeFileAscii(string const & fname, int linelen)
void Buffer::writeFileAscii(ostream & ofs, int linelen)
{
Paragraph * par = paragraph;
Paragraph * par = &*(paragraphs.begin());
while (par) {
ofs << asciiParagraph(par, linelen, par->previous() == 0);
par = par->next();
@ -2171,7 +2163,7 @@ void Buffer::makeLaTeXFile(ostream & os,
texrow.reset();
// The starting paragraph of the coming rows is the
// first paragraph of the document. (Asger)
texrow.start(paragraph, 0);
texrow.start(&*(paragraphs.begin()), 0);
if (!only_body && nice) {
os << "%% " << lyx_docversion << " created this file. "
@ -2598,7 +2590,7 @@ void Buffer::makeLaTeXFile(ostream & os,
texrow.newline();
}
latexParagraphs(os, paragraph, 0, texrow);
latexParagraphs(os, &*(paragraphs.begin()), 0, texrow);
// add this just in case after all the paragraphs
os << endl;
@ -2800,7 +2792,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
<< " -->\n";
Paragraph::depth_type depth = 0; // paragraph depth
Paragraph * par = paragraph;
Paragraph * par = &*(paragraphs.begin());
string item_name;
vector<string> environment_stack(5);
@ -3215,7 +3207,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
return;
}
Paragraph * par = paragraph;
Paragraph * par = &*(paragraphs.begin());
niceFile = nice; // this will be used by Insetincludes.
@ -3628,7 +3620,7 @@ int Buffer::runChktex()
void Buffer::validate(LaTeXFeatures & features) const
{
Paragraph * par = paragraph;
Paragraph * par = &*(paragraphs.begin());
LyXTextClass const & tclass = params.getLyXTextClass();
// AMS Style is at document level
@ -3733,7 +3725,7 @@ vector<pair<string, string> > const Buffer::getBibkeyList() const
}
vector<StringPair> keys;
Paragraph * par = paragraph;
Paragraph * par = &*(paragraphs.begin());
while (par) {
if (par->bibkey) {
string const key = par->bibkey->getContents();
@ -3833,7 +3825,7 @@ bool Buffer::dispatch(int action, string const & argument, bool * result)
void Buffer::resizeInsets(BufferView * bv)
{
/// then remove all LyXText in text-insets
Paragraph * par = paragraph;
Paragraph * par = &*(paragraphs.begin());
for (; par; par = par->next()) {
par->resizeInsetsLyXText(bv);
}
@ -3910,7 +3902,7 @@ Inset * Buffer::getInsetFromID(int id_arg) const
Paragraph * Buffer::getParFromID(int id) const
{
if (id < 0) return 0;
Paragraph * par = paragraph;
Paragraph * par = &*(paragraphs.begin());
while (par) {
if (par->id() == id) {
return par;
@ -3927,7 +3919,7 @@ Paragraph * Buffer::getParFromID(int id) const
ParIterator Buffer::par_iterator_begin()
{
return ParIterator(paragraph);
return ParIterator(&*(paragraphs.begin()));
}

View File

@ -24,6 +24,7 @@
#include "lyxvc.h"
#include "bufferparams.h"
#include "texrow.h"
#include "ParagraphList.h"
#include "paragraph.h"
#include <boost/shared_ptr.hpp>
@ -301,7 +302,7 @@ public:
This is a linked list of paragraph, this list holds the
whole contents of the document.
*/
Paragraph * paragraph;
ParagraphList paragraphs;
/// LyX version control object.
LyXVC lyxvc;
@ -414,7 +415,7 @@ public:
///
inset_iterator inset_iterator_begin() {
return inset_iterator(paragraph);
return inset_iterator(&*paragraphs.begin());
}
///
inset_iterator inset_iterator_end() {
@ -422,7 +423,7 @@ public:
}
///
inset_iterator inset_const_iterator_begin() const {
return inset_iterator(paragraph);
return inset_iterator(&*paragraphs.begin());
}
///
inset_iterator inset_const_iterator_end() const {

View File

@ -181,7 +181,7 @@ bool BufferList::close(Buffer * buf)
if (buf->getUser())
buf->getUser()->insetUnlock();
if (buf->paragraph && !buf->isClean() && !quitting) {
if (!buf->paragraphs.empty() && !buf->isClean() && !quitting) {
if (buf->getUser())
buf->getUser()->owner()->prohibitInput();
string fname;
@ -476,12 +476,12 @@ Buffer * BufferList::newFile(string const & name, string tname, bool isNamed)
Alert::alert(_("Error!"), _("Unable to open template"),
MakeDisplayPath(tname));
// no template, start with empty buffer
b->paragraph = new Paragraph;
b->paragraph->layout(b->params.getLyXTextClass().defaultLayout());
b->paragraphs.set(new Paragraph);
b->paragraphs.begin()->layout(b->params.getLyXTextClass().defaultLayout());
}
} else { // start with empty buffer
b->paragraph = new Paragraph;
b->paragraph->layout(b->params.getLyXTextClass().defaultLayout());
b->paragraphs.set(new Paragraph);
b->paragraphs.begin()->layout(b->params.getLyXTextClass().defaultLayout());
}
if (!isNamed) {

View File

@ -1,12 +1,17 @@
2002-08-12 Lars Gullik Bjønnes <larsbj@gullik.net>
* FormDocument.C (saveParamsAsDefault): ParagraphList changes
(class_apply): ditto
2002-08-08 John Levon <levon@movementarian.org>
* Menubar_pimpl.C:
* Toolbar_pimpl.C: lyxaction cleanup
2002-08-08 John Levon <levon@movementarian.org>
* forms/form_thesaurus.fd: allow Esc to close dialog
2002-08-02 Angus Leeming <leeming@lyx.org>
* FormInclude.C:
@ -22,18 +27,18 @@
2002-08-01 John Levon <levon@movementarian.org>
* FormDocument.C: writeFile() change
2002-08-01 John Levon <levon@movementarian.org>
* FormPreferences.h:
* FormPreferences.C:
* guiapi.C:
* forms/form_spellchecker.fd: remove options from spellchecker
2002-07-30 John Levon <levon@movementarian.org>
* lyx_gui.C: implement remove_read_callback()
2002-07-26 Jean-Marc Lasgouttes <lasgouttes@freesurf.fr>
* XWorkArea.C (work_area_handler): change type of

View File

@ -405,7 +405,7 @@ bool saveParamsAsDefault(BufferParams const &params)
defaults.params = params;
// add an empty paragraph. Is this enough?
defaults.paragraph = new Paragraph;
defaults.paragraphs.set(new Paragraph);
return defaults.writeFile(defaults.fileName());
}
@ -746,7 +746,7 @@ bool FormDocument::class_apply()
setMinibuffer(lv_, _("Converting document to new document class..."));
int ret = CutAndPaste::SwitchLayoutsBetweenClasses(
old_class, params.textclass,
lv_->buffer()->paragraph,
&*(lv_->buffer()->paragraphs.begin()),
lv_->buffer()->params);
if (ret) {
string s;

View File

@ -1,3 +1,9 @@
2002-08-12 Lars Gullik Bjønnes <larsbj@gullik.net>
* insetbib.C (bibitemMaxWidth): ParagraphList changes
(bibitemWidest): ditto
* insettext.[Ch]: ditto
2002-08-10 Lars Gullik Bjønnes <larsbj@gullik.net>
* insettext.C, insetert.C: use Paragraph::empty where appropriate

View File

@ -327,7 +327,7 @@ int bibitemMaxWidth(BufferView * bv, LyXFont const & font)
int w = 0;
// Ha, now we are mainly at 1.2.0 and it is still here (Jug)
// Does look like a hack? It is! (but will change at 0.13)
Paragraph * par = bv->buffer()->paragraph;
Paragraph * par = &*(bv->buffer()->paragraphs.begin());
while (par) {
if (par->bibkey) {
@ -345,7 +345,7 @@ string const bibitemWidest(Buffer const * buffer)
{
int w = 0;
// Does look like a hack? It is! (but will change at 0.13)
Paragraph * par = buffer->paragraph;
Paragraph * par = &*(buffer->paragraphs.begin());
InsetBibKey * bkey = 0;
LyXFont font;

View File

@ -76,7 +76,7 @@ extern int greek_kb_flag;
void InsetText::saveLyXTextState(LyXText * t) const
{
// check if my paragraphs are still valid
Paragraph * p = par;
Paragraph * p = &*(paragraphs.begin());
while (p) {
if (p == t->cursor.par())
break;
@ -138,8 +138,8 @@ InsetText::InsetText(BufferParams const & bp)
: UpdatableInset(), lt(0), in_update(false), do_resize(0),
do_reinit(false)
{
par = new Paragraph;
par->layout(bp.getLyXTextClass().defaultLayout());
paragraphs.set(new Paragraph);
paragraphs.begin()->layout(bp.getLyXTextClass().defaultLayout());
init();
}
@ -148,7 +148,6 @@ InsetText::InsetText(InsetText const & in, bool same_id)
: UpdatableInset(in, same_id), lt(0), in_update(false), do_resize(0),
do_reinit(false)
{
par = 0;
init(&in, same_id);
}
@ -163,14 +162,14 @@ InsetText & InsetText::operator=(InsetText const & it)
void InsetText::init(InsetText const * ins, bool same_id)
{
if (ins) {
setParagraphData(ins->par, same_id);
setParagraphData(&*(ins->paragraphs.begin()), same_id);
autoBreakRows = ins->autoBreakRows;
drawFrame_ = ins->drawFrame_;
frame_color = ins->frame_color;
if (same_id)
id_ = ins->id_;
} else {
Paragraph * p = par;
Paragraph * p = &*(paragraphs.begin());
while (p) {
p->setInsetOwner(this);
p = p->next();
@ -205,27 +204,19 @@ InsetText::~InsetText()
// NOTE
while (par) {
Paragraph * tmp = par->next();
delete par;
par = tmp;
}
paragraphs.clear();
}
void InsetText::clear()
{
// This is a gross hack...
LyXLayout_ptr old_layout = par->layout();
LyXLayout_ptr old_layout = paragraphs.begin()->layout();
while (par) {
Paragraph * tmp = par->next();
delete par;
par = tmp;
}
par = new Paragraph;
par->setInsetOwner(this);
par->layout(old_layout);
paragraphs.clear();
paragraphs.set(new Paragraph);
paragraphs.begin()->setInsetOwner(this);
paragraphs.begin()->layout(old_layout);
reinitLyXText();
need_update = INIT;
@ -247,7 +238,7 @@ void InsetText::write(Buffer const * buf, ostream & os) const
void InsetText::writeParagraphData(Buffer const * buf, ostream & os) const
{
par->writeFile(buf, os, buf->params, 0);
paragraphs.begin()->writeFile(buf, os, buf->params, 0);
}
@ -273,8 +264,10 @@ void InsetText::read(Buffer const * buf, LyXLex & lex)
break;
}
Paragraph * tmp = &*(paragraphs.begin());
if (const_cast<Buffer*>(buf)->
parseSingleLyXformat2Token(lex, par, return_par,
parseSingleLyXformat2Token(lex, tmp, return_par,
token, pos, depth, font)) {
// the_end read this should NEVER happen
lex.printError("\\the_end read in inset! Error in document!");
@ -282,8 +275,8 @@ void InsetText::read(Buffer const * buf, LyXLex & lex)
}
}
if (!return_par)
return_par = par;
par = return_par;
return_par = &*(paragraphs.begin());
paragraphs.set(return_par);
while (return_par) {
return_par->setInsetOwner(this);
return_par = return_par->next();
@ -377,7 +370,7 @@ void InsetText::draw(BufferView * bv, LyXFont const & f,
}
// no draw is necessary !!!
if ((drawFrame_ == LOCKED) && !locked && par->empty()) {
if ((drawFrame_ == LOCKED) && !locked && paragraphs.begin()->empty()) {
top_baseline = baseline;
x += width(bv, f);
if (need_update & CLEAR_FRAME)
@ -570,7 +563,7 @@ void InsetText::update(BufferView * bv, LyXFont const & font, bool reinit)
return;
}
if (!autoBreakRows && par->next())
if (!autoBreakRows && paragraphs.begin()->next())
collapseParagraphs(bv);
if (the_locking_inset) {
@ -625,7 +618,7 @@ void InsetText::setUpdateStatus(BufferView * bv, int what) const
void InsetText::updateLocal(BufferView * bv, int what, bool mark_dirty) const
{
if (!autoBreakRows && par->next())
if (!autoBreakRows && paragraphs.begin()->next())
collapseParagraphs(bv);
bool clear = false;
if (!lt) {
@ -704,7 +697,7 @@ void InsetText::edit(BufferView * bv, int x, int y, mouse_button::state button)
finishUndo();
// If the inset is empty set the language of the current font to the
// language to the surronding text (if different).
if (par->empty() && !par->next() &&
if (paragraphs.begin()->empty() && !paragraphs.begin()->next() &&
bv->getParentLanguage(this) != lt->current_font.language())
{
LyXFont font(LyXFont::ALL_IGNORE);
@ -745,9 +738,9 @@ void InsetText::edit(BufferView * bv, bool front)
clear = true;
}
if (front)
lt->setCursor(bv, par, 0);
lt->setCursor(bv, &*(paragraphs.begin()), 0);
else {
Paragraph * p = par;
Paragraph * p = &*(paragraphs.begin());
while (p->next())
p = p->next();
// int const pos = (p->size() ? p->size()-1 : p->size());
@ -757,7 +750,7 @@ void InsetText::edit(BufferView * bv, bool front)
finishUndo();
// If the inset is empty set the language of the current font to the
// language to the surronding text (if different).
if (par->empty() && !par->next() &&
if (paragraphs.begin()->empty() && !paragraphs.begin()->next() &&
bv->getParentLanguage(this) != lt->current_font.language()) {
LyXFont font(LyXFont::ALL_IGNORE);
font.setLanguage(bv->getParentLanguage(this));
@ -807,10 +800,10 @@ void InsetText::insetUnlock(BufferView * bv)
} else
bv->owner()->setLayout(bv->text->cursor.par()->layout()->name());
// hack for deleteEmptyParMech
if (!par->empty()) {
lt->setCursor(bv, par, 0);
} else if (par->next()) {
lt->setCursor(bv, par->next(), 0);
if (!paragraphs.begin()->empty()) {
lt->setCursor(bv, &*(paragraphs.begin()), 0);
} else if (paragraphs.begin()->next()) {
lt->setCursor(bv, paragraphs.begin()->next(), 0);
}
if (clear)
lt = 0;
@ -836,12 +829,12 @@ void InsetText::lockInset(BufferView * bv)
lt = getLyXText(bv);
clear = true;
}
lt->setCursor(bv, par, 0);
lt->setCursor(bv, &*(paragraphs.begin()), 0);
lt->clearSelection();
finishUndo();
// If the inset is empty set the language of the current font to the
// language to the surronding text (if different).
if (par->empty() && !par->next() &&
if (paragraphs.begin()->empty() && !paragraphs.begin()->next() &&
bv->getParentLanguage(this) != lt->current_font.language()) {
LyXFont font(LyXFont::ALL_IGNORE);
font.setLanguage(bv->getParentLanguage(this));
@ -875,7 +868,7 @@ bool InsetText::lockInsetInInset(BufferView * bv, UpdatableInset * inset)
if (!inset)
return false;
if (!the_locking_inset) {
Paragraph * p = par;
Paragraph * p = &*(paragraphs.begin());
int const id = inset->id();
while(p) {
InsetList::iterator it =
@ -943,7 +936,7 @@ bool InsetText::unlockInsetInInset(BufferView * bv, UpdatableInset * inset,
bool InsetText::updateInsetInInset(BufferView * bv, Inset * inset)
{
if (!autoBreakRows && par->next())
if (!autoBreakRows && paragraphs.begin()->next())
collapseParagraphs(bv);
if (inset == this)
return true;
@ -1176,7 +1169,7 @@ void InsetText::insetMotionNotify(BufferView * bv, int x, int y, mouse_button::s
UpdatableInset::RESULT
InsetText::localDispatch(BufferView * bv, FuncRequest const & ev)
{
bool was_empty = (par->empty() && !par->next());
bool was_empty = (paragraphs.begin()->empty() && !paragraphs.begin()->next());
no_selection = false;
UpdatableInset::RESULT
result= UpdatableInset::localDispatch(bv, ev);
@ -1533,7 +1526,7 @@ InsetText::localDispatch(BufferView * bv, FuncRequest const & ev)
updateLocal(bv, updwhat, updflag);
/// If the action has deleted all text in the inset, we need to change the
// language to the language of the surronding text.
if (!was_empty && par->empty() && !par->next()) {
if (!was_empty && paragraphs.begin()->empty() && !paragraphs.begin()->next()) {
LyXFont font(LyXFont::ALL_IGNORE);
font.setLanguage(bv->getParentLanguage(this));
setFont(bv, font, false);
@ -1551,14 +1544,14 @@ InsetText::localDispatch(BufferView * bv, FuncRequest const & ev)
int InsetText::latex(Buffer const * buf, ostream & os, bool moving_arg, bool) const
{
TexRow texrow;
buf->latexParagraphs(os, par, 0, texrow, moving_arg);
buf->latexParagraphs(os, &*(paragraphs.begin()), 0, texrow, moving_arg);
return texrow.rows();
}
int InsetText::ascii(Buffer const * buf, ostream & os, int linelen) const
{
Paragraph * p = par;
Paragraph * p = &*(paragraphs.begin());
unsigned int lines = 0;
while (p) {
@ -1573,7 +1566,7 @@ int InsetText::ascii(Buffer const * buf, ostream & os, int linelen) const
int InsetText::docbook(Buffer const * buf, ostream & os, bool mixcont) const
{
Paragraph * p = par;
Paragraph * p = &*(paragraphs.begin());
unsigned int lines = 0;
vector<string> environment_stack(10);
@ -1726,7 +1719,7 @@ int InsetText::docbook(Buffer const * buf, ostream & os, bool mixcont) const
void InsetText::validate(LaTeXFeatures & features) const
{
Paragraph * p = par;
Paragraph * p = &*(paragraphs.begin());
while (p) {
p->validate(features);
p = p->next();
@ -1966,7 +1959,7 @@ vector<string> const InsetText::getLabelList() const
{
vector<string> label_list;
Paragraph * tpar = par;
Paragraph * tpar = &*(paragraphs.begin());
while (tpar) {
InsetList::iterator beg = tpar->insetlist.begin();
InsetList::iterator end = tpar->insetlist.end();
@ -1987,7 +1980,7 @@ void InsetText::setFont(BufferView * bv, LyXFont const & font, bool toggleall,
the_locking_inset->setFont(bv, font, toggleall, selectall);
return;
}
if ((!par->next() && par->empty()) || cpar(bv)->empty()) {
if ((!paragraphs.begin()->next() && paragraphs.begin()->empty()) || cpar(bv)->empty()) {
getLyXText(bv)->setFont(bv, font, toggleall);
return;
}
@ -2087,15 +2080,11 @@ void InsetText::setParagraphData(Paragraph * p, bool same_id)
{
// we have to unlock any locked inset otherwise we're in troubles
the_locking_inset = 0;
while (par) {
Paragraph * tmp = par->next();
delete par;
par = tmp;
}
par = new Paragraph(*p, same_id);
par->setInsetOwner(this);
Paragraph * np = par;
paragraphs.clear();
paragraphs.set(new Paragraph(*p, same_id));
paragraphs.begin()->setInsetOwner(this);
Paragraph * np = &*(paragraphs.begin());
while (p->next()) {
p = p->next();
np->next(new Paragraph(*p, same_id));
@ -2111,8 +2100,8 @@ void InsetText::setParagraphData(Paragraph * p, bool same_id)
void InsetText::setText(string const & data, LyXFont const & font)
{
clear();
for (unsigned int i=0; i < data.length(); ++i)
par->insertChar(i, data[i], font);
for (unsigned int i = 0; i < data.length(); ++i)
paragraphs.begin()->insertChar(i, data[i], font);
reinitLyXText();
}
@ -2223,7 +2212,7 @@ LyXText * InsetText::getLyXText(BufferView const * lbv,
if (recursive && the_locking_inset)
return the_locking_inset->getLyXText(lbv, true);
LyXText * lt = cached_text.get();
lyx::Assert(lt && lt->firstRow()->par() == par);
lyx::Assert(lt && lt->firstRow()->par() == &*(paragraphs.begin()));
return lt;
}
// Super UGLY! (Lgb)
@ -2296,7 +2285,7 @@ void InsetText::deleteLyXText(BufferView * bv, bool recursive) const
it->second.remove = true;
if (recursive) {
/// then remove all LyXText in text-insets
Paragraph * p = par;
Paragraph * p = &*(paragraphs.begin());
for (; p; p = p->next()) {
p->deleteInsetsLyXText(bv);
}
@ -2314,7 +2303,7 @@ void InsetText::resizeLyXText(BufferView * bv, bool force) const
}
do_resize = 0;
// lyxerr << "InsetText::resizeLyXText\n";
if (!par->next() && par->empty()) { // no data, resize not neccessary!
if (!paragraphs.begin()->next() && paragraphs.begin()->empty()) { // no data, resize not neccessary!
// we have to do this as a fixed width may have changed!
LyXText * t = getLyXText(bv);
saveLyXTextState(t);
@ -2334,7 +2323,7 @@ void InsetText::resizeLyXText(BufferView * bv, bool force) const
LyXText * t = it->second.text.get();
saveLyXTextState(t);
for (Paragraph * p = par; p; p = p->next()) {
for (Paragraph * p = &*(paragraphs.begin()); p; p = p->next()) {
p->resizeInsetsLyXText(bv);
}
t->init(bv, true);
@ -2373,7 +2362,8 @@ void InsetText::reinitLyXText() const
BufferView * bv = it->first;
saveLyXTextState(t);
for (Paragraph * p = par; p; p = p->next()) {
for (Paragraph * p = &*(paragraphs.begin());
p; p = p->next()) {
p->resizeInsetsLyXText(bv);
}
t->init(bv, true);
@ -2398,7 +2388,7 @@ void InsetText::removeNewlines()
{
bool changed = false;
for (Paragraph * p = par; p; p = p->next()) {
for (Paragraph * p = &*(paragraphs.begin()); p; p = p->next()) {
for (int i = 0; i < p->size(); ++i) {
if (p->getChar(i) == Paragraph::META_NEWLINE) {
changed = true;
@ -2486,7 +2476,7 @@ Paragraph * InsetText::getParFromID(int id) const
}
return result;
#else
Paragraph * tmp = par;
Paragraph * tmp = &*(paragraphs.begin());
while (tmp) {
if (tmp->id() == id) {
return tmp;
@ -2508,13 +2498,13 @@ Paragraph * InsetText::firstParagraph() const
if (the_locking_inset)
if ((result = the_locking_inset->firstParagraph()))
return result;
return par;
return &*(paragraphs.begin());
}
Paragraph * InsetText::getFirstParagraph(int i) const
{
return (i == 0) ? par : 0;
return (i == 0) ? &*(paragraphs.begin()) : 0;
}
@ -2528,7 +2518,7 @@ LyXCursor const & InsetText::cursor(BufferView * bv) const
Paragraph * InsetText::paragraph() const
{
return par;
return &*(paragraphs.begin());
}
@ -2539,9 +2529,9 @@ void InsetText::paragraph(Paragraph * p)
// as we could have to insert a paragraph before this one and just
// link the actual to a new ones next and set it with this function
// and are done!
par = p;
paragraphs.set(p);
// set ourself as owner for all the paragraphs inserted!
Paragraph * np = par;
Paragraph * np = &*(paragraphs.begin());
while (np) {
np->setInsetOwner(this);
np = np->next();
@ -2557,7 +2547,7 @@ Inset * InsetText::getInsetFromID(int id_arg) const
if (id_arg == id())
return const_cast<InsetText *>(this);
Paragraph * lp = par;
Paragraph * lp = &*(paragraphs.begin());
while (lp) {
for (InsetList::iterator it = lp->insetlist.begin(),
@ -2576,7 +2566,9 @@ Inset * InsetText::getInsetFromID(int id_arg) const
}
WordLangTuple InsetText::selectNextWordToSpellcheck(BufferView * bv, float & value) const
WordLangTuple
InsetText::selectNextWordToSpellcheck(BufferView * bv,
float & value) const
{
bool clear = false;
WordLangTuple word;
@ -2692,7 +2684,7 @@ bool InsetText::searchBackward(BufferView * bv, string const & str,
clear = true;
}
if (!locked) {
Paragraph * p = par;
Paragraph * p = &*(paragraphs.begin());
while (p->next())
p = p->next();
lt->setCursor(bv, p, p->size());
@ -2728,25 +2720,25 @@ void InsetText::collapseParagraphs(BufferView * bv) const
BufferParams const & bparams = bv->buffer()->params;
LyXText * llt = getLyXText(bv);
while(par->next()) {
if (!par->empty() && !par->next()->empty() &&
!par->isSeparator(par->size() - 1))
while (paragraphs.begin()->next()) {
if (!paragraphs.begin()->empty() && !paragraphs.begin()->next()->empty() &&
!paragraphs.begin()->isSeparator(paragraphs.begin()->size() - 1))
{
par->insertChar(par->size(), ' ');
paragraphs.begin()->insertChar(paragraphs.begin()->size(), ' ');
}
if (llt->selection.set()) {
if (llt->selection.start.par() == par->next()) {
llt->selection.start.par(par);
if (llt->selection.start.par() == paragraphs.begin()->next()) {
llt->selection.start.par(&*(paragraphs.begin()));
llt->selection.start.pos(
llt->selection.start.pos() + par->size());
llt->selection.start.pos() + paragraphs.begin()->size());
}
if (llt->selection.end.par() == par->next()) {
llt->selection.end.par(par);
if (llt->selection.end.par() == paragraphs.begin()->next()) {
llt->selection.end.par(&*(paragraphs.begin()));
llt->selection.end.pos(
llt->selection.end.pos() + par->size());
llt->selection.end.pos() + paragraphs.begin()->size());
}
}
par->pasteParagraph(bparams);
paragraphs.begin()->pasteParagraph(bparams);
}
reinitLyXText();
}
@ -2773,7 +2765,7 @@ void InsetText::appendParagraphs(BufferParams const & bparams,
lastbuffer->next()->previous(lastbuffer);
lastbuffer = lastbuffer->next();
}
lastbuffer = par;
lastbuffer = &*(paragraphs.begin());
while (lastbuffer->next())
lastbuffer = lastbuffer->next();
if (!newpar->empty() && !lastbuffer->empty() &&

View File

@ -22,6 +22,8 @@
#include "inset.h"
#include "LString.h"
#include "LColor.h"
#include "ParagraphList.h"
#include "support/types.h"
#include <boost/shared_ptr.hpp>
@ -351,7 +353,7 @@ private:
/* Private structures and variables */
///
Paragraph * par;
ParagraphList paragraphs;
///
mutable bool locked;
///

View File

@ -2405,7 +2405,7 @@ Paragraph * LyXText::ownerParagraph() const
if (inset_owner) {
return inset_owner->paragraph();
}
return bv_owner->buffer()->paragraph;
return &*(bv_owner->buffer()->paragraphs.begin());
}
@ -2414,7 +2414,7 @@ void LyXText::ownerParagraph(Paragraph * p) const
if (inset_owner) {
inset_owner->paragraph(p);
} else {
bv_owner->buffer()->paragraph = p;
bv_owner->buffer()->paragraphs.set(p);
}
}

View File

@ -72,7 +72,7 @@ TocList const getTocList(Buffer const * buf)
TocList toclist;
if (!buf)
return toclist;
Paragraph * par = buf->paragraph;
Paragraph * par = &*(buf->paragraphs.begin());
LyXTextClass const & textclass = buf->params.getLyXTextClass();