X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FText.h;h=0f8ba1c7f0a7bc1edbd3f99f72fe82dd8dd117c6;hb=1ab314f8e6e145dc73d0a26b7e82a280b497ea3c;hp=766229dce9055ab65187863d1ca239f9bdc68c0f;hpb=070a7fc290317f1a413625f6058baaff52309e6f;p=lyx.git diff --git a/src/Text.h b/src/Text.h index 766229dce9..0f8ba1c7f0 100644 --- a/src/Text.h +++ b/src/Text.h @@ -14,16 +14,9 @@ #ifndef TEXT_H #define TEXT_H -#include "Bidi.h" -#include "DispatchResult.h" -#include "Font.h" -#include "Layout.h" -#include "lyxlayout_ptr_fwd.h" +#include "DocIterator.h" #include "ParagraphList.h" -#include - - namespace lyx { class Buffer; @@ -32,11 +25,13 @@ class BufferView; class CursorSlice; class DocIterator; class ErrorList; +class Font; +class FontInfo; class FuncRequest; class FuncStatus; class Inset; -class Color_color; class Cursor; +class Lexer; class PainterInfo; class Spacing; @@ -53,21 +48,16 @@ public: bool empty() const; /// - Font getFont(Buffer const & buffer, Paragraph const & par, - pos_type pos) const; - /// - void applyOuterFont(Buffer const & buffer, Font &) const; + FontInfo getLayoutFont(Buffer const & buffer, pit_type pit) const; /// - Font getLayoutFont(Buffer const & buffer, pit_type pit) const; - /// - Font getLabelFont(Buffer const & buffer, + FontInfo getLabelFont(Buffer const & buffer, Paragraph const & par) const; /** Set font of character at position \p pos in paragraph \p pit. * Must not be called if \p pos denotes an inset with text contents, * and the inset is not allowed inside a font change (see below). */ void setCharFont(Buffer const & buffer, pit_type pit, pos_type pos, - Font const & font); + Font const & font, Font const & display_font); /** Needed to propagate font changes to all text cells of insets * that are not allowed inside a font change (bug 1973). @@ -76,11 +66,11 @@ public: * FIXME: This should be removed, see documentation of noFontChange * in insetbase.h */ - void setInsetFont(Buffer const & buffer, pit_type pit, pos_type pos, + void setInsetFont(BufferView const & bv, pit_type pit, pos_type pos, Font const & font, bool toggleall = false); /// what you expect when pressing \ at cursor position - void breakParagraph(Cursor & cur, bool keep_layout = false); + void breakParagraph(Cursor & cur, bool inverse_logic = false); /// set layout over selection void setLayout(Buffer const & buffer, pit_type start, pit_type end, @@ -106,7 +96,7 @@ public: /// FIXME: replace Cursor with DocIterator. void setFont(Cursor & cur, Font const &, bool toggleall = false); /// Set font from \p begin to \p end and rebreak. - void setFont(Buffer const & buffer, CursorSlice const & begin, + void setFont(BufferView const & bv, CursorSlice const & begin, CursorSlice const & end, Font const &, bool toggleall = false); @@ -174,20 +164,32 @@ public: /// void recUndo(Cursor & cur, pit_type first) const; - /// Move cursor one position left + /// Move cursor one position backwards + /** + * Returns true if an update is needed after the move. + */ + bool cursorBackward(Cursor & cur); + /// Move cursor visually one position to the left + /** + * \param skip_inset if true, don't enter insets + * Returns true if an update is needed after the move. + */ + bool cursorVisLeft(Cursor & cur, bool skip_inset = false); + /// Move cursor one position forward /** * Returns true if an update is needed after the move. */ - bool cursorLeft(Cursor & cur); - /// Move cursor one position right + bool cursorForward(Cursor & cur); + /// Move cursor visually one position to the right /** + * \param skip_inset if true, don't enter insets * Returns true if an update is needed after the move. */ - bool cursorRight(Cursor & cur); + bool cursorVisRight(Cursor & cur, bool skip_inset = false); /// - bool cursorLeftOneWord(Cursor & cur); + bool cursorBackwardOneWord(Cursor & cur); /// - bool cursorRightOneWord(Cursor & cur); + bool cursorForwardOneWord(Cursor & cur); /// Delete from cursor up to the end of the current or next word. void deleteWordForward(Cursor & cur); /// Delete from cursor to start of current or prior word. @@ -211,15 +213,6 @@ public: bool dissolveInset(Cursor & cur); /// bool selectWordWhenUnderCursor(Cursor & cur, word_location); - /// - enum TextCase { - /// - text_lowercase = 0, - /// - text_capitalization = 1, - /// - text_uppercase = 2 - }; /// Change the case of the word at cursor position. void changeCase(Cursor & cur, TextCase action); /// Transposes the character at the cursor with the one before it @@ -244,9 +237,6 @@ public: /// FIXME: replace Cursor with DocIterator. void insertStringAsParagraphs(Cursor & cur, docstring const & str); - /// return the color of the canvas - Color_color backgroundColor() const; - /// access to our paragraphs ParagraphList const & paragraphs() const { return pars_; } ParagraphList & paragraphs() { return pars_; } @@ -260,22 +250,18 @@ public: docstring getPossibleLabel(Cursor & cur) const; /// is this paragraph right-to-left? bool isRTL(Buffer const &, Paragraph const & par) const; - /// is this position in the paragraph right-to-left? - bool isRTL(Buffer const & buffer, CursorSlice const & sl, bool boundary) const; - /// is between pos-1 and pos an RTL<->LTR boundary? - bool isRTLBoundary(Buffer const & buffer, Paragraph const & par, - pos_type pos) const; - /// would be a RTL<->LTR boundary between pos and the given font? - bool isRTLBoundary(Buffer const & buffer, Paragraph const & par, - pos_type pos, Font const & font) const; /// bool checkAndActivateInset(Cursor & cur, bool front); + /// + bool checkAndActivateInsetVisual(Cursor & cur, bool movingForward, bool movingLeft); /// void write(Buffer const & buf, std::ostream & os) const; /// returns whether we've seen our usual 'end' marker - bool read(Buffer const & buf, Lexer & lex, ErrorList & errorList); + /// insetPtr is the containing Inset + bool read(Buffer const & buf, Lexer & lex, ErrorList & errorList, + InsetText * insetPtr); /// delete double spaces, leading spaces, and empty paragraphs around old cursor. /// \retval true if a change has happened and we need a redraw. @@ -288,21 +274,18 @@ public: /// from \first to \last paragraph void deleteEmptyParagraphMechanism(pit_type first, pit_type last, bool trackChanges); -public: + /// To resolve macros properly the texts get their DocIterator. + /// Every macro definition is stored with its DocIterator + /// as well. Only those macros with a smaller iterator become + /// visible in a paragraph. + DocIterator macrocontextPosition() const; /// - int background_color_; + void setMacrocontextPosition(DocIterator const & pos); +public: /// ParagraphList pars_; - /// FIXME: this font_ member has nothing to do here! - /// It is used in applyOuterFont() and setCharFont() for reasons - /// that are not clear... to hand hand the outermost language and - /// also for char style apparently. - /// our 'outermost' font. This is handed down from the surrounding - /// inset through the pi/mi parameter (pi.base.font) - Font font_; - /// bool autoBreakRows_; private: @@ -320,7 +303,7 @@ private: /// handle the case where bibitems were deleted bool handleBibitems(Cursor & cur); /// - void charInserted(); + void charInserted(Cursor & cur); /// set 'number' font property void number(Cursor & cur); @@ -329,6 +312,9 @@ private: /// \param asParagraphs whether to paste as paragraphs or as lines void pasteString(Cursor & cur, docstring const & str, bool asParagraphs); + + /// position of the text in the buffer. + DocIterator macrocontext_position_; }; } // namespace lyx