aboutsummaryrefslogtreecommitdiff
path: root/3rdparty/imguicolortextedit/TextEditor.h
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2023-12-19 13:45:15 -0800
committerrtk0c <[email protected]>2025-08-16 11:34:30 -0700
commit92a688093c801ac2b8cc9b74a42b5c850c8dd18e (patch)
tree75e5cbd31d9715da2701d3cc3a10fda8c173df9b /3rdparty/imguicolortextedit/TextEditor.h
parent981020878ac3ef514525bef0a777bc43b86f0923 (diff)
Run dos2unix
Diffstat (limited to '3rdparty/imguicolortextedit/TextEditor.h')
-rw-r--r--3rdparty/imguicolortextedit/TextEditor.h778
1 files changed, 389 insertions, 389 deletions
diff --git a/3rdparty/imguicolortextedit/TextEditor.h b/3rdparty/imguicolortextedit/TextEditor.h
index bd52e13..abaa010 100644
--- a/3rdparty/imguicolortextedit/TextEditor.h
+++ b/3rdparty/imguicolortextedit/TextEditor.h
@@ -1,389 +1,389 @@
-#pragma once
-
-#include <string>
-#include <vector>
-#include <array>
-#include <memory>
-#include <unordered_set>
-#include <unordered_map>
-#include <map>
-#include <regex>
-#include "imgui.h"
-
-class TextEditor
-{
-public:
- enum class PaletteIndex
- {
- Default,
- Keyword,
- Number,
- String,
- CharLiteral,
- Punctuation,
- Preprocessor,
- Identifier,
- KnownIdentifier,
- PreprocIdentifier,
- Comment,
- MultiLineComment,
- Background,
- Cursor,
- Selection,
- ErrorMarker,
- Breakpoint,
- LineNumber,
- CurrentLineFill,
- CurrentLineFillInactive,
- CurrentLineEdge,
- Max
- };
-
- enum class SelectionMode
- {
- Normal,
- Word,
- Line
- };
-
- struct Breakpoint
- {
- int mLine;
- bool mEnabled;
- std::string mCondition;
-
- Breakpoint()
- : mLine(-1)
- , mEnabled(false)
- {}
- };
-
- // Represents a character coordinate from the user's point of view,
- // i. e. consider an uniform grid (assuming fixed-width font) on the
- // screen as it is rendered, and each cell has its own coordinate, starting from 0.
- // Tabs are counted as [1..mTabSize] count empty spaces, depending on
- // how many space is necessary to reach the next tab stop.
- // For example, coordinate (1, 5) represents the character 'B' in a line "\tABC", when mTabSize = 4,
- // because it is rendered as " ABC" on the screen.
- struct Coordinates
- {
- int mLine, mColumn;
- Coordinates() : mLine(0), mColumn(0) {}
- Coordinates(int aLine, int aColumn) : mLine(aLine), mColumn(aColumn)
- {
- assert(aLine >= 0);
- assert(aColumn >= 0);
- }
- static Coordinates Invalid() { static Coordinates invalid(-1, -1); return invalid; }
-
- bool operator ==(const Coordinates& o) const
- {
- return
- mLine == o.mLine &&
- mColumn == o.mColumn;
- }
-
- bool operator !=(const Coordinates& o) const
- {
- return
- mLine != o.mLine ||
- mColumn != o.mColumn;
- }
-
- bool operator <(const Coordinates& o) const
- {
- if (mLine != o.mLine)
- return mLine < o.mLine;
- return mColumn < o.mColumn;
- }
-
- bool operator >(const Coordinates& o) const
- {
- if (mLine != o.mLine)
- return mLine > o.mLine;
- return mColumn > o.mColumn;
- }
-
- bool operator <=(const Coordinates& o) const
- {
- if (mLine != o.mLine)
- return mLine < o.mLine;
- return mColumn <= o.mColumn;
- }
-
- bool operator >=(const Coordinates& o) const
- {
- if (mLine != o.mLine)
- return mLine > o.mLine;
- return mColumn >= o.mColumn;
- }
- };
-
- struct Identifier
- {
- Coordinates mLocation;
- std::string mDeclaration;
- };
-
- typedef std::string String;
- typedef std::unordered_map<std::string, Identifier> Identifiers;
- typedef std::unordered_set<std::string> Keywords;
- typedef std::map<int, std::string> ErrorMarkers;
- typedef std::unordered_set<int> Breakpoints;
- typedef std::array<ImU32, (unsigned)PaletteIndex::Max> Palette;
- typedef uint8_t Char;
-
- struct Glyph
- {
- Char mChar;
- PaletteIndex mColorIndex = PaletteIndex::Default;
- bool mComment : 1;
- bool mMultiLineComment : 1;
- bool mPreprocessor : 1;
-
- Glyph(Char aChar, PaletteIndex aColorIndex) : mChar(aChar), mColorIndex(aColorIndex),
- mComment(false), mMultiLineComment(false), mPreprocessor(false) {}
- };
-
- typedef std::vector<Glyph> Line;
- typedef std::vector<Line> Lines;
-
- struct LanguageDefinition
- {
- typedef std::pair<std::string, PaletteIndex> TokenRegexString;
- typedef std::vector<TokenRegexString> TokenRegexStrings;
- typedef bool(*TokenizeCallback)(const char * in_begin, const char * in_end, const char *& out_begin, const char *& out_end, PaletteIndex & paletteIndex);
-
- std::string mName;
- Keywords mKeywords;
- Identifiers mIdentifiers;
- Identifiers mPreprocIdentifiers;
- std::string mCommentStart, mCommentEnd, mSingleLineComment;
- char mPreprocChar;
- bool mAutoIndentation;
-
- TokenizeCallback mTokenize;
-
- TokenRegexStrings mTokenRegexStrings;
-
- bool mCaseSensitive;
-
- LanguageDefinition()
- : mPreprocChar('#'), mAutoIndentation(true), mTokenize(nullptr), mCaseSensitive(true)
- {
- }
-
- static const LanguageDefinition& CPlusPlus();
- static const LanguageDefinition& HLSL();
- static const LanguageDefinition& GLSL();
- static const LanguageDefinition& C();
- static const LanguageDefinition& SQL();
- static const LanguageDefinition& AngelScript();
- static const LanguageDefinition& Lua();
- };
-
- TextEditor();
- ~TextEditor();
-
- void SetLanguageDefinition(const LanguageDefinition& aLanguageDef);
- const LanguageDefinition& GetLanguageDefinition() const { return mLanguageDefinition; }
-
- const Palette& GetPalette() const { return mPaletteBase; }
- void SetPalette(const Palette& aValue);
-
- void SetErrorMarkers(const ErrorMarkers& aMarkers) { mErrorMarkers = aMarkers; }
- void SetBreakpoints(const Breakpoints& aMarkers) { mBreakpoints = aMarkers; }
-
- void Render(const char* aTitle, const ImVec2& aSize = ImVec2(), bool aBorder = false);
- void SetText(const std::string& aText);
- std::string GetText() const;
-
- void SetTextLines(const std::vector<std::string>& aLines);
- std::vector<std::string> GetTextLines() const;
-
- std::string GetSelectedText() const;
- std::string GetCurrentLineText()const;
-
- int GetTotalLines() const { return (int)mLines.size(); }
- bool IsOverwrite() const { return mOverwrite; }
-
- void SetReadOnly(bool aValue);
- bool IsReadOnly() const { return mReadOnly; }
- bool IsTextChanged() const { return mTextChanged; }
- bool IsCursorPositionChanged() const { return mCursorPositionChanged; }
-
- bool IsColorizerEnabled() const { return mColorizerEnabled; }
- void SetColorizerEnable(bool aValue);
-
- Coordinates GetCursorPosition() const { return GetActualCursorCoordinates(); }
- void SetCursorPosition(const Coordinates& aPosition);
-
- inline void SetHandleMouseInputs (bool aValue){ mHandleMouseInputs = aValue;}
- inline bool IsHandleMouseInputsEnabled() const { return mHandleKeyboardInputs; }
-
- inline void SetHandleKeyboardInputs (bool aValue){ mHandleKeyboardInputs = aValue;}
- inline bool IsHandleKeyboardInputsEnabled() const { return mHandleKeyboardInputs; }
-
- inline void SetImGuiChildIgnored (bool aValue){ mIgnoreImGuiChild = aValue;}
- inline bool IsImGuiChildIgnored() const { return mIgnoreImGuiChild; }
-
- inline void SetShowWhitespaces(bool aValue) { mShowWhitespaces = aValue; }
- inline bool IsShowingWhitespaces() const { return mShowWhitespaces; }
-
- void SetTabSize(int aValue);
- inline int GetTabSize() const { return mTabSize; }
-
- void InsertText(const std::string& aValue);
- void InsertText(const char* aValue);
-
- void MoveUp(int aAmount = 1, bool aSelect = false);
- void MoveDown(int aAmount = 1, bool aSelect = false);
- void MoveLeft(int aAmount = 1, bool aSelect = false, bool aWordMode = false);
- void MoveRight(int aAmount = 1, bool aSelect = false, bool aWordMode = false);
- void MoveTop(bool aSelect = false);
- void MoveBottom(bool aSelect = false);
- void MoveHome(bool aSelect = false);
- void MoveEnd(bool aSelect = false);
-
- void SetSelectionStart(const Coordinates& aPosition);
- void SetSelectionEnd(const Coordinates& aPosition);
- void SetSelection(const Coordinates& aStart, const Coordinates& aEnd, SelectionMode aMode = SelectionMode::Normal);
- void SelectWordUnderCursor();
- void SelectAll();
- bool HasSelection() const;
-
- void Copy();
- void Cut();
- void Paste();
- void Delete();
-
- bool CanUndo() const;
- bool CanRedo() const;
- void Undo(int aSteps = 1);
- void Redo(int aSteps = 1);
-
- static const Palette& GetDarkPalette();
- static const Palette& GetLightPalette();
- static const Palette& GetRetroBluePalette();
-
-private:
- typedef std::vector<std::pair<std::regex, PaletteIndex>> RegexList;
-
- struct EditorState
- {
- Coordinates mSelectionStart;
- Coordinates mSelectionEnd;
- Coordinates mCursorPosition;
- };
-
- class UndoRecord
- {
- public:
- UndoRecord() {}
- ~UndoRecord() {}
-
- UndoRecord(
- const std::string& aAdded,
- const TextEditor::Coordinates aAddedStart,
- const TextEditor::Coordinates aAddedEnd,
-
- const std::string& aRemoved,
- const TextEditor::Coordinates aRemovedStart,
- const TextEditor::Coordinates aRemovedEnd,
-
- TextEditor::EditorState& aBefore,
- TextEditor::EditorState& aAfter);
-
- void Undo(TextEditor* aEditor);
- void Redo(TextEditor* aEditor);
-
- std::string mAdded;
- Coordinates mAddedStart;
- Coordinates mAddedEnd;
-
- std::string mRemoved;
- Coordinates mRemovedStart;
- Coordinates mRemovedEnd;
-
- EditorState mBefore;
- EditorState mAfter;
- };
-
- typedef std::vector<UndoRecord> UndoBuffer;
-
- void ProcessInputs();
- void Colorize(int aFromLine = 0, int aCount = -1);
- void ColorizeRange(int aFromLine = 0, int aToLine = 0);
- void ColorizeInternal();
- float TextDistanceToLineStart(const Coordinates& aFrom) const;
- void EnsureCursorVisible();
- int GetPageSize() const;
- std::string GetText(const Coordinates& aStart, const Coordinates& aEnd) const;
- Coordinates GetActualCursorCoordinates() const;
- Coordinates SanitizeCoordinates(const Coordinates& aValue) const;
- void Advance(Coordinates& aCoordinates) const;
- void DeleteRange(const Coordinates& aStart, const Coordinates& aEnd);
- int InsertTextAt(Coordinates& aWhere, const char* aValue);
- void AddUndo(UndoRecord& aValue);
- Coordinates ScreenPosToCoordinates(const ImVec2& aPosition) const;
- Coordinates FindWordStart(const Coordinates& aFrom) const;
- Coordinates FindWordEnd(const Coordinates& aFrom) const;
- Coordinates FindNextWord(const Coordinates& aFrom) const;
- int GetCharacterIndex(const Coordinates& aCoordinates) const;
- int GetCharacterColumn(int aLine, int aIndex) const;
- int GetLineCharacterCount(int aLine) const;
- int GetLineMaxColumn(int aLine) const;
- bool IsOnWordBoundary(const Coordinates& aAt) const;
- void RemoveLine(int aStart, int aEnd);
- void RemoveLine(int aIndex);
- Line& InsertLine(int aIndex);
- void EnterCharacter(ImWchar aChar, bool aShift);
- void Backspace();
- void DeleteSelection();
- std::string GetWordUnderCursor() const;
- std::string GetWordAt(const Coordinates& aCoords) const;
- ImU32 GetGlyphColor(const Glyph& aGlyph) const;
-
- void HandleKeyboardInputs();
- void HandleMouseInputs();
- void Render();
-
- float mLineSpacing;
- Lines mLines;
- EditorState mState;
- UndoBuffer mUndoBuffer;
- int mUndoIndex;
-
- int mTabSize;
- bool mOverwrite;
- bool mReadOnly;
- bool mWithinRender;
- bool mScrollToCursor;
- bool mScrollToTop;
- bool mTextChanged;
- bool mColorizerEnabled;
- float mTextStart; // position (in pixels) where a code line starts relative to the left of the TextEditor.
- int mLeftMargin;
- bool mCursorPositionChanged;
- int mColorRangeMin, mColorRangeMax;
- SelectionMode mSelectionMode;
- bool mHandleKeyboardInputs;
- bool mHandleMouseInputs;
- bool mIgnoreImGuiChild;
- bool mShowWhitespaces;
-
- Palette mPaletteBase;
- Palette mPalette;
- LanguageDefinition mLanguageDefinition;
- RegexList mRegexList;
-
- bool mCheckComments;
- Breakpoints mBreakpoints;
- ErrorMarkers mErrorMarkers;
- ImVec2 mCharAdvance;
- Coordinates mInteractiveStart, mInteractiveEnd;
- std::string mLineBuffer;
- uint64_t mStartTime;
-
- float mLastClick;
-};
+#pragma once
+
+#include <string>
+#include <vector>
+#include <array>
+#include <memory>
+#include <unordered_set>
+#include <unordered_map>
+#include <map>
+#include <regex>
+#include "imgui.h"
+
+class TextEditor
+{
+public:
+ enum class PaletteIndex
+ {
+ Default,
+ Keyword,
+ Number,
+ String,
+ CharLiteral,
+ Punctuation,
+ Preprocessor,
+ Identifier,
+ KnownIdentifier,
+ PreprocIdentifier,
+ Comment,
+ MultiLineComment,
+ Background,
+ Cursor,
+ Selection,
+ ErrorMarker,
+ Breakpoint,
+ LineNumber,
+ CurrentLineFill,
+ CurrentLineFillInactive,
+ CurrentLineEdge,
+ Max
+ };
+
+ enum class SelectionMode
+ {
+ Normal,
+ Word,
+ Line
+ };
+
+ struct Breakpoint
+ {
+ int mLine;
+ bool mEnabled;
+ std::string mCondition;
+
+ Breakpoint()
+ : mLine(-1)
+ , mEnabled(false)
+ {}
+ };
+
+ // Represents a character coordinate from the user's point of view,
+ // i. e. consider an uniform grid (assuming fixed-width font) on the
+ // screen as it is rendered, and each cell has its own coordinate, starting from 0.
+ // Tabs are counted as [1..mTabSize] count empty spaces, depending on
+ // how many space is necessary to reach the next tab stop.
+ // For example, coordinate (1, 5) represents the character 'B' in a line "\tABC", when mTabSize = 4,
+ // because it is rendered as " ABC" on the screen.
+ struct Coordinates
+ {
+ int mLine, mColumn;
+ Coordinates() : mLine(0), mColumn(0) {}
+ Coordinates(int aLine, int aColumn) : mLine(aLine), mColumn(aColumn)
+ {
+ assert(aLine >= 0);
+ assert(aColumn >= 0);
+ }
+ static Coordinates Invalid() { static Coordinates invalid(-1, -1); return invalid; }
+
+ bool operator ==(const Coordinates& o) const
+ {
+ return
+ mLine == o.mLine &&
+ mColumn == o.mColumn;
+ }
+
+ bool operator !=(const Coordinates& o) const
+ {
+ return
+ mLine != o.mLine ||
+ mColumn != o.mColumn;
+ }
+
+ bool operator <(const Coordinates& o) const
+ {
+ if (mLine != o.mLine)
+ return mLine < o.mLine;
+ return mColumn < o.mColumn;
+ }
+
+ bool operator >(const Coordinates& o) const
+ {
+ if (mLine != o.mLine)
+ return mLine > o.mLine;
+ return mColumn > o.mColumn;
+ }
+
+ bool operator <=(const Coordinates& o) const
+ {
+ if (mLine != o.mLine)
+ return mLine < o.mLine;
+ return mColumn <= o.mColumn;
+ }
+
+ bool operator >=(const Coordinates& o) const
+ {
+ if (mLine != o.mLine)
+ return mLine > o.mLine;
+ return mColumn >= o.mColumn;
+ }
+ };
+
+ struct Identifier
+ {
+ Coordinates mLocation;
+ std::string mDeclaration;
+ };
+
+ typedef std::string String;
+ typedef std::unordered_map<std::string, Identifier> Identifiers;
+ typedef std::unordered_set<std::string> Keywords;
+ typedef std::map<int, std::string> ErrorMarkers;
+ typedef std::unordered_set<int> Breakpoints;
+ typedef std::array<ImU32, (unsigned)PaletteIndex::Max> Palette;
+ typedef uint8_t Char;
+
+ struct Glyph
+ {
+ Char mChar;
+ PaletteIndex mColorIndex = PaletteIndex::Default;
+ bool mComment : 1;
+ bool mMultiLineComment : 1;
+ bool mPreprocessor : 1;
+
+ Glyph(Char aChar, PaletteIndex aColorIndex) : mChar(aChar), mColorIndex(aColorIndex),
+ mComment(false), mMultiLineComment(false), mPreprocessor(false) {}
+ };
+
+ typedef std::vector<Glyph> Line;
+ typedef std::vector<Line> Lines;
+
+ struct LanguageDefinition
+ {
+ typedef std::pair<std::string, PaletteIndex> TokenRegexString;
+ typedef std::vector<TokenRegexString> TokenRegexStrings;
+ typedef bool(*TokenizeCallback)(const char * in_begin, const char * in_end, const char *& out_begin, const char *& out_end, PaletteIndex & paletteIndex);
+
+ std::string mName;
+ Keywords mKeywords;
+ Identifiers mIdentifiers;
+ Identifiers mPreprocIdentifiers;
+ std::string mCommentStart, mCommentEnd, mSingleLineComment;
+ char mPreprocChar;
+ bool mAutoIndentation;
+
+ TokenizeCallback mTokenize;
+
+ TokenRegexStrings mTokenRegexStrings;
+
+ bool mCaseSensitive;
+
+ LanguageDefinition()
+ : mPreprocChar('#'), mAutoIndentation(true), mTokenize(nullptr), mCaseSensitive(true)
+ {
+ }
+
+ static const LanguageDefinition& CPlusPlus();
+ static const LanguageDefinition& HLSL();
+ static const LanguageDefinition& GLSL();
+ static const LanguageDefinition& C();
+ static const LanguageDefinition& SQL();
+ static const LanguageDefinition& AngelScript();
+ static const LanguageDefinition& Lua();
+ };
+
+ TextEditor();
+ ~TextEditor();
+
+ void SetLanguageDefinition(const LanguageDefinition& aLanguageDef);
+ const LanguageDefinition& GetLanguageDefinition() const { return mLanguageDefinition; }
+
+ const Palette& GetPalette() const { return mPaletteBase; }
+ void SetPalette(const Palette& aValue);
+
+ void SetErrorMarkers(const ErrorMarkers& aMarkers) { mErrorMarkers = aMarkers; }
+ void SetBreakpoints(const Breakpoints& aMarkers) { mBreakpoints = aMarkers; }
+
+ void Render(const char* aTitle, const ImVec2& aSize = ImVec2(), bool aBorder = false);
+ void SetText(const std::string& aText);
+ std::string GetText() const;
+
+ void SetTextLines(const std::vector<std::string>& aLines);
+ std::vector<std::string> GetTextLines() const;
+
+ std::string GetSelectedText() const;
+ std::string GetCurrentLineText()const;
+
+ int GetTotalLines() const { return (int)mLines.size(); }
+ bool IsOverwrite() const { return mOverwrite; }
+
+ void SetReadOnly(bool aValue);
+ bool IsReadOnly() const { return mReadOnly; }
+ bool IsTextChanged() const { return mTextChanged; }
+ bool IsCursorPositionChanged() const { return mCursorPositionChanged; }
+
+ bool IsColorizerEnabled() const { return mColorizerEnabled; }
+ void SetColorizerEnable(bool aValue);
+
+ Coordinates GetCursorPosition() const { return GetActualCursorCoordinates(); }
+ void SetCursorPosition(const Coordinates& aPosition);
+
+ inline void SetHandleMouseInputs (bool aValue){ mHandleMouseInputs = aValue;}
+ inline bool IsHandleMouseInputsEnabled() const { return mHandleKeyboardInputs; }
+
+ inline void SetHandleKeyboardInputs (bool aValue){ mHandleKeyboardInputs = aValue;}
+ inline bool IsHandleKeyboardInputsEnabled() const { return mHandleKeyboardInputs; }
+
+ inline void SetImGuiChildIgnored (bool aValue){ mIgnoreImGuiChild = aValue;}
+ inline bool IsImGuiChildIgnored() const { return mIgnoreImGuiChild; }
+
+ inline void SetShowWhitespaces(bool aValue) { mShowWhitespaces = aValue; }
+ inline bool IsShowingWhitespaces() const { return mShowWhitespaces; }
+
+ void SetTabSize(int aValue);
+ inline int GetTabSize() const { return mTabSize; }
+
+ void InsertText(const std::string& aValue);
+ void InsertText(const char* aValue);
+
+ void MoveUp(int aAmount = 1, bool aSelect = false);
+ void MoveDown(int aAmount = 1, bool aSelect = false);
+ void MoveLeft(int aAmount = 1, bool aSelect = false, bool aWordMode = false);
+ void MoveRight(int aAmount = 1, bool aSelect = false, bool aWordMode = false);
+ void MoveTop(bool aSelect = false);
+ void MoveBottom(bool aSelect = false);
+ void MoveHome(bool aSelect = false);
+ void MoveEnd(bool aSelect = false);
+
+ void SetSelectionStart(const Coordinates& aPosition);
+ void SetSelectionEnd(const Coordinates& aPosition);
+ void SetSelection(const Coordinates& aStart, const Coordinates& aEnd, SelectionMode aMode = SelectionMode::Normal);
+ void SelectWordUnderCursor();
+ void SelectAll();
+ bool HasSelection() const;
+
+ void Copy();
+ void Cut();
+ void Paste();
+ void Delete();
+
+ bool CanUndo() const;
+ bool CanRedo() const;
+ void Undo(int aSteps = 1);
+ void Redo(int aSteps = 1);
+
+ static const Palette& GetDarkPalette();
+ static const Palette& GetLightPalette();
+ static const Palette& GetRetroBluePalette();
+
+private:
+ typedef std::vector<std::pair<std::regex, PaletteIndex>> RegexList;
+
+ struct EditorState
+ {
+ Coordinates mSelectionStart;
+ Coordinates mSelectionEnd;
+ Coordinates mCursorPosition;
+ };
+
+ class UndoRecord
+ {
+ public:
+ UndoRecord() {}
+ ~UndoRecord() {}
+
+ UndoRecord(
+ const std::string& aAdded,
+ const TextEditor::Coordinates aAddedStart,
+ const TextEditor::Coordinates aAddedEnd,
+
+ const std::string& aRemoved,
+ const TextEditor::Coordinates aRemovedStart,
+ const TextEditor::Coordinates aRemovedEnd,
+
+ TextEditor::EditorState& aBefore,
+ TextEditor::EditorState& aAfter);
+
+ void Undo(TextEditor* aEditor);
+ void Redo(TextEditor* aEditor);
+
+ std::string mAdded;
+ Coordinates mAddedStart;
+ Coordinates mAddedEnd;
+
+ std::string mRemoved;
+ Coordinates mRemovedStart;
+ Coordinates mRemovedEnd;
+
+ EditorState mBefore;
+ EditorState mAfter;
+ };
+
+ typedef std::vector<UndoRecord> UndoBuffer;
+
+ void ProcessInputs();
+ void Colorize(int aFromLine = 0, int aCount = -1);
+ void ColorizeRange(int aFromLine = 0, int aToLine = 0);
+ void ColorizeInternal();
+ float TextDistanceToLineStart(const Coordinates& aFrom) const;
+ void EnsureCursorVisible();
+ int GetPageSize() const;
+ std::string GetText(const Coordinates& aStart, const Coordinates& aEnd) const;
+ Coordinates GetActualCursorCoordinates() const;
+ Coordinates SanitizeCoordinates(const Coordinates& aValue) const;
+ void Advance(Coordinates& aCoordinates) const;
+ void DeleteRange(const Coordinates& aStart, const Coordinates& aEnd);
+ int InsertTextAt(Coordinates& aWhere, const char* aValue);
+ void AddUndo(UndoRecord& aValue);
+ Coordinates ScreenPosToCoordinates(const ImVec2& aPosition) const;
+ Coordinates FindWordStart(const Coordinates& aFrom) const;
+ Coordinates FindWordEnd(const Coordinates& aFrom) const;
+ Coordinates FindNextWord(const Coordinates& aFrom) const;
+ int GetCharacterIndex(const Coordinates& aCoordinates) const;
+ int GetCharacterColumn(int aLine, int aIndex) const;
+ int GetLineCharacterCount(int aLine) const;
+ int GetLineMaxColumn(int aLine) const;
+ bool IsOnWordBoundary(const Coordinates& aAt) const;
+ void RemoveLine(int aStart, int aEnd);
+ void RemoveLine(int aIndex);
+ Line& InsertLine(int aIndex);
+ void EnterCharacter(ImWchar aChar, bool aShift);
+ void Backspace();
+ void DeleteSelection();
+ std::string GetWordUnderCursor() const;
+ std::string GetWordAt(const Coordinates& aCoords) const;
+ ImU32 GetGlyphColor(const Glyph& aGlyph) const;
+
+ void HandleKeyboardInputs();
+ void HandleMouseInputs();
+ void Render();
+
+ float mLineSpacing;
+ Lines mLines;
+ EditorState mState;
+ UndoBuffer mUndoBuffer;
+ int mUndoIndex;
+
+ int mTabSize;
+ bool mOverwrite;
+ bool mReadOnly;
+ bool mWithinRender;
+ bool mScrollToCursor;
+ bool mScrollToTop;
+ bool mTextChanged;
+ bool mColorizerEnabled;
+ float mTextStart; // position (in pixels) where a code line starts relative to the left of the TextEditor.
+ int mLeftMargin;
+ bool mCursorPositionChanged;
+ int mColorRangeMin, mColorRangeMax;
+ SelectionMode mSelectionMode;
+ bool mHandleKeyboardInputs;
+ bool mHandleMouseInputs;
+ bool mIgnoreImGuiChild;
+ bool mShowWhitespaces;
+
+ Palette mPaletteBase;
+ Palette mPalette;
+ LanguageDefinition mLanguageDefinition;
+ RegexList mRegexList;
+
+ bool mCheckComments;
+ Breakpoints mBreakpoints;
+ ErrorMarkers mErrorMarkers;
+ ImVec2 mCharAdvance;
+ Coordinates mInteractiveStart, mInteractiveEnd;
+ std::string mLineBuffer;
+ uint64_t mStartTime;
+
+ float mLastClick;
+};