X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxparagraph.h;h=7852ca9dd5f6a111617ec412af1f86b1d93a311f;hb=245007468d0bb2aaa65dea4feab571b744dd9dec;hp=661d9a2bca87c4c0a5c51ad7cb7e8f6705a53277;hpb=1d7d3cc4afa2205c801ccc2aa71c7ac59359dc5f;p=lyx.git diff --git a/src/lyxparagraph.h b/src/lyxparagraph.h index 661d9a2bca..7852ca9dd5 100644 --- a/src/lyxparagraph.h +++ b/src/lyxparagraph.h @@ -5,7 +5,7 @@ * LyX, The Document Processor * * Copyright 1995 Matthias Ettrich - * Copyright 1995-1999 The LyX Team. + * Copyright 1995-2000 The LyX Team. * * ====================================================== */ @@ -16,25 +16,21 @@ #pragma interface #endif -//#define NEW_TABLE 1 - -#ifdef NEW_TABLE -#include -#endif - #include +#include #include "insets/lyxinset.h" -#include "insets/insetbib.h" #include "table.h" #include "vspace.h" #include "layout.h" #include "support/block.h" +#include "language.h" class BufferParams; class LyXBuffer; class TexRow; struct LaTeXFeatures; +class InsetBibKey; /// A LyXParagraph holds all text, attributes and insets in a text paragraph class LyXParagraph { @@ -80,7 +76,7 @@ public: /// META_NEWLINE, /// - META_PROTECTED_SEPARATOR, + //META_PROTECTED_SEPARATOR, /// META_INSET }; @@ -113,18 +109,36 @@ public: WIDE_TAB // CFO-G, 971106 }; + /// + typedef char value_type; + /// + typedef std::vector TextContainer; + /// + typedef int size_type; + /// LyXParagraph(); /// this konstruktor inserts the new paragraph in a list + explicit LyXParagraph(LyXParagraph * par); /// the destruktors removes the new paragraph from the list ~LyXParagraph(); /// - void writeFile(FILE *, BufferParams &, char, char); - + Language const * getParLanguage() const; /// - void validate(LaTeXFeatures &); + bool isRightToLeftPar() const; + /// + void ChangeLanguage(Language const * from, Language const * to); + /// + bool isMultiLingual(); + /// + string String(bool label); + + /// + void writeFile(std::ostream &, BufferParams const &, char, char) const; + /// + void validate(LaTeXFeatures &) const; /// int id() const { @@ -137,25 +151,24 @@ public: /// void read(); - - /// - void readSimpleWholeFile(FILE *); /// - LyXParagraph * TeXOnePar(string & file, TexRow & texrow, - string & foot, TexRow & foot_texrow, - int & foot_count); + LyXParagraph * TeXOnePar(std::ostream &, TexRow & texrow, + bool moving_arg, + std::ostream & foot, TexRow & foot_texrow, + int & foot_count); + /// + bool SimpleTeXOnePar(std::ostream &, TexRow & texrow, bool moving_arg); /// - LyXParagraph * TeXEnvironment(string & file, TexRow & texrow, - string & foot, TexRow & foot_texrow, - int & foot_count); - + LyXParagraph * TeXEnvironment(std::ostream &, TexRow & texrow, + std::ostream & foot, TexRow & foot_texrow, + int & foot_count); /// LyXParagraph * Clone() const; /// - bool HasSameLayout(LyXParagraph const * par); + bool HasSameLayout(LyXParagraph const * par) const; /// void MakeSameLayout(LyXParagraph const * par); @@ -168,22 +181,41 @@ public: || dhook->GetDepth() != GetDepth()); } - + /** Check if the current paragraph is the last paragraph in a + proof environment */ + int GetEndLabel() const; /// - typedef char value_type; - /// - typedef vector TextContainer; + Inset * InInset() { return inset_owner; } /// - typedef int size_type; + void SetInsetOwner(Inset * i) { inset_owner = i; } +private: /// TextContainer text; + /// + Inset * inset_owner; + +public: /// size_type size() const { return text.size(); } + /// + void fitToSize() { + text.resize(text.size()); + } + void setContentsFromPar(LyXParagraph * par) { + text = par->text; + } + void clearContents() { + text.clear(); + } + /// VSpace added_space_top; /// VSpace added_space_bottom; + + /// + Spacing spacing; /// LyXTextClass::LayoutList::size_type layout; @@ -295,6 +327,8 @@ public: LyXParagraph * PreviousBeforeFootnote(); /// LyXParagraph * LastPhysicalPar(); + /// + LyXParagraph const * LastPhysicalPar() const; /// LyXParagraph * FirstPhysicalPar(); @@ -313,7 +347,7 @@ public: /// int BeginningOfMainBody() const; /// - string GetLabestring() const; + string GetLabelstring() const; /// the next two functions are for the manual labels string GetLabelWidthString() const; @@ -345,6 +379,9 @@ public: This is what is stored in the fonttable */ LyXFont GetFontSettings(size_type pos) const; + /// + LyXFont GetFirstFontSettings() const; + /** Get fully instantiated font. If pos == -1, use the layout font attached to this paragraph. If pos == -2, use the label font of the layout attached here. @@ -357,6 +394,11 @@ public: char GetChar(size_type pos); /// char GetChar(size_type pos) const; + /// The position must already exist. + void SetChar(size_type pos, char c) { + text[pos] = c; + } + /// void SetFont(size_type pos, LyXFont const & font); /// @@ -369,12 +411,12 @@ public: /// void InsertInset(size_type pos, Inset * inset); /// + bool InsertInsetAllowed(Inset * inset); + /// Inset * GetInset(size_type pos); /// Inset const * GetInset(size_type pos) const; /// - Inset * ReturnNextInsetPointer(size_type & pos); - /// void OpenFootnote(size_type pos); /// void CloseFootnote(size_type pos); @@ -383,7 +425,7 @@ public: /// void CutIntoMinibuffer(size_type pos); /// - void InsertFromMinibuffer(size_type pos); + bool InsertFromMinibuffer(size_type pos); /// bool IsHfill(size_type pos) const; @@ -430,14 +472,14 @@ public: LyXParagraph * FirstSelfrowPar(); /// - int ClearParagraph(){ + int ClearParagraph() { int i = 0; if (!IsDummy() && !table){ while (Last() && (IsNewline(0) || IsLineSeparator(0))){ Erase(0); - i++; + ++i; } } return i; @@ -449,10 +491,7 @@ public: one (or more) paragraphs with the footnote, and finally the a paragraph with the text after the footnote. Only the first paragraph keeps information about layoutparameters, */ - bool IsDummy() const{ - return (footnoteflag == LyXParagraph::NO_FOOTNOTE && previous - && previous->footnoteflag != LyXParagraph::NO_FOOTNOTE); - } + bool IsDummy() const; /* If I set a PExtra Indent on one paragraph of a ENV_LIST-TYPE I have to set it on each of it's elements */ @@ -460,19 +499,46 @@ public: void SetPExtraType(int type, char const * width, char const * widthp); /// void UnsetPExtraType(); +#if 0 /// - bool RoffContTableRows(FILE * file, size_type i, - int actcell); - /// - void DocBookContTableRows(string & file, string & extra, int & desc_on, - size_type i, - int current_cell_number, int & column); + bool RoffContTableRows(std::ostream &, size_type i, int actcell); +#endif /// bool linuxDocConvertChar(char c, string & sgml_string); /// - void SimpleDocBookOneTablePar(string & file, string & extra, + void DocBookContTableRows(std::ostream &, string & extra, + int & desc_on, size_type i, + int current_cell_number, int & column); + /// + void SimpleDocBookOneTablePar(std::ostream &, string & extra, int & desc_on, int depth); private: + /// + struct InsetTable { + /// + size_type pos; + /// + Inset * inset; + /// + InsetTable(size_type p, Inset * i) { pos = p; inset = i;} + }; + /// + friend struct matchIT; + /// + struct matchIT { + /// used by lower_bound + inline + int operator()(LyXParagraph::InsetTable const & a, + LyXParagraph::size_type pos) const { + return a.pos < pos; + } + /// used by upper_bound + inline + int operator()(LyXParagraph::size_type pos, + LyXParagraph::InsetTable const & a) const { + return pos < a.pos; + } + }; /** A font entry covers a range of positions. Notice that the entries in the list are inserted in random order. I don't think it's worth the effort to implement a more effective @@ -494,60 +560,38 @@ private: allowed in these font tables. */ LyXFont font; -#ifndef NEW_TABLE - /// Pointer to next font entry - FontTable * next; -#endif }; /// - struct InsetTable { - /// - size_type pos; - /// - Inset * inset; -#ifndef NEW_TABLE - /// - InsetTable * next; -#endif - }; -#ifdef NEW_TABLE - /// - typedef list FontList; - /// - typedef list InsetList; + typedef std::list FontList; /// FontList fontlist; /// - InsetList insetlist; -#else + typedef std::vector InsetList; /// - FontTable * fonttable; - /// - InsetTable * insettable; -#endif - /// - LyXParagraph * TeXDeeper(string & file, TexRow & texrow, - string & foot, TexRow & foot_texrow, - int & foot_count); + InsetList insetlist; /// - LyXParagraph * TeXFootnote(string & file, TexRow & texrow, - string & foot, TexRow & foot_texrow, - int & foot_count); + LyXParagraph * TeXDeeper(std::ostream &, TexRow & texrow, + std::ostream & foot, TexRow & foot_texrow, + int & foot_count); /// - bool SimpleTeXOnePar(string & file, TexRow & texrow); + LyXParagraph * TeXFootnote(std::ostream &, TexRow & texrow, + std::ostream & foot, TexRow & foot_texrow, + int & foot_count, + bool parent_is_rtl); /// - bool SimpleTeXOneTablePar(string & file, TexRow & texrow); + bool SimpleTeXOneTablePar(std::ostream &, TexRow & texrow); /// - bool TeXContTableRows(string & file, size_type i, + bool TeXContTableRows(std::ostream &, size_type i, int current_cell_number, int & column, TexRow & texrow); /// - void SimpleTeXBlanks(string & file, TexRow & texrow, + void SimpleTeXBlanks(std::ostream &, TexRow & texrow, size_type const i, int & column, LyXFont const & font, LyXLayout const & style); /// - void SimpleTeXSpecialChars(string & file, TexRow & texrow, + void SimpleTeXSpecialChars(std::ostream &, TexRow & texrow, + bool moving_arg, LyXFont & font, LyXFont & running_font, LyXFont & basefont, bool & open_font, LyXLayout const & style, @@ -557,5 +601,37 @@ private: unsigned int id_; /// static unsigned int paragraph_id; +public: + class inset_iterator { + public: + inset_iterator() {} + inset_iterator(InsetList::iterator const & iter) : it(iter) {}; + inset_iterator & operator++() { + ++it; + return *this; + } + Inset * operator*() { return (*it).inset; } + size_type getPos() {return (*it).pos; } + bool operator==(inset_iterator const & iter) const { + return it == iter.it; + } + bool operator!=(inset_iterator const & iter) const { + return it != iter.it; + } + private: + InsetList::iterator it; + }; + /// + inset_iterator inset_iterator_begin() { + return inset_iterator(insetlist.begin()); + } + /// + inset_iterator inset_iterator_end() { + return inset_iterator(insetlist.end()); + } + /// + inset_iterator InsetIterator(size_type pos); + }; + #endif