?? string.cpp
字號:
undo.add(Undo(Cur,StrLen,OPE_INSERT,str,0));
Openum++;
}
Cur+=StrLen;
Length+=StrLen;
SetLine();
}
bool FString::IsInSelection(int line,int column)
{
int pos;
if(Sel.GetEnd()==Sel.GetStart())
return false;
pos=GetPos(line,column);
if(pos>=Sel.GetStart()&&pos<Sel.GetEnd())
return true;
return false;
}
bool FString::MoveSelEnd(int end)
{
if(end>Length||end<0)
return false;
if(end!=Length&&*(Str+end)>=-95&&*(Str+end)<=-2)
{
int Flag=0;
for(int i=end;i>=0;i--)
if(*(Str+i)==0x0a)
break;
for(i++;i<end;i++)
if(*(Str+i)>=-95&&*(Str+i)<=-2)
Flag++;
if(Flag%2!=0) end++;
}
Sel.SetEnd(end);
return true;
}
bool FString::MoveSelStart(int start)
{
if(start>Length||start<0)
return false;
if(start!=Length&&*(Str+start)>=-95&&*(Str+start)<=-2)
{
int Flag=0;
for(int i=start;i>=0;i--)
if(*(Str+i)==0x0a)
break;
for(i++;i<start;i++)
if(*(Str+i)>=-95&&*(Str+i)<=-2)
Flag++;
if(Flag%2!=0) start++;
}
Sel.SetStart(start);
return true;
}
bool FString::MoveSelStart(int line,int column)
{
int Line=1,Column=1;
int i;
if(line<1||column<1) return false;
for(i=0;i<=Length;i++)
{
if(line==Line&&column==Column)
{
break;
}
if(*(Str+i)==0x0a)
{
Column++;
if(line==Line&&column==Column)
{
break;
}
Line++;
Column=1;
}
else
Column++;
}
if(i==Length+1) return false;
if(i!=Length&&*(Str+i)>=-95&&*(Str+i)<=-2)
{
int j;
int Flag=0;
for(j=i;j>=0;j--)
if(*(Str+j)==0x0a)
break;
for(j++;j<i;j++)
if(*(Str+j)>=-95&&*(Str+j)<=-2)
Flag++;
if(Flag%2!=0) i++;
}
MoveSelStart(i);
return true;
}
bool FString::MoveSelEnd(int line,int column)
{
int Line=1,Column=1;
int i;
if(line<1||column<1) return false;
for(i=0;i<=Length;i++)
{
if(line==Line&&column==Column)
{
break;
}
if(*(Str+i)==0x0a)
{
Column++;
if(line==Line&&column==Column)
{
break;
}
Line++;
Column=1;
}
else
Column++;
}
if(i==Length+1) return false;
if(i!=Length&&*(Str+i)>=-95&&*(Str+i)<=-2)
{
int j;
int Flag=0;
for(j=i;j>=0;j--)
if(*(Str+j)==0x0a)
break;
for(j++;j<i;j++)
if(*(Str+j)>=-95&&*(Str+j)<=-2)
Flag++;
if(Flag%2!=0) i++;
}
MoveSelEnd(i);
return true;
}
void FString::MoveToEnd()
{
Cur=Length;
}
bool FString::MoveToLine(int line)
{
int tempCur=0;
for(int i=0;i<line;)
{
if(*(Str+tempCur)==0x0a)
i++;
tempCur++;
if(tempCur==Length)
return false;
}
Cur=tempCur;
return true;
}
bool FString::MoveToNext()
{
if(Cur==Length)
return false;
if(*(Str+Cur)>=-95&&*(Str+Cur)<=-2)
{
Cur+=2;
}
else
Cur++;
return true;
}
bool FString::MoveToNextLine()
{
int lineStart;
int i,j;
lineStart=GetCurLineStart();
for(i=Cur;i<Length;i++)
if(*(Str+i)==0x0a)
{
break;
}
if(i==Length) return false;
else i++;
for(j=0;j<Cur-lineStart;j++)
{
if(*(Str+i)==0x0a) break;
if(i==Length) break;
i++;
}
if(*(Str+i)>=-95&&*(Str+i)<=-2)
{
int j;
int Flag=0;
for(j=i;j>=0;j--)
if(*(Str+j)==0x0a)
break;
for(j++;j<i;j++)
if(*(Str+j)>=-95&&*(Str+j)<=-2)
Flag++;
if(Flag%2!=0) i++;
}
Cur=i;
return true;
}
bool FString::MoveToPos(int pos)
{
if(pos<0&&pos>Length)
return false;
if(*(Str+pos)>=-95&&*(Str+pos)<=-2)
{
int j;
int Flag=0;
for(j=pos;j>=0;j--)
if(*(Str+j)==0x0a)
break;
for(j++;j<pos;j++)
if(*(Str+j)>=-95&&*(Str+j)<=-2)
Flag++;
if(Flag%2!=0) pos++;
}
Cur=pos;
return true;
}
bool FString::MoveToPos(int line,int column)
{
int Line=1,Column=1;
int i;
if(line<1||column<1) return false;
for(i=0;i<Length;i++)
{
if(line==Line&&column==Column)
{
if(*(Str+i)>=-95&&*(Str+i)<=-2)
{
int j;
int Flag=0;
for(j=i;j>=0;j--)
if(*(Str+j)==0x0a)
break;
for(j++;j<i;j++)
if(*(Str+j)>=-95&&*(Str+j)<=-2)
Flag++;
if(Flag%2!=0) i++;
}
Cur=i;
return true;
}
if(*(Str+i)==0x0a)
{
Column++;
if(line==Line&&column==Column)
{
Cur=i;
return true;
}
Line++;
if(Line>line) return false;
Column=1;
}
else
Column++;
}
if(line==Line&&column==Column)
{
Cur=i;
return true;
}
return false;
}
bool FString::MoveToPrevious()
{
if(Cur==0)
return false;
Cur--;
if(*(Str+Cur)>=-95&&*(Str+Cur)<=-2)
Cur--;
return true;
}
bool FString::MoveToPreviousLine()
{
int curLine;
int curColumn;
int i;
curLine=GetLine();
curColumn=Cur-GetCurLineStart()+1;
for(i=curColumn;i>=0;i--)
if(MoveToPos(curLine-1,i))
return true;
return false;
}
void FString::MoveToStart()
{
Cur=0;
}
bool FString::Replace(char *strSrc,char *strDest,int pos,bool icmp)
{
if(stricmpn(strSrc,pos,icmp))
{
Cur=pos;
MoveSelStart(pos);
MoveSelEnd(pos+strlen(strSrc));
DeleteSel();
Insert(strDest);
return true;
}
return false;
}
bool FString::ReplaceAll(char *strSrc,char *strDest,bool icmp)
{
int pos;
bool result=false;
while(FindNext(strSrc,pos,icmp))
{
result=true;
Replace(strSrc,strDest,pos,icmp);
}
return result;
}
void FString::ReadFile(FILE *fp)
{
int CurPos,FileSize;
CurPos = ftell(fp);
fseek(fp, 0L, SEEK_END);
FileSize = ftell(fp);
fseek(fp, CurPos, SEEK_SET);
while(BufferSize<FileSize)
Inflate();
int i=0;
while((*(Str+i++)=getc(fp))!=EOF) ;
Length=i-1;
SetLine();
}
bool FString::SaveFile(char* filename)
{
FILE *fp;
fp=fopen(filename,"w");
if(fp==0) return false;
for(int i=0;i<Length;i++)
if(!putc(*(Str+i),fp)) return false;
fclose(fp);
return true;
}
void FString::SelectWord()
{
int i;
for(i=Cur;i>=0;i--)
if(*(Str+i)<-95||
(*(Str+i)>-2&&*(Str+i)<0x41)||
(*(Str+i)>0x5a&&*(Str+i)<0x61)
||*(Str+i)>0x7a)
{
if(*(Str+i)!='_')
break;
}
MoveSelStart(i+1);
for(i=Cur;i<Length;i++)
if(*(Str+i)<-95||
(*(Str+i)>-2&&*(Str+i)<0x41)||
(*(Str+i)>0x5a&&*(Str+i)<0x61)
||*(Str+i)>0x7a)
{
if(*(Str+i)!='_')
break;
}
MoveSelEnd(i);
}
void FString::SelectWord(int line,int column)
{
int i;
int Pos=GetPos(line,column);
for(i=Pos;i>=0;i--)
if(*(Str+i)<-95||
(*(Str+i)>-2&&*(Str+i)<0x41)||
(*(Str+i)>0x5a&&*(Str+i)<0x61)
||*(Str+i)>0x7a)
{
if(*(Str+i)!='_')
break;
}
MoveSelStart(i+1);
for(i=Pos;i<Length;i++)
if(*(Str+i)<-95||
(*(Str+i)>-2&&*(Str+i)<0x41)||
(*(Str+i)>0x5a&&*(Str+i)<0x61)
||*(Str+i)>0x7a)
{
if(*(Str+i)!='_')
break;
}
MoveSelEnd(i);
}
bool FString::stricmpn(char *str,int start,bool icmp)
{
unsigned i;
if(start<0||start>=Length)
return false;
for(i=0;i<strlen(str);i++)
{
if(*(Str+start+i)!=*(str+i))
{
if(!icmp)
return false;
else
{
if(abs(*(Str+start+i)-*(str+i))!=0x20)
return false;
}
}
}
return true;
}
void FString::SetLine()
{
Line.Clear();
Line.Add(0);
for(int i=0;i<Length;i++)
if(*(Str+i)==0x0a)
Line.Add(i+1);
Line.Add(i);
}
void FString::Ud()
{
if(Openum==0)
return;
Openum--;
if(undo[Openum].ope==OPE_INSERT)
{
MoveToPos(undo[Openum].pos);
if(undo[Openum].length==1)
{
Delete(0);
}
else
{
MoveSelStart(Cur);
MoveSelEnd(Cur+undo[Openum].length);
DeleteSel(0);
}
}
else
{
MoveToPos(undo[Openum].pos);
if(undo[Openum].length==1)
{
Insert(undo[Openum].c,0);
}
else
{
Insert(undo[Openum].baker.str(),0);
}
}
}
void FString::Rd()
{
if(Openum>=undo.length())
return;
if(undo[Openum].ope==OPE_DELETE)
{
MoveToPos(undo[Openum].pos);
if(undo[Openum].length==1)
{
Delete(0);
}
else
{
MoveSelStart(Cur);
MoveSelEnd(Cur+undo[Openum].length);
DeleteSel(0);
}
}
else
{
MoveToPos(undo[Openum].pos);
if(undo[Openum].length==1)
{
Insert(undo[Openum].c,0);
}
else
{
Insert(undo[Openum].baker.str(),0);
}
}
Openum++;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -