#ifndef TEXT_H
#define TEXT_H
+#include "DocIterator.h"
#include "ParagraphList.h"
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;
class Spacing;
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,
Font const & font, bool toggleall = false);
/// what you expect when pressing \<enter\> 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,
* @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,
///
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.
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
///
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.
/// 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_;
/// 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);
/// \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