#include "vspace.h"
#include "layout.h"
#include "support/block.h"
-#include "direction.h"
#include "language.h"
class BufferParams;
class TexRow;
struct LaTeXFeatures;
class InsetBibKey;
+class BufferView;
/// A LyXParagraph holds all text, attributes and insets in a text paragraph
class LyXParagraph {
///
MINIPAGE_ALIGN_BOTTOM
};
+#ifndef NEW_INSETS
///
enum META_KIND {
///
///
WIDE_TAB // CFO-G, 971106
};
-
+#endif
///
typedef char value_type;
///
~LyXParagraph();
///
- Language const * getParLanguage() const;
+ Language const * getParLanguage(BufferParams const &) const;
///
- Language const * getLetterLanguage(size_type pos) const;
-
+ bool isRightToLeftPar(BufferParams const &) const;
///
- LyXDirection getParDirection() const;
+ void ChangeLanguage(BufferParams const & bparams,
+ Language const * from, Language const * to);
+ ///
+ bool isMultiLingual(BufferParams const &);
+ ///
+
+ string String(Buffer const *, bool label);
///
- LyXDirection getLetterDirection(size_type pos) const;
+ 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(std::ostream &, TexRow & texrow,
+ LyXParagraph * TeXOnePar(Buffer const *, BufferParams const &,
+ std::ostream &, TexRow & texrow,
+ bool moving_arg,
std::ostream & foot, TexRow & foot_texrow,
int & foot_count);
///
- bool SimpleTeXOnePar(std::ostream &, TexRow & texrow);
+ bool SimpleTeXOnePar(Buffer const *, BufferParams const &,
+ std::ostream &, TexRow & texrow, bool moving_arg);
///
- LyXParagraph * TeXEnvironment(std::ostream &, TexRow & texrow,
+ LyXParagraph * TeXEnvironment(Buffer const *, BufferParams const &,
+ std::ostream &, TexRow & texrow,
std::ostream & foot, TexRow & foot_texrow,
int & foot_count);
///
/** Check if the current paragraph is the last paragraph in a
proof environment */
- int GetEndLabel() const;
-
+ int GetEndLabel(BufferParams const &) 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();
}
///
VSpace added_space_bottom;
+
+ ///
+ Spacing spacing;
///
LyXTextClass::LayoutList::size_type layout;
-
+#ifndef NEW_INSETS
/**
\begin{itemize}
\item no footnote, closed footnote,
/// footnote, margin, fig, tab
footnote_kind footnotekind;
-
+#endif
//@Man: the LyX- DTP-switches
//@{
///
///
char GetDepth() const;
///
- void SetLayout(LyXTextClass::LayoutList::size_type new_layout);
+ void SetLayout(BufferParams const &,
+ LyXTextClass::LayoutList::size_type new_layout);
///
- void SetOnlyLayout(LyXTextClass::LayoutList::size_type new_layout);
+ void SetOnlyLayout(BufferParams const &,
+ LyXTextClass::LayoutList::size_type new_layout);
///
int GetFirstCounter(int i) const;
///
void Erase(size_type pos);
/** the flag determines wether the layout should be copied
*/
- void BreakParagraph(size_type pos, int flag);
+ void BreakParagraph(BufferParams const &, size_type pos, int flag);
///
- void BreakParagraphConservative(size_type pos);
+ void BreakParagraphConservative(BufferParams const &, size_type pos);
/** Get unistantiated font setting. Returns the difference
between the characters font and the layoutfont.
This is what is stored in the fonttable
*/
- LyXFont GetFontSettings(size_type pos) const;
+ LyXFont GetFontSettings(BufferParams const &, size_type pos) const;
///
LyXFont GetFirstFontSettings() const;
attributes with values LyXFont::INHERIT, LyXFont::IGNORE or
LyXFont::TOGGLE.
*/
- LyXFont getFont(size_type pos) const;
+ LyXFont getFont(BufferParams const &, size_type pos) const;
///
- char GetChar(size_type pos);
+ value_type 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;
///
- Inset * ReturnNextInsetPointer(size_type & pos);
- ///
void OpenFootnote(size_type pos);
///
void CloseFootnote(size_type pos);
/// important for cut and paste
- void CopyIntoMinibuffer(size_type pos) const;
+ void CopyIntoMinibuffer(BufferParams const &, size_type pos) const;
///
- void CutIntoMinibuffer(size_type pos);
+ void CutIntoMinibuffer(BufferParams const &, size_type pos);
///
bool InsertFromMinibuffer(size_type pos);
/** paste this paragraph with the next one
be carefull, this doesent make any check at all
*/
- void PasteParagraph();
+ void PasteParagraph(BufferParams const &);
/// used to remove the error messages
int AutoDeleteInsets();
LyXParagraph * FirstSelfrowPar();
///
- int ClearParagraph() {
- int i = 0;
- if (!IsDummy() && !table){
- while (Last()
- && (IsNewline(0)
- || IsLineSeparator(0))){
- Erase(0);
- ++i;
- }
- }
- return i;
- }
+ int StripLeadingSpaces(LyXTextClassList::size_type tclass);
/** A paragraph following a footnote is a "dummy". A paragraph
with a footnote in it is stored as three paragraphs:
/* 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 SetPExtraType(BufferParams const &,
+ int type, char const * width, char const * widthp);
///
- void UnsetPExtraType();
-#if 0
- ///
- bool RoffContTableRows(std::ostream &, size_type i, int actcell);
-#endif
+ void UnsetPExtraType(BufferParams const &);
///
bool linuxDocConvertChar(char c, string & sgml_string);
///
- void DocBookContTableRows(std::ostream &, string & extra,
+ void DocBookContTableRows(Buffer const *,
+ std::ostream &, string & extra,
int & desc_on, size_type i,
int current_cell_number, int & column);
///
- void SimpleDocBookOneTablePar(std::ostream &, string & extra,
+ void SimpleDocBookOneTablePar(Buffer const *,
+ std::ostream &, string & extra,
int & desc_on, int depth);
+private:
///
struct InsetTable {
///
///
InsetTable(size_type p, Inset * i) { pos = p; inset = i;}
};
-private:
+ ///
+ friend struct matchIT;
+ ///
+ struct matchIT {
+ /// used by lower_bound and upper_bound
+ inline
+ int operator()(LyXParagraph::InsetTable const & a,
+ LyXParagraph::InsetTable const & b) const {
+ return a.pos < b.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
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(std::ostream &, TexRow & texrow,
+ LyXParagraph * TeXDeeper(Buffer const *, BufferParams const &,
+ std::ostream &, TexRow & texrow,
std::ostream & foot, TexRow & foot_texrow,
int & foot_count);
///
- LyXParagraph * TeXFootnote(std::ostream &, TexRow & texrow,
+ LyXParagraph * TeXFootnote(Buffer const *, BufferParams const &,
+ std::ostream &, TexRow & texrow,
std::ostream & foot, TexRow & foot_texrow,
int & foot_count,
- LyXDirection par_direction);
+ bool parent_is_rtl);
///
- bool SimpleTeXOneTablePar(std::ostream &, TexRow & texrow);
+ bool SimpleTeXOneTablePar(Buffer const *, BufferParams const &,
+ std::ostream &, TexRow & texrow);
///
- bool TeXContTableRows(std::ostream &, size_type i,
+ bool TeXContTableRows(Buffer const *, BufferParams const &,
+ std::ostream &, size_type i,
int current_cell_number,
int & column, TexRow & texrow);
///
int & column, LyXFont const & font,
LyXLayout const & style);
///
- void SimpleTeXSpecialChars(std::ostream &, TexRow & texrow,
+ 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,
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);
};
-inline bool operator<(LyXParagraph::InsetTable const & a,
- LyXParagraph::InsetTable const & b)
-{
- return a.pos < b.pos;
-}
-
#endif