* LyX, The Document Processor
*
* Copyright 1995 Matthias Ettrich
- * Copyright 1995-1999 The LyX Team.
+ * Copyright 1995-2000 The LyX Team.
*
* ====================================================== */
#pragma interface
#endif
-//#define NEW_TABLE 1
-
-#ifdef NEW_TABLE
-#include <list>
-#endif
-
#include <vector>
+#include <list>
#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 {
///
META_NEWLINE,
///
- META_PROTECTED_SEPARATOR,
+ //META_PROTECTED_SEPARATOR,
///
META_INSET
};
WIDE_TAB // CFO-G, 971106
};
+ ///
+ typedef char value_type;
+ ///
+ typedef std::vector<value_type> 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 {
///
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);
|| 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<value_type> 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;
LyXParagraph * PreviousBeforeFootnote();
///
LyXParagraph * LastPhysicalPar();
+ ///
+ LyXParagraph const * LastPhysicalPar() const;
///
LyXParagraph * FirstPhysicalPar();
///
int BeginningOfMainBody() const;
///
- string GetLabestring() const;
+ string GetLabelstring() const;
/// the next two functions are for the manual labels
string GetLabelWidthString() const;
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.
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);
///
///
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);
///
void CutIntoMinibuffer(size_type pos);
///
- void InsertFromMinibuffer(size_type pos);
+ bool InsertFromMinibuffer(size_type pos);
///
bool IsHfill(size_type pos) const;
LyXParagraph * FirstSelfrowPar();
///
- int ClearParagraph(){
+ int ClearParagraph() {
int i = 0;
if (!IsDummy() && !table){
while (Last()
&& (IsNewline(0)
|| IsLineSeparator(0))){
Erase(0);
- i++;
+ ++i;
}
}
return i;
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 */
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
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<FontTable> FontList;
- ///
- typedef list<InsetTable> InsetList;
+ typedef std::list<FontTable> FontList;
///
FontList fontlist;
///
- InsetList insetlist;
-#else
+ typedef std::vector<InsetTable> 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,
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