diff --git a/po/POTFILES.in b/po/POTFILES.in index ddad52456e..96ab664a0f 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -8,7 +8,6 @@ src/converter.C src/CutAndPaste.C src/debug.C src/exporter.C -src/ext_l10n.h src/FloatList.C src/frontends/controllers/biblio.C src/frontends/controllers/ButtonController.h @@ -165,5 +164,6 @@ src/paragraph.C src/support/filetools.C src/tabular.C src/text2.C +src/text3.C src/text.C src/ext_l10n.h diff --git a/src/ChangeLog b/src/ChangeLog index 57b85811c0..5a240d8929 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,23 @@ 2002-08-20 Lars Gullik Bjønnes + * text.C: include paragraph_funcs.h + (breakParagraph): breakParagraph is now in global scope + + * paragraph_funcs.[Ch]: new files + + * paragraph.C (breakParagraph,breakParagraphConservative): move to + global scope + + * buffer.C: include paragraph_funcs.h + (insertStringAsLines): breakParagraph is now in global scope + + * Makefile.am (lyx_SOURCES): add paragraph_funcs.h and + paragraph_funcs.C + + * CutAndPaste.C: include paragraph_funcs.h + (cutSelection): breakParagraphConservative is now in global scope + (pasteSelection): ditto + * buffer.h: declare oprator== and operator!= for Buffer::inset_iterator diff --git a/src/CutAndPaste.C b/src/CutAndPaste.C index 6117a50481..230648add5 100644 --- a/src/CutAndPaste.C +++ b/src/CutAndPaste.C @@ -25,6 +25,8 @@ #include "iterators.h" #include "lyxtextclasslist.h" #include "undo_funcs.h" +#include "paragraph_funcs.h" + #include "insets/inseterror.h" using std::pair; @@ -111,13 +113,15 @@ bool CutAndPaste::cutSelection(Paragraph * startpar, Paragraph ** endpar, end = start - 1; } else { // more than one paragraph - (*endpar)->breakParagraphConservative(current_view->buffer()->params, - end); + breakParagraphConservative(current_view->buffer()->params, + *endpar, + end); *endpar = (*endpar)->next(); end = 0; - startpar->breakParagraphConservative(current_view->buffer()->params, - start); + breakParagraphConservative(current_view->buffer()->params, + startpar, + start); // store the selection if (realcut) { @@ -342,8 +346,10 @@ bool CutAndPaste::pasteSelection(Paragraph ** par, Paragraph ** endpar, // open the paragraph for inserting the buf // if necessary if (((*par)->size() > pos) || !(*par)->next()) { - (*par)->breakParagraphConservative(current_view->buffer()->params, - pos); + breakParagraphConservative( + current_view->buffer()->params, + *par, + pos); paste_the_end = true; } // set the end for redoing later diff --git a/src/Makefile.am b/src/Makefile.am index a03addb607..79f7005564 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -18,16 +18,9 @@ LYX_CONV_LIBS = mathed/libmathed.la insets/libinsets.la \ BOOST_LIBS = ../boost/libs/regex/src/libboostregex.la \ ../boost/libs/signals/src/libboostsignals.la -#lyx_DEPENDENCIES = $(LYX_CONV_LIBS) $(INCLUDED_SIGC) - lyx_LDADD = $(LYX_CONV_LIBS) $(BOOST_LIBS) $(INTLLIBS) \ $(PSPELL_LIBS) $(AIKSAURUS_LIBS) -#lyx_LDADD = $(LYX_CONV_LIBS) $(SIGC_LIBS) $(BOOST_LIBS) $(INCLUDED_SIGC) $(INTLLIBS) \ -# $(PSPELL_LIBS) $(AIKSAURUS_LIBS) - -# $(FRONTEND_LDFLAGS) $(FRONTEND_LIBS) - #lyx_LDFLAGS=-Wl,-O1 EXTRA_DIST = config.h.in stamp-h.in cheaders ext_l10n.h version.C.in \ @@ -38,8 +31,7 @@ EXTRA_DIST = config.h.in stamp-h.in cheaders ext_l10n.h version.C.in \ tracer.C \ tracer.h -INCLUDES = $(SIGC_CFLAGS) $(BOOST_INCLUDES) $(PSPELL_INCLUDES) -#INCLUDES = $(BOOST_INCLUDES) $(PSPELL_INCLUDES) +INCLUDES = $(BOOST_INCLUDES) $(PSPELL_INCLUDES) localedir = $(datadir)/locale @@ -79,6 +71,8 @@ lyx_SOURCES = \ LyXAction.h \ MenuBackend.C \ MenuBackend.h \ + paragraph_funcs.C \ + paragraph_funcs.h \ ParagraphList.C \ ParagraphList.h \ ParagraphParameters.C \ diff --git a/src/buffer.C b/src/buffer.C index e5d89733e9..793e372ac0 100644 --- a/src/buffer.C +++ b/src/buffer.C @@ -31,7 +31,6 @@ #include "version.h" #include "LaTeX.h" #include "Chktex.h" -#include "frontends/LyXView.h" #include "debug.h" #include "LaTeXFeatures.h" #include "lyxtext.h" @@ -46,6 +45,9 @@ #include "iterators.h" #include "lyxtextclasslist.h" #include "sgml.h" +#include "paragraph_funcs.h" + +#include "frontends/LyXView.h" #include "mathed/formulamacro.h" #include "mathed/formula.h" @@ -1495,8 +1497,8 @@ void Buffer::insertStringAsLines(Paragraph *& par, pos_type & pos, cit != str.end(); ++cit) { if (*cit == '\n') { if (autobreakrows && (!par->empty() || layout->keepempty)) { - par->breakParagraph(params, pos, - layout->isEnvironment()); + breakParagraph(params, par, pos, + layout->isEnvironment()); par = par->next(); pos = 0; space_inserted = true; @@ -4080,7 +4082,7 @@ lyx::pos_type Buffer::inset_iterator::getPos() const bool operator==(Buffer::inset_iterator const & iter1, - Buffer::inset_iterator const & iter2) + Buffer::inset_iterator const & iter2) { return iter1.pit == iter2.pit && (iter1.pit == iter1.pend || iter1.it == iter2.it); @@ -4088,8 +4090,7 @@ bool operator==(Buffer::inset_iterator const & iter1, bool operator!=(Buffer::inset_iterator const & iter1, - Buffer::inset_iterator const & iter2) + Buffer::inset_iterator const & iter2) { return !(iter1 == iter2); } - diff --git a/src/frontends/ChangeLog b/src/frontends/ChangeLog index 0ce12ca53b..07317cff66 100644 --- a/src/frontends/ChangeLog +++ b/src/frontends/ChangeLog @@ -1,3 +1,7 @@ +2002-08-20 Lars Gullik Bjønnes + + * Dialogs.h (noncopyable): ws changes only + 2002-08-16 Jean-Marc Lasgouttes * Makefile.am: use $(variables) instead of @substitutions@ @@ -43,7 +47,7 @@ 2002-08-08 John Levon * Toolbar.C: - + 2002-08-06 André Poenitz * Screen.C: Honor \show_banner lyxrc setting @@ -51,7 +55,7 @@ 2002-08-04 John Levon * LyXView.C: isLyxClean->isClean - + 2002-08-02 Edwin Leuven * Dialogs.[Ch] (updateParagraph): converted back to a signal again. @@ -70,25 +74,25 @@ * Dialogs.h: * Dialogs.C: * guiapi.h: remove options from spell dialog - + 2002-07-30 John Levon * lyx_gui.h: add remove_read_callback() - + 2002-07-22 John Levon * lyx_gui.h: add exit() - + 2002-07-22 John Levon * Toolbar.h: * Toolbar.C: remove other unused code - + 2002-07-22 John Levon * Toolbar.h: * Toolbar.C: remove ->push() - + 2002-07-21 Jean-Marc Lasgouttes * LyXView.C: use BufferParams::getLyXTextClass @@ -96,10 +100,10 @@ 2002-07-21 John Levon * LyXView.C: move autosave connect here - + 2002-07-20 Jean-Marc Lasgouttes - * LyXView.C (updateMenubar): remove code to set different menubars + * LyXView.C (updateMenubar): remove code to set different menubars * Menubar.C (set): remove @@ -108,52 +112,52 @@ * LyXView.h: * LyXView.C: use ControlCommandBuffer, related cleanup - + * MiniBuffer.h: * MiniBuffer.C: remove - + 2002-07-18 John Levon * LyXView.h: * LyXView.C: * MiniBuffer.h: * MiniBuffer.C: remove messagePush/Pop, addSet - + 2002-07-17 John Levon * LyXView.h: * LyXView.C: change showState to view_state_changed signal - + 2002-07-14 John Levon * lyx_gui.h: add set_read_callback() - + 2002-07-12 John Levon * lyx_gui.h: remove init_graphics() - + 2002-07-12 John Levon * Toolbar.h: * Toolbar.C: remove unused (de)activate() - + 2002-07-12 John Levon * Makefile.am: * font_loader.h: remove - + * lyx_gui.h: add update_fonts(), font_available() - + 2002-07-12 John Levon * lyx_gui.h: add update_color - + 2002-07-09 John Levon * Painter.C: * Painter.h: make frame/background painting optional for rectText - + 2002-07-05 Angus Leeming * lyx_gui.h (hexname): new function. diff --git a/src/frontends/Dialogs.h b/src/frontends/Dialogs.h index 33d78ab8e0..056c04f8d3 100644 --- a/src/frontends/Dialogs.h +++ b/src/frontends/Dialogs.h @@ -168,10 +168,10 @@ public: //@} private: - /// Use the Pimpl idiom to hide the internals. - class Impl; - /// The pointer never changes although *pimpl_'s contents may. - boost::scoped_ptr const pimpl_; + /// Use the Pimpl idiom to hide the internals. + class Impl; + /// The pointer never changes although *pimpl_'s contents may. + boost::scoped_ptr const pimpl_; }; #endif diff --git a/src/paragraph.C b/src/paragraph.C index f63f2c1be0..6695bb3844 100644 --- a/src/paragraph.C +++ b/src/paragraph.C @@ -732,79 +732,6 @@ Paragraph const * Paragraph::previous() const #endif -void Paragraph::breakParagraph(BufferParams const & bparams, - pos_type pos, - int flag) -{ - // create a new paragraph - Paragraph * tmp = new Paragraph(this); - tmp->layout(bparams.getLyXTextClass().defaultLayout()); - // remember to set the inset_owner - tmp->setInsetOwner(inInset()); - - // this is an idea for a more userfriendly layout handling, I will - // see what the users say - - // layout stays the same with latex-environments - if (flag) { - tmp->layout(layout()); - tmp->setLabelWidthString(params().labelWidthString()); - } - - bool isempty = (layout()->keepempty && empty()); - - if (!isempty && (size() > pos || empty() || flag == 2)) { - tmp->layout(layout()); - tmp->params().align(params().align()); - tmp->setLabelWidthString(params().labelWidthString()); - - tmp->params().lineBottom(params().lineBottom()); - params().lineBottom(false); - tmp->params().pagebreakBottom(params().pagebreakBottom()); - params().pagebreakBottom(false); - tmp->params().spaceBottom(params().spaceBottom()); - params().spaceBottom(VSpace(VSpace::NONE)); - - tmp->params().depth(params().depth()); - tmp->params().noindent(params().noindent()); - - // copy everything behind the break-position - // to the new paragraph - pos_type pos_end = size() - 1; - pos_type i = pos; - pos_type j = pos; - for (; i <= pos_end; ++i) { - cutIntoMinibuffer(bparams, i); - if (tmp->insertFromMinibuffer(j - pos)) - ++j; - } - for (i = pos_end; i >= pos; --i) { - erase(i); - } - } - - // just an idea of me - if (!isempty && !pos) { - tmp->params().lineTop(params().lineTop()); - tmp->params().pagebreakTop(params().pagebreakTop()); - tmp->params().spaceTop(params().spaceTop()); - tmp->bibkey = bibkey; - - bibkey = 0; - params().clear(); - - layout(bparams.getLyXTextClass().defaultLayout()); - - // layout stays the same with latex-environments - if (flag) { - layout(tmp->layout()); - setLabelWidthString(tmp->params().labelWidthString()); - params().depth(tmp->params().depth()); - } - } -} - - void Paragraph::makeSameLayout(Paragraph const * par) { layout(par->layout()); @@ -838,35 +765,6 @@ bool Paragraph::hasSameLayout(Paragraph const * par) const } -void Paragraph::breakParagraphConservative(BufferParams const & bparams, - pos_type pos) -{ - // create a new paragraph - Paragraph * tmp = new Paragraph(this); - tmp->makeSameLayout(this); - - // When can pos > Last()? - // I guess pos == Last() is possible. - if (size() > pos) { - // copy everything behind the break-position to the new - // paragraph - pos_type pos_end = size() - 1; - - //pos_type i = pos; - //pos_type j = pos; - for (pos_type i = pos, j = pos; i <= pos_end; ++i) { - cutIntoMinibuffer(bparams, i); - if (tmp->insertFromMinibuffer(j - pos)) - ++j; - } - - for (pos_type k = pos_end; k >= pos; --k) { - erase(k); - } - } -} - - // Be carefull, this does not make any check at all. // This method has wrong name, it combined this par with the next par. // In that sense it is the reverse of break paragraph. (Lgb) diff --git a/src/paragraph.h b/src/paragraph.h index d17bcdd0ea..acca1ad1e8 100644 --- a/src/paragraph.h +++ b/src/paragraph.h @@ -226,11 +226,6 @@ public: void applyLayout(LyXLayout_ptr const & new_layout); /// void erase(lyx::pos_type pos); - /** the flag determines wether the layout should be copied - */ - void breakParagraph(BufferParams const &, lyx::pos_type pos, int flag); - /// - void breakParagraphConservative(BufferParams const &, lyx::pos_type pos); /** Get unistantiated font setting. Returns the difference between the characters font and the layoutfont. This is what is stored in the fonttable diff --git a/src/paragraph_funcs.C b/src/paragraph_funcs.C new file mode 100644 index 0000000000..a203bf2d1f --- /dev/null +++ b/src/paragraph_funcs.C @@ -0,0 +1,220 @@ +/* This file is part of + * ====================================================== + * + * LyX, The Document Processor + * + * Copyright 1995 Matthias Ettrich + * Copyright 1995-2001 The LyX Team. + * + * ====================================================== */ + +#include + +#include "paragraph_funcs.h" +#include "buffer.h" +#include "ParagraphParameters.h" +#include "lyxtextclasslist.h" +#include "debug.h" + +using lyx::pos_type; +//using lyx::layout_type; +using std::endl; + + +void breakParagraph(BufferParams const & bparams, + Paragraph * par, + pos_type pos, + int flag) +{ + // create a new paragraph + Paragraph * tmp = new Paragraph(par); + // remember to set the inset_owner + tmp->setInsetOwner(par->inInset()); + + // this is an idea for a more userfriendly layout handling, I will + // see what the users say + + // layout stays the same with latex-environments + if (flag) { + tmp->layout(par->layout()); + tmp->setLabelWidthString(par->params().labelWidthString()); + } + + bool isempty = (par->layout()->keepempty && par->empty()); + + if (!isempty && (par->size() > pos || par->empty() || flag == 2)) { + tmp->layout(par->layout()); + tmp->params().align(par->params().align()); + tmp->setLabelWidthString(par->params().labelWidthString()); + + tmp->params().lineBottom(par->params().lineBottom()); + par->params().lineBottom(false); + tmp->params().pagebreakBottom(par->params().pagebreakBottom()); + par->params().pagebreakBottom(false); + tmp->params().spaceBottom(par->params().spaceBottom()); + par->params().spaceBottom(VSpace(VSpace::NONE)); + + tmp->params().depth(par->params().depth()); + tmp->params().noindent(par->params().noindent()); + + // copy everything behind the break-position + // to the new paragraph + pos_type pos_end = par->size() - 1; + pos_type i = pos; + pos_type j = pos; + for (; i <= pos_end; ++i) { + par->cutIntoMinibuffer(bparams, i); + if (tmp->insertFromMinibuffer(j - pos)) + ++j; + } + for (i = pos_end; i >= pos; --i) { + par->erase(i); + } + } + + // just an idea of me + if (!pos) { + tmp->params().lineTop(par->params().lineTop()); + tmp->params().pagebreakTop(par->params().pagebreakTop()); + tmp->params().spaceTop(par->params().spaceTop()); + tmp->bibkey = par->bibkey; + + par->bibkey = 0; + par->params().clear(); + + par->layout(bparams.getLyXTextClass().defaultLayout()); + + // layout stays the same with latex-environments + if (flag) { + par->layout(tmp->layout()); + par->setLabelWidthString(tmp->params().labelWidthString()); + par->params().depth(tmp->params().depth()); + } + } +} + + +void breakParagraphConservative(BufferParams const & bparams, + Paragraph * par, + pos_type pos) +{ + // create a new paragraph + Paragraph * tmp = new Paragraph(par); + tmp->makeSameLayout(par); + + // When can pos > Last()? + // I guess pos == Last() is possible. + if (par->size() > pos) { + // copy everything behind the break-position to the new + // paragraph + pos_type pos_end = par->size() - 1; + + for (pos_type i = pos, j = pos; i <= pos_end; ++i) { + par->cutIntoMinibuffer(bparams, i); + if (tmp->insertFromMinibuffer(j - pos)) + ++j; + } + + for (pos_type k = pos_end; k >= pos; --k) { + par->erase(k); + } + } +} + + +#if 0 +// Be carefull, this does not make any check at all. +// This method has wrong name, it combined this par with the next par. +// In that sense it is the reverse of break paragraph. (Lgb) +void pasteParagraph(BufferParams const & bparams, + Paragraph * par) +{ + // copy the next paragraph to this one + Paragraph * the_next = par->next(); + + // first the DTP-stuff + par->params().lineBottom(the_next->params().lineBottom()); + par->params().spaceBottom(the_next->params().spaceBottom()); + par->params().pagebreakBottom(the_next->params().pagebreakBottom()); + + pos_type pos_end = the_next->size() - 1; + pos_type pos_insert = par->size(); + + // ok, now copy the paragraph + for (pos_type i = 0, j = 0; i <= pos_end; ++i) { + the_next->cutIntoMinibuffer(bparams, i); + if (par->insertFromMinibuffer(pos_insert + j)) + ++j; + } + + // delete the next paragraph + Paragraph * ppar = the_next->previous(); + Paragraph * npar = the_next->next(); + delete the_next; + ppar->next(npar); +} + + +Paragraph * depthHook(Paragraph * par, Paragraph::depth_type depth) +{ + Paragraph * newpar = par; + + do { + newpar = newpar->previous(); + } while (newpar && newpar->getDepth() > depth); + + if (!newpar) { + if (par->previous() || par->getDepth()) + lyxerr << "Error (depthHook): " + << "no hook." << endl; + newpar = par; + } + return newpar; +} + + +Paragraph * outerHook(Paragraph * par) +{ + if (!par->getDepth()) + return 0; + return depthHook(par, Paragraph::depth_type(par->getDepth() - 1)); +} + + +bool isFirstInSequence(Paragraph * par) +{ + Paragraph const * dhook = depthHook(par, par->getDepth()); + return (dhook == par + || dhook->getLayout() != par->getLayout() + || dhook->getDepth() != par->getDepth()); +} + + +int getEndLabel(Paragraph * para, BufferParams const & bparams) +{ + Paragraph * par = para; + while (par) { + Paragraph::depth_type par_depth = par->getDepth(); + layout_type layout = par->getLayout(); + int const endlabeltype = + textclasslist.Style(bparams.textclass, + layout).endlabeltype; + if (endlabeltype != END_LABEL_NO_LABEL) { + if (!para->next()) + return endlabeltype; + + Paragraph::depth_type const next_depth = + para->next()->getDepth(); + if (par_depth > next_depth || + (par_depth == next_depth + && layout != para->next()->getLayout())) + return endlabeltype; + break; + } + if (par_depth == 0) + break; + par = outerHook(par); + } + return END_LABEL_NO_LABEL; +} +#endif diff --git a/src/paragraph_funcs.h b/src/paragraph_funcs.h new file mode 100644 index 0000000000..5d2a051384 --- /dev/null +++ b/src/paragraph_funcs.h @@ -0,0 +1,54 @@ +// -*- C++ -*- +/* This file is part of + * ====================================================== + * + * LyX, The Document Processor + * + * Copyright 1995 Matthias Ettrich + * Copyright 1995-2001 The LyX Team. + * + * ====================================================== */ + +#ifndef PARAGRAPH_FUNCS_H +#define PARAGRAPH_FUNCS_H + +#include "ParagraphList.h" +#include "paragraph.h" + +#include "support/types.h" + +class BufferParams; + +/// +void breakParagraph(BufferParams const & bparams, + Paragraph *, + lyx::pos_type pos, + int flag); + +/// +void breakParagraphConservative(BufferParams const & bparams, + Paragraph *, + lyx::pos_type pos); + +#if 0 +/** Paste this paragraph with the next one. + Be carefull, this doesent make any check at all. +*/ +void pasteParagraph(BufferParams const & bparams, + Paragraph *); + + +/// for the environments +Paragraph * depthHook(Paragraph * par, Paragraph::depth_type depth); + +Paragraph * outerHook(Paragraph * par); + +/// Is it the first par with same depth and layout? +bool isFirstInSequence(Paragraph * par); + +/** Check if the current paragraph is the last paragraph in a + proof environment */ +int getEndLabel(Paragraph * para, BufferParams const & bparams); +#endif + +#endif diff --git a/src/text.C b/src/text.C index 4c822ea8b7..ed074c4330 100644 --- a/src/text.C +++ b/src/text.C @@ -31,6 +31,7 @@ #include "ParagraphParameters.h" #include "undo_funcs.h" #include "WordLangTuple.h" +#include "paragraph_funcs.h" #include "insets/insetbib.h" #include "insets/insettext.h" @@ -1758,8 +1759,8 @@ void LyXText::breakParagraph(BufferView * bview, char keep_layout) // paragraph before or behind and we should react on that one // but we can fix this in 1.3.0 (Jug 20020509) bool const isempty = (layout->keepempty && cursor.par()->empty()); - cursor.par()->breakParagraph(bview->buffer()->params, cursor.pos(), - keep_layout); + ::breakParagraph(bview->buffer()->params, cursor.par(), cursor.pos(), + keep_layout); // well this is the caption hack since one caption is really enough if (layout->labeltype == LABEL_SENSITIVE) { @@ -3948,4 +3949,3 @@ int LyXText::getDepth() const { return cursor.par()->getDepth(); } -