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

📄 cedtdoceditadv.cpp

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



INT CCedtDoc::IndentLine(INT nIdxY, INT nTabSize, BOOL bUseSpaces) 
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	return FastIndentLine(rLine, nIdxY, nTabSize, bUseSpaces);
}

INT CCedtDoc::UnindentLine(INT nIdxY, INT nTabSize)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	return FastUnindentLine(rLine, nIdxY, nTabSize);
}

INT CCedtDoc::MakeCommentLine(INT nIdxY) 
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	return FastMakeCommentLine(rLine, nIdxY);
}

INT CCedtDoc::ReleaseCommentLine(INT nIdxY) 
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	return FastReleaseCommentLine(rLine, nIdxY);
}

INT CCedtDoc::ConvertTabsToSpaces(INT nIdxY)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	return FastConvertTabsToSpaces(rLine, nIdxY);
}

INT CCedtDoc::ConvertSpacesToTabs(INT nIdxY)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	return FastConvertSpacesToTabs(rLine, nIdxY);
}

INT CCedtDoc::LeadingSpacesToTabs(INT nIdxY)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	return FastLeadingSpacesToTabs(rLine, nIdxY);
}

INT CCedtDoc::DeleteLeadingSpaces(INT nIdxY)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	return FastDeleteLeadingSpaces(rLine, nIdxY);
}

INT CCedtDoc::DeleteTrailingSpaces(INT nIdxY)
{
	CAnalyzedString & rLine = GetLineFromIdxY(nIdxY);
	return FastDeleteTrailingSpaces(rLine, nIdxY);
}

void CCedtDoc::IndentBlock(INT nBegX, INT nBegY, INT nEndX, INT nEndY, INT nTabSize, BOOL bUseSpaces)
{
	POSITION pos = m_clsAnalyzedText.FindIndex(nBegY);
	for(INT nIdxY = nBegY; nIdxY <= nEndY; nIdxY++) {
		CAnalyzedString & rLine = m_clsAnalyzedText.GetNext(pos);
		if( nIdxY == nEndY && nEndX == 0 ) continue;
		FastIndentLine(rLine, nIdxY, nTabSize, bUseSpaces);
	}
}

void CCedtDoc::UnindentBlock(INT nBegX, INT nBegY, INT nEndX, INT nEndY, INT nTabSize)
{
	POSITION pos = m_clsAnalyzedText.FindIndex(nBegY);
	for(INT nIdxY = nBegY; nIdxY <= nEndY; nIdxY++) {
		CAnalyzedString & rLine = m_clsAnalyzedText.GetNext(pos);
		if( nIdxY == nEndY && nEndX == 0 ) continue;
		FastUnindentLine(rLine, nIdxY, nTabSize);
	}
}

void CCedtDoc::MakeCommentBlock(INT nBegX, INT nBegY, INT nEndX, INT nEndY)
{
	POSITION pos = m_clsAnalyzedText.FindIndex(nBegY);
	for(INT nIdxY = nBegY; nIdxY <= nEndY; nIdxY++) {
		CAnalyzedString & rLine = m_clsAnalyzedText.GetNext(pos);
		if( nIdxY == nEndY && nEndX == 0 ) continue;
		FastMakeCommentLine(rLine, nIdxY);
	}
}

void CCedtDoc::ReleaseCommentBlock(INT nBegX, INT nBegY, INT nEndX, INT nEndY)
{
	POSITION pos = m_clsAnalyzedText.FindIndex(nBegY);
	for(INT nIdxY = nBegY; nIdxY <= nEndY; nIdxY++) {
		CAnalyzedString & rLine = m_clsAnalyzedText.GetNext(pos);
		if( nIdxY == nEndY && nEndX == 0 ) continue;
		FastReleaseCommentLine(rLine, nIdxY);
	}
}

void CCedtDoc::ConvertTabsToSpacesDocument()
{
	POSITION pos = m_clsAnalyzedText.GetHeadPosition();
	INT nCount = m_clsAnalyzedText.GetCount();
	for(INT nIdxY = 0; nIdxY < nCount; nIdxY++) {
		CAnalyzedString & rLine = m_clsAnalyzedText.GetNext(pos);
		FastConvertTabsToSpaces(rLine, nIdxY);
	}
}

void CCedtDoc::ConvertSpacesToTabsDocument()
{
	POSITION pos = m_clsAnalyzedText.GetHeadPosition();
	INT nCount = m_clsAnalyzedText.GetCount();
	for(INT nIdxY = 0; nIdxY < nCount; nIdxY++) {
		CAnalyzedString & rLine = m_clsAnalyzedText.GetNext(pos);
		FastConvertSpacesToTabs(rLine, nIdxY);
	}
}

void CCedtDoc::LeadingSpacesToTabsDocument()
{
	POSITION pos = m_clsAnalyzedText.GetHeadPosition();
	INT nCount = m_clsAnalyzedText.GetCount();
	for(INT nIdxY = 0; nIdxY < nCount; nIdxY++) {
		CAnalyzedString & rLine = m_clsAnalyzedText.GetNext(pos);
		FastLeadingSpacesToTabs(rLine, nIdxY);
	}
}

void CCedtDoc::DeleteTrailingSpacesDocument()
{
	POSITION pos = m_clsAnalyzedText.GetHeadPosition();
	INT nCount = m_clsAnalyzedText.GetCount();
	for(INT nIdxY = 0; nIdxY < nCount; nIdxY++) {
		CAnalyzedString & rLine = m_clsAnalyzedText.GetNext(pos);
		FastDeleteTrailingSpaces(rLine, nIdxY);
	}
}

//////////////////////////////////////////////////////////////////////
// private editing functions
INT CCedtDoc::FastIndentLine(CAnalyzedString & rLine, INT nIdxY, INT nTabSize, BOOL bUseSpaces)
{
	if( bUseSpaces ) {
		FastInsertString(rLine, 0, nIdxY, CString(' ', nTabSize)); return nTabSize;
	} else {
		FastInsertChar(rLine, 0, nIdxY, '\t'); return 1;
	}
}

INT CCedtDoc::FastUnindentLine(CAnalyzedString & rLine, INT nIdxY, INT nTabSize)
{
	INT nLen = rLine.GetLength(); if( ! nLen ) return 0;

	if( rLine[0] == ' ' ) {
		INT j = 0; while( j < nLen && rLine[j] == ' ' && j < nTabSize ) j++;
		FastDeleteString(rLine, 0, nIdxY, j); return j;
	} else if( rLine[0] == '\t' ) {
		FastDeleteChar(rLine, 0, nIdxY); return 1;
	} else return 0;
}

INT CCedtDoc::FastMakeCommentLine(CAnalyzedString & rLine, INT nIdxY)
{
	LPCTSTR LCS = m_clsLangSpec.m_szLineComment1;
	INT  lenLCS = strlen(LCS); if( ! lenLCS ) return 0;

	if( rLine.GetLength() ) {
		CString szString = LCS; szString += " ";
		FastInsertString(rLine, 0, nIdxY, szString); return lenLCS+1;
	} else return 0;
}

INT CCedtDoc::FastReleaseCommentLine(CAnalyzedString & rLine, INT nIdxY)
{
	LPCTSTR LCS = m_clsLangSpec.m_szLineComment1; 
	INT  lenLCS = strlen(LCS); if( ! lenLCS ) return 0;

	if( rLine.GetLength() ) {
		CString szString = LCS; szString += " ";
		if( ! strnicmp(rLine, szString, lenLCS+1) ) {
			FastDeleteString(rLine, 0, nIdxY, lenLCS+1); return lenLCS+1;
		} else if( ! strnicmp(rLine, LCS, lenLCS) ) {
			FastDeleteString(rLine, 0, nIdxY, lenLCS); return lenLCS;
		} else return 0;
	} else return 0;
}

INT CCedtDoc::FastConvertTabsToSpaces(CAnalyzedString & rLine, INT nIdxY)
{
	INT nLen = rLine.GetLength(); if( ! nLen ) return 0;
	INT nTabsConverted = 0, nTabSize = CCedtView::m_nTabSize;

	for( INT j = 0; j < nLen; j++ ) {
		if( rLine[j] == '\t' ) {
			INT nSpaces = nTabSize - (j % nTabSize);
			FastDeleteChar(rLine, j, nIdxY);
			FastInsertString(rLine, j, nIdxY, CString(' ', nSpaces));
			nTabsConverted++; nLen += nSpaces - 1;
		}
	}

	return nTabsConverted;
}

INT CCedtDoc::FastConvertSpacesToTabs(CAnalyzedString & rLine, INT nIdxY)
{
	INT nTabsDeleted = FastConvertTabsToSpaces(rLine, nIdxY);

	INT nLen = rLine.GetLength(); if( ! nLen ) return 0;
	INT nTabsConverted = 0, nTabSize = CCedtView::m_nTabSize;

	for( INT j = nLen / nTabSize * nTabSize; j >= nTabSize; j -= nTabSize ) {
		INT i = j; INT nSpaces = 0;
		while( i > j - nTabSize && rLine[i-1] == ' ' ) { i--; nSpaces++; }
		if( nSpaces >= 2 ) {
			FastDeleteString(rLine, i, nIdxY, nSpaces);
			FastInsertChar(rLine, i, nIdxY, '\t');
			nTabsConverted++; nLen += 1 - nSpaces;
		}
	}

	return nTabsConverted;
}

INT CCedtDoc::FastLeadingSpacesToTabs(CAnalyzedString & rLine, INT nIdxY)
{
	INT nLen = rLine.GetLength(); if( ! nLen ) return 0;
	INT nTabsConverted = 0, nTabSize = CCedtView::m_nTabSize;

	INT j = 0; while( j < nLen && rLine[j] == ' ' ) j++;
	INT nSpaces = (j / nTabSize) * nTabSize;
	nTabsConverted = nSpaces / nTabSize;

	if( nTabsConverted ) {
		FastDeleteString(rLine, 0, nIdxY, nSpaces);
		FastInsertString(rLine, 0, nIdxY, CString('\t', nTabsConverted));
	}

	return nTabsConverted;
}

INT CCedtDoc::FastDeleteLeadingSpaces(CAnalyzedString & rLine, INT nIdxY)
{
	INT nLen = rLine.GetLength(); if( ! nLen ) return 0;

	if( rLine[0] == ' ' || rLine[0] == '\t' ) {
		INT j = 0; while( j < nLen && (rLine[j] == ' ' || rLine[j] == '\t') ) j++;
		FastDeleteString(rLine, 0, nIdxY, j); return j;
	} else return 0;
}

INT CCedtDoc::FastDeleteTrailingSpaces(CAnalyzedString & rLine, INT nIdxY)
{
	INT nLen = rLine.GetLength(); if( ! nLen ) return 0;

	if( rLine[nLen-1] == ' ' || rLine[nLen-1] == '\t' ) {
		INT j = 0; while( j < nLen && (rLine[nLen-j-1] == ' ' || rLine[nLen-j-1] == '\t') ) j++;
		FastDeleteString(rLine, nLen-j, nIdxY, j); return j;
	} else return 0;
}

⌨️ 快捷键说明

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