class TexRow;
struct LaTeXFeatures;
class InsetBibKey;
+class BufferView;
+
+// I dare you to enable this and help me find all the bugs that then show
+// up. (Lgb)
+//#define NEW_INSETS 1
+
+// I dare you to try this one too. It is ortogonal with NEW_INSETS so you
+// can try both or just one of them.
+#define NEW_TABULAR 1
/// A LyXParagraph holds all text, attributes and insets in a text paragraph
class LyXParagraph {
};
///
enum META_KIND {
+#ifndef NEW_INSETS
///
META_FOOTNOTE = 1,
///
META_WIDE_TAB,
///
META_HFILL,
+#else
///
- META_NEWLINE,
+ META_HFILL = 1,
+#endif
///
+ META_NEWLINE,
+ //
//META_PROTECTED_SEPARATOR,
///
META_INSET
};
+#ifndef NEW_INSETS
/// The footnoteflag
enum footnote_flag {
///
WIDE_TAB // CFO-G, 971106
};
-
+#endif
///
typedef char value_type;
///
bool isMultiLingual(BufferParams const &);
///
- string String(BufferParams const &, bool label);
+ string String(Buffer const *, bool label);
///
- string String(size_type beg, size_type end);
+ string String(Buffer const *, size_type beg, size_type end);
///
- void writeFile(std::ostream &, BufferParams const &, char, char) const;
+ void writeFile(Buffer const *, std::ostream &, BufferParams const &,
+ char, char) const;
///
void validate(LaTeXFeatures &) const;
void read();
///
- LyXParagraph * TeXOnePar(BufferParams const &,
+ LyXParagraph * TeXOnePar(Buffer const *, BufferParams const &,
std::ostream &, TexRow & texrow,
- bool moving_arg,
+ bool moving_arg
+#ifndef NEW_INSETS
+ ,
std::ostream & foot, TexRow & foot_texrow,
- int & foot_count);
+ int & foot_count
+#endif
+ );
///
- bool SimpleTeXOnePar(BufferParams const &,
+ bool SimpleTeXOnePar(Buffer const *, BufferParams const &,
std::ostream &, TexRow & texrow, bool moving_arg);
///
- LyXParagraph * TeXEnvironment(BufferParams const &,
- std::ostream &, TexRow & texrow,
- std::ostream & foot, TexRow & foot_texrow,
- int & foot_count);
+ LyXParagraph * TeXEnvironment(Buffer const *, BufferParams const &,
+ std::ostream &, TexRow & texrow
+#ifndef NEW_INSETS
+ ,std::ostream & foot, TexRow & foot_texrow,
+ int & foot_count
+#endif
+ );
///
LyXParagraph * Clone() const;
///
Inset * InInset() { return inset_owner; }
///
- void SetInsetOwner(Inset * i) { inset_owner = i; }
+ void SetInsetOwner(Inset * i);
+ ///
+ void deleteInsetsLyXText(BufferView *);
+ ///
+ void resizeInsetsLyXText(BufferView *);
private:
///
TextContainer text;
void fitToSize() {
text.resize(text.size());
}
+ ///
void setContentsFromPar(LyXParagraph * par) {
text = par->text;
}
+ ///
void clearContents() {
text.clear();
}
///
LyXTextClass::LayoutList::size_type layout;
-
+#ifndef NEW_INSETS
/**
\begin{itemize}
\item no footnote, closed footnote,
/// footnote, margin, fig, tab
footnote_kind footnotekind;
-
- //@Man: the LyX- DTP-switches
- //@{
+#endif
///
bool line_top;
bool noindent;
private:
+ ///
block<int, 10> counter_;
public:
///
void setCounter(int i, int v) { counter_[i] = v; }
+ ///
int getCounter(int i) const { return counter_[i]; }
+ ///
void incCounter(int i) { counter_[i]++; }
///
bool start_of_appendix;
///
string labelwidthstring;
- //@}
///
LyXParagraph * next;
///
LyXParagraph * previous;
+#ifndef NEW_TABULAR
/* table stuff -- begin*/
///
LyXTable * table;
/* table stuff -- end*/
-
+#endif
///
InsetBibKey * bibkey; // ale970302
///
LyXParagraph const * Previous() const;
+#ifndef NEW_INSETS
/** these function are able to hide open and closed footnotes
*/
LyXParagraph * NextAfterFootnote();
LyXParagraph * FirstPhysicalPar();
///
LyXParagraph const * FirstPhysicalPar() const;
-
/// returns the physical paragraph
LyXParagraph * ParFromPos(size_type pos);
/// returns the position in the physical par
int PositionInParFromPos(size_type pos) const;
+#endif
/// for the environments
LyXParagraph * DepthHook(int depth);
///
int BeginningOfMainBody() const;
///
- string GetLabelstring() const;
+ string const & GetLabelstring() const;
/// the next two functions are for the manual labels
string GetLabelWidthString() 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.
- In all cases, the font is instantiated, i.e. does not have any
- attributes with values LyXFont::INHERIT, LyXFont::IGNORE or
- LyXFont::TOGGLE.
- */
+ font attached to this paragraph.
+ If pos == -2, use the label font of the layout attached here.
+ In all cases, the font is instantiated, i.e. does not have any
+ attributes with values LyXFont::INHERIT, LyXFont::IGNORE or
+ LyXFont::TOGGLE.
+ */
LyXFont getFont(BufferParams const &, size_type pos) const;
///
- char GetChar(size_type pos);
- ///
- char GetChar(size_type pos) const;
+ value_type GetChar(size_type pos) const;
/// The position must already exist.
- void SetChar(size_type pos, char c) {
+ void SetChar(size_type pos, value_type c) {
text[pos] = c;
}
LyXFont::FONT_SIZE HighestFontInRange(size_type startpos,
size_type endpos) const;
///
- void InsertChar(size_type pos, char c);
+ void InsertChar(size_type pos, value_type c);
+ ///
+ void InsertChar(size_type pos, value_type c, LyXFont const &);
///
void InsertInset(size_type pos, Inset * inset);
///
+ void InsertInset(size_type pos, Inset * inset, LyXFont const &);
+ ///
bool InsertInsetAllowed(Inset * inset);
///
Inset * GetInset(size_type pos);
///
Inset const * GetInset(size_type pos) const;
+#ifndef NEW_INSETS
///
void OpenFootnote(size_type pos);
///
void CloseFootnote(size_type pos);
+#endif
/// important for cut and paste
void CopyIntoMinibuffer(BufferParams const &, size_type pos) const;
///
bool IsHfill(size_type pos) const;
///
bool IsInset(size_type pos) const;
+#ifndef NEW_INSETS
///
bool IsFloat(size_type pos) const;
+#endif
///
bool IsNewline(size_type pos) const;
///
/// returns -1 if inset not found
int GetPositionOfInset(Inset * inset) const;
-
+
+#ifndef NEW_INSETS
/// ok and now some footnote functions
void OpenFootnotes();
///
void CloseFootnotes();
-
///
LyXParagraph * FirstSelfrowPar();
+#endif
///
int StripLeadingSpaces(LyXTextClassList::size_type tclass);
-
+
+#ifndef NEW_INSETS
/** A paragraph following a footnote is a "dummy". A paragraph
- with a footnote in it is stored as three paragraphs:
- First a paragraph with the text up to the footnote, then
- 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, */
+ with a footnote in it is stored as three paragraphs:
+ First a paragraph with the text up to the footnote, then
+ 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;
-
+#endif
/* 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 */
///
int type, char const * width, char const * widthp);
///
void UnsetPExtraType(BufferParams const &);
-#if 0
- ///
- bool RoffContTableRows(std::ostream &, size_type i, int actcell);
-#endif
///
bool linuxDocConvertChar(char c, string & sgml_string);
+#ifndef NEW_TABULAR
///
- void DocBookContTableRows(BufferParams const &,
+ void DocBookContTableRows(Buffer const *,
std::ostream &, string & extra,
int & desc_on, size_type i,
int current_cell_number, int & column);
///
- void SimpleDocBookOneTablePar(BufferParams const &,
+ void SimpleDocBookOneTablePar(Buffer const *,
std::ostream &, string & extra,
int & desc_on, int depth);
+#endif
private:
///
struct InsetTable {
friend struct matchIT;
///
struct matchIT {
- /// used by lower_bound
+ /// used by lower_bound and upper_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;
+ LyXParagraph::InsetTable const & b) const {
+ return a.pos < b.pos;
}
};
/** A font entry covers a range of positions. Notice that the
I don't think it's worth the effort to implement a more effective
datastructure, because the number of different fonts in a paragraph
is limited. (Asger)
+ Nevertheless, I decided to store fontlist using a sorted vector:
+ fontlist = { {pos_1,font_1} , {pos_2,font_2} , ... } where
+ pos_1 < pos_2 < ..., font_{i-1} != font_i for all i,
+ and font_i covers the chars in positions pos_{i-1}+1,...,pos_i
+ (font_1 covers the chars 0,...,pos_1) (Dekel)
*/
struct FontTable {
- /// Start position of paragraph this font attribute covers
+ /// End position of paragraph this font attribute covers
size_type pos;
- /// Ending position of paragraph this font attribute covers
- size_type pos_end;
/** Font. Interpretation of the font values:
If a value is LyXFont::INHERIT_*, it means that the font
attribute is inherited from either the layout of this
allowed in these font tables.
*/
LyXFont font;
+ ///
+ FontTable(size_type p, LyXFont const & f) {pos = p; font = f;}
+ };
+ ///
+ friend struct matchFT;
+ ///
+ struct matchFT {
+ /// used by lower_bound and upper_bound
+ inline
+ int operator()(LyXParagraph::FontTable const & a,
+ LyXParagraph::FontTable const & b) const {
+ return a.pos < b.pos;
+ }
};
+
///
- typedef std::list<FontTable> FontList;
+ typedef std::vector<FontTable> FontList;
///
FontList fontlist;
///
///
InsetList insetlist;
///
- LyXParagraph * TeXDeeper(BufferParams const &,
- std::ostream &, TexRow & texrow,
- std::ostream & foot, TexRow & foot_texrow,
- int & foot_count);
+ LyXParagraph * TeXDeeper(Buffer const *, BufferParams const &,
+ std::ostream &, TexRow & texrow
+#ifndef NEW_INSETS
+ ,std::ostream & foot, TexRow & foot_texrow,
+ int & foot_count
+#endif
+ );
+#ifndef NEW_INSETS
///
- LyXParagraph * TeXFootnote(BufferParams const &,
+ LyXParagraph * TeXFootnote(Buffer const *, BufferParams const &,
std::ostream &, TexRow & texrow,
std::ostream & foot, TexRow & foot_texrow,
int & foot_count,
bool parent_is_rtl);
+#endif
+#ifndef NEW_TABULAR
///
- bool SimpleTeXOneTablePar(BufferParams const &,
+ bool SimpleTeXOneTablePar(Buffer const *, BufferParams const &,
std::ostream &, TexRow & texrow);
///
- bool TeXContTableRows(BufferParams const &,
+ bool TeXContTableRows(Buffer const *, BufferParams const &,
std::ostream &, size_type i,
int current_cell_number,
int & column, TexRow & texrow);
+#endif
///
void SimpleTeXBlanks(std::ostream &, TexRow & texrow,
size_type const i,
int & column, LyXFont const & font,
LyXLayout const & style);
///
- void SimpleTeXSpecialChars(BufferParams const &,
+ void SimpleTeXSpecialChars(Buffer const *, BufferParams const &,
std::ostream &, TexRow & texrow,
bool moving_arg,
LyXFont & font, LyXFont & running_font,
LyXFont & basefont, bool & open_font,
LyXLayout const & style,
size_type & i,
- int & column, char const c);
+ int & column, value_type const c);
///
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 InsetIterator(size_type pos);
-
};
#endif