X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FText.h;h=72f8b89902350ecbbc6efca746e98a8d0ff7b8c8;hb=fb12b282f1300123c7f4c7f10525c29cb598e1fe;hp=b542c36a15b5fec7ea81e487d81eb594ab26614b;hpb=87b112496c8befc87225f9a5171f4451e3502a4c;p=lyx.git diff --git a/src/Text.h b/src/Text.h index b542c36a15..72f8b89902 100644 --- a/src/Text.h +++ b/src/Text.h @@ -14,6 +14,7 @@ #ifndef TEXT_H #define TEXT_H +#include "DocIterator.h" #include "ParagraphList.h" namespace lyx { @@ -21,14 +22,15 @@ namespace lyx { class Buffer; class BufferParams; class BufferView; +class CompletionList; 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; @@ -47,9 +49,9 @@ public: bool empty() const; /// - Font getLayoutFont(Buffer const & buffer, pit_type pit) const; + FontInfo layoutFont(Buffer const & buffer, pit_type pit) const; /// - Font getLabelFont(Buffer const & buffer, + FontInfo labelFont(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, @@ -126,17 +128,19 @@ public: Paragraph & getPar(pit_type pit) { return pars_[pit]; } // Returns the current font and depth as a message. /// FIXME: replace Cursor with DocIterator. - docstring currentState(Cursor & cur); + docstring currentState(Cursor const & cur) const; /** Find the word under \c from in the relative location * defined by \c word_location. * @param from return here the start of the word * @param to return here the end of the word */ - void getWord(CursorSlice & from, CursorSlice & to, word_location const); + void getWord(CursorSlice & from, CursorSlice & to, word_location const) const; /// just selects the word the cursor is in void selectWord(Cursor & cur, word_location loc); - + /// convenience function get the previous word or an empty string + docstring previousWord(CursorSlice const & sl) const; + /// what type of change operation to make enum ChangeOp { ACCEPT, @@ -163,20 +167,36 @@ 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 cursorBackwardOneWord(Cursor & cur); /// - bool cursorLeftOneWord(Cursor & cur); + bool cursorForwardOneWord(Cursor & cur); /// - bool cursorRightOneWord(Cursor & cur); + bool cursorVisLeftOneWord(Cursor & cur); + /// + bool cursorVisRightOneWord(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. @@ -200,15 +220,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 @@ -243,17 +254,21 @@ public: double spacing(Buffer const & buffer, Paragraph const & par) const; /// make a suggestion for a label /// FIXME: replace Cursor with DocIterator. - docstring getPossibleLabel(Cursor & cur) const; + docstring getPossibleLabel(Cursor const & cur) const; /// is this paragraph right-to-left? bool isRTL(Buffer const &, Paragraph const & par) 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. @@ -266,6 +281,23 @@ public: /// from \first to \last paragraph void deleteEmptyParagraphMechanism(pit_type first, pit_type last, bool trackChanges); + /// 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; + /// + void setMacrocontextPosition(DocIterator const & pos); + + /// + bool completionSupported(Cursor const & cur) const; + /// + CompletionList const * createCompletionList(Cursor const & cur) const; + /// + bool insertCompletion(Cursor & cur, docstring const & s, bool /*finished*/); + /// + docstring completionPrefix(Cursor const & cur) const; + public: /// ParagraphList pars_; @@ -287,7 +319,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); @@ -296,8 +328,11 @@ 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 -#endif // LYXTEXT_H +#endif // TEXT_H