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

📄 cedtdocedit.cpp

📁 Crimson编辑器的英文版,完成从韩文版变成英文版的移植,并且附带可执行文件和注册表文件,无需原先的安装包,是改写编辑器的最理想选择.
💻 CPP
字号:
#include "stdafx.h"
#include "cedtHeader.h"


void CCedtDoc::EmptySavedCompositionString()
{
	m_szSavedCompositionString = "";
	m_bCompositionStringSaved = FALSE;
}

void CCedtDoc::SaveCurrentCompositionString(INT nIdxY)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	m_szSavedCompositionString = rLine;
	m_bCompositionStringSaved = TRUE;
}

void CCedtDoc::RestoreCurrentCompositionString(INT nIdxY)
{
	if( ! m_bCompositionStringSaved ) return;
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	rLine = m_szSavedCompositionString;
}

void CCedtDoc::InsertCompositionString(INT nIdxX, INT nIdxY, LPCTSTR lpszString)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	rLine.Insert(nIdxX, lpszString);
	SetModifiedFlag(TRUE);
}

void CCedtDoc::DeleteCompositionString(INT nIdxX, INT nIdxY, INT nLength)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	rLine.Delete(nIdxX, nLength);
	SetModifiedFlag(TRUE);
}

void CCedtDoc::InsertChar(INT nIdxX, INT nIdxY, UINT nChar)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	FastInsertChar(rLine, nIdxX, nIdxY, nChar);
}

void CCedtDoc::DeleteChar(INT nIdxX, INT nIdxY)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	FastDeleteChar(rLine, nIdxX, nIdxY);
}

void CCedtDoc::InsertString(INT nIdxX, INT nIdxY, LPCTSTR lpszString)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	FastInsertString(rLine, nIdxX, nIdxY, lpszString);
}

void CCedtDoc::DeleteString(INT nIdxX, INT nIdxY, INT nLength)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	FastDeleteString(rLine, nIdxX, nIdxY, nLength);
}


void CCedtDoc::InsertBlock(INT nBegX, INT nBegY, INT & nEndX, INT & nEndY, CMemText & rBlock)
{
	CAnalyzedString & rLineBeg = GetLineFromIdxY(nBegY);
	CString szSplit = rLineBeg.Mid(nBegX);
	POSITION pos = m_clsAnalyzedText.FindIndex(nBegY);
	POSITION po2 = rBlock.GetHeadPosition();
	rLineBeg = rLineBeg.Left(nBegX) + rBlock.GetNext(po2);
	for(INT i = 1; i < rBlock.GetCount(); i++) pos = m_clsAnalyzedText.InsertAfter(pos, rBlock.GetNext(po2));
	CAnalyzedString & rLineEnd = m_clsAnalyzedText.GetAt(pos);
	rLineEnd += szSplit;

	nEndY = nBegY + rBlock.GetCount() - 1;
	nEndX = rLineEnd.GetLength() - szSplit.GetLength();

	RecordInsertBlock(nBegX, nBegY, nEndX, nEndY);
	SetModifiedFlag(TRUE);
}

void CCedtDoc::DeleteBlock(INT nBegX, INT nBegY, INT nEndX, INT nEndY)
{
	CMemText Block; CopyToBlock(Block, nBegX, nBegY, nEndX, nEndY);

	CAnalyzedString & rLineBeg = GetLineFromIdxY(nBegY);
	CAnalyzedString & rLineEnd = GetLineFromIdxY(nEndY);
	rLineBeg = rLineBeg.Left(nBegX) + rLineEnd.Mid(nEndX);
	POSITION pos = m_clsAnalyzedText.FindIndex(nBegY+1);
	for(INT i = nBegY+1; i <= nEndY; i++) {
		POSITION posRemove = pos; m_clsAnalyzedText.GetNext(pos);
		m_clsAnalyzedText.RemoveAt(posRemove);
	}

	RecordDeleteBlock(nBegX, nBegY, Block);
	SetModifiedFlag(TRUE);
}

void CCedtDoc::SplitLine(INT nIdxX, INT nIdxY)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	CString szString = rLine.Mid(nIdxX); rLine = rLine.Left(nIdxX);
	POSITION pos = m_clsAnalyzedText.FindIndex(nIdxY);
	m_clsAnalyzedText.InsertAfter(pos, szString);

	RecordSplitLine(nIdxX, nIdxY);
	SetModifiedFlag(TRUE);
}

void CCedtDoc::JoinLines(INT nIdxX, INT nIdxY)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	rLine = rLine + GetLineFromIdxY(nIdxY+1);
	POSITION pos = m_clsAnalyzedText.FindIndex(nIdxY+1);
	m_clsAnalyzedText.RemoveAt(pos);

	RecordJoinLines(nIdxX, nIdxY);
	SetModifiedFlag(TRUE);
}


void CCedtDoc::CopyToString(CString & rString, INT nBegX, INT nBegY, INT nLength)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nBegY);
	rString = rLine.Mid(nBegX, nLength);
}

void CCedtDoc::CopyToBlock(CMemText & rBlock, INT nBegX, INT nBegY, INT nEndX, INT nEndY)
{
	rBlock.RemoveAll();
	POSITION pos = m_clsAnalyzedText.FindIndex(nBegY);
	rBlock.AddTail( m_clsAnalyzedText.GetNext(pos).Mid(nBegX) );
	for(INT i = nBegY+1; i < nEndY; i++) rBlock.AddTail( m_clsAnalyzedText.GetNext(pos) );
	rBlock.AddTail( m_clsAnalyzedText.GetNext(pos).Left(nEndX) );
}


void CCedtDoc::FastInsertChar(CAnalyzedString & rLine, INT nIdxX, INT nIdxY, UINT nChar)
{
	rLine.Insert(nIdxX, nChar);
	RecordInsertChar(nIdxX, nIdxY);
	SetModifiedFlag(TRUE);
}

void CCedtDoc::FastDeleteChar(CAnalyzedString & rLine, INT nIdxX, INT nIdxY)
{
	INT nChar = rLine[nIdxX]; 
	rLine.Delete(nIdxX, 1);

	RecordDeleteChar(nIdxX, nIdxY, nChar);
	SetModifiedFlag(TRUE);
}

void CCedtDoc::FastInsertString(CAnalyzedString & rLine, INT nIdxX, INT nIdxY, LPCTSTR lpszString)
{
	INT nLength = strlen(lpszString);
	rLine.Insert(nIdxX, lpszString);

	RecordInsertString(nIdxX, nIdxY, nLength);
	SetModifiedFlag(TRUE);
}

void CCedtDoc::FastDeleteString(CAnalyzedString & rLine, INT nIdxX, INT nIdxY, INT nLength)
{
	CString szString = rLine.Mid(nIdxX, nLength);
	rLine.Delete(nIdxX, nLength);

	RecordDeleteString(nIdxX, nIdxY, szString);
	SetModifiedFlag(TRUE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -