diff options
author | elfmz <fenix1905@tut.by> | 2022-11-05 20:31:53 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-05 20:31:53 +0300 |
commit | 253a6b140797e035eb9301a1632fed2408a837e2 (patch) | |
tree | ed6be316904b5d5ff11b7bfa46e7037fc2ec51d5 /far2l/src/edit.hpp | |
parent | 89eaed71c674aadda536408638e3416bc7f4c053 (diff) |
support full-width/composite characters and true color palette in terminal (#1386)
Added normal support for full-width (CJK etc) and composite (using diacritics) characters.
IMPORTANT: WINPORT API changed in binary incompatible way in order to implement this.
Diffstat (limited to 'far2l/src/edit.hpp')
-rw-r--r-- | far2l/src/edit.hpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/far2l/src/edit.hpp b/far2l/src/edit.hpp index bd2aea06..ec531f16 100644 --- a/far2l/src/edit.hpp +++ b/far2l/src/edit.hpp @@ -136,6 +136,7 @@ class Edit:public ScreenObject Edit *m_prev; private: + std::vector<wchar_t> OutStr; wchar_t *Str; int StrSize; @@ -191,9 +192,19 @@ class Edit:public ScreenObject int CheckCharMask(wchar_t Chr); int ProcessInsPath(int Key,int PrevSelStart=-1,int PrevSelEnd=0); - int RealPosToTab(int PrevLength, int PrevPos, int Pos, int* CorrectPos); + int RealPosToCell(int PrevLength, int PrevPos, int Pos, int* CorrectPos); + void SanitizeSelectionRange(); + inline const wchar_t* WordDiv() {return strWordDiv->CPtr();}; + + protected: + int CalcRTrimmedStrSize() const; + + int CalcPosFwdTo(int Pos, int LimitPos = -1) const; + int CalcPosBwdTo(int Pos) const; + + inline int CalcPosFwd(int LimitPos = -1) const { return CalcPosFwdTo(CurPos, LimitPos); } + inline int CalcPosBwd() const { return CalcPosBwdTo(CurPos); } - inline const wchar_t* WordDiv(void) {return strWordDiv->CPtr();}; public: Edit(ScreenObject *pOwner = nullptr, Callback* aCallback = nullptr, bool bAllocateData = true); virtual ~Edit(); @@ -254,8 +265,8 @@ class Edit:public ScreenObject int GetClearFlag() {return Flags.Check(FEDITLINE_CLEARFLAG);} void SetCurPos(int NewPos) {CurPos=NewPos; PrevCurPos=NewPos;} int GetCurPos() {return(CurPos);} - int GetTabCurPos(); - void SetTabCurPos(int NewPos); + int GetCellCurPos(); + void SetCellCurPos(int NewPos); int GetLeftPos() {return(LeftPos);} void SetLeftPos(int NewPos) {LeftPos=NewPos;} void SetPasswordMode(int Mode) {Flags.Change(FEDITLINE_PASSWORDMODE,Mode);}; @@ -273,8 +284,8 @@ class Edit:public ScreenObject void SetConvertTabs(int Mode) { TabExpandMode = Mode;}; int GetConvertTabs() {return TabExpandMode;}; - int RealPosToTab(int Pos); - int TabPosToReal(int Pos); + int RealPosToCell(int Pos); + int CellPosToReal(int Pos); void Select(int Start,int End); void AddSelect(int Start,int End); void GetSelection(int &Start,int &End); @@ -282,7 +293,7 @@ class Edit:public ScreenObject void GetRealSelection(int &Start,int &End); void SetEditBeyondEnd(int Mode) {Flags.Change(FEDITLINE_EDITBEYONDEND,Mode);}; void SetEditorMode(int Mode) {Flags.Change(FEDITLINE_EDITORMODE,Mode);}; - void ReplaceTabs(); + void ExpandTabs(); void InsertTab(); |