⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.cpp

📁 jedit 一个小型java编译器的源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -