Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/elfmz/far2l.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelfmz <fenix1905@tut.by>2022-11-05 20:31:53 +0300
committerGitHub <noreply@github.com>2022-11-05 20:31:53 +0300
commit253a6b140797e035eb9301a1632fed2408a837e2 (patch)
treeed6be316904b5d5ff11b7bfa46e7037fc2ec51d5 /far2l/src/edit.hpp
parent89eaed71c674aadda536408638e3416bc7f4c053 (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.hpp25
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();