亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ccrystaltextbuffer.cpp

?? 一個類似VB代碼編輯器.通過一個多文檔模板導出
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
#include "stdafx.h"
#include <malloc.h>
#include "editcmd.h"
#include "CCrystalTextBuffer.h"
#ifndef __AFXPRIV_H__
#pragma message("Include <afxpriv.h> in your stdafx.h to avoid this message")
#include <afxpriv.h>
#endif

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//	Line allocation granularity
#define		CHAR_ALIGN					16
#define		ALIGN_BUF_SIZE(size)		((size) / CHAR_ALIGN) * CHAR_ALIGN + CHAR_ALIGN;

#define		UNDO_BUF_SIZE				1024

const TCHAR crlf[] = _T("\r\n");

#ifdef _DEBUG
#define _ADVANCED_BUGCHECK	1
#endif


/////////////////////////////////////////////////////////////////////////////
// CCrystalTextBuffer::SUndoRecord

void CCrystalTextBuffer::SUndoRecord::SetText(LPCTSTR pszText)
{
	m_pszText = NULL;
	if (pszText != NULL && pszText[0] != _T('\0'))
	{
		int nLength = _tcslen(pszText);
		if (nLength > 1)
		{
			m_pszText = new TCHAR[(nLength + 1) * sizeof(TCHAR)];
			_tcscpy(m_pszText, pszText);
		}
		else
		{
			m_szText[0] = pszText[0];
		}
	}
}

void CCrystalTextBuffer::SUndoRecord::FreeText()
{
	if (HIWORD((DWORD) m_pszText) != 0)
		delete m_pszText;
}


/////////////////////////////////////////////////////////////////////////////
// CCrystalTextBuffer::CUpdateContext

void CCrystalTextBuffer::CInsertContext::RecalcPoint(CPoint &ptPoint)
{
	ASSERT(m_ptEnd.y > m_ptStart.y ||
		   m_ptEnd.y == m_ptStart.y && m_ptEnd.x >= m_ptStart.x);
	if (ptPoint.y < m_ptStart.y)
		return;
	if (ptPoint.y > m_ptStart.y)
	{
		ptPoint.y += (m_ptEnd.y - m_ptStart.y);
		return;
	}
	if (ptPoint.x <= m_ptStart.x)
		return;
	ptPoint.y += (m_ptEnd.y - m_ptStart.y);
	ptPoint.x = m_ptEnd.x + (ptPoint.x - m_ptStart.x);
}

void CCrystalTextBuffer::CDeleteContext::RecalcPoint(CPoint &ptPoint)
{
	ASSERT(m_ptEnd.y > m_ptStart.y ||
		   m_ptEnd.y == m_ptStart.y && m_ptEnd.x >= m_ptStart.x);
	if (ptPoint.y < m_ptStart.y)
		return;
	if (ptPoint.y > m_ptEnd.y)
	{
		ptPoint.y -= (m_ptEnd.y - m_ptStart.y);
		return;
	}
	if (ptPoint.y == m_ptEnd.y && ptPoint.x >= m_ptEnd.x)
	{
		ptPoint.y = m_ptStart.y;
		ptPoint.x = m_ptStart.x + (ptPoint.x - m_ptEnd.x);
		return;
	}
	if (ptPoint.y == m_ptStart.y)
	{
		if (ptPoint.x > m_ptStart.x)
			ptPoint.x = m_ptStart.x;
		return;
	}
	ptPoint = m_ptStart;
}


/////////////////////////////////////////////////////////////////////////////
// CCrystalTextBuffer

IMPLEMENT_DYNCREATE(CCrystalTextBuffer, CCmdTarget)

CCrystalTextBuffer::CCrystalTextBuffer()
{
	m_bInit = FALSE;
	m_bReadOnly = FALSE;
	m_bModified = FALSE;
	m_bCreateBackupFile = FALSE;
	m_nUndoPosition = 0;
}

CCrystalTextBuffer::~CCrystalTextBuffer()
{
	ASSERT(! m_bInit);			//	You must call FreeAll() before deleting the object
}


BEGIN_MESSAGE_MAP(CCrystalTextBuffer, CCmdTarget)
	//{{AFX_MSG_MAP(CCrystalTextBuffer)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CCrystalTextBuffer message handlers

void CCrystalTextBuffer::InsertLine(LPCTSTR pszLine, int nLength /*= -1*/, int nPosition /*= -1*/)
{
	if (nLength == -1)
	{
		if (pszLine == NULL)
			nLength = 0;
		else
			nLength = lstrlen(pszLine);
	}

	SLineInfo li;
	li.m_nLength = nLength;
	li.m_nMax = ALIGN_BUF_SIZE(li.m_nLength);
	ASSERT(li.m_nMax >= li.m_nLength);
	if (li.m_nMax > 0)
		li.m_pcLine = new TCHAR[li.m_nMax];
	if (li.m_nLength > 0)
		memcpy(li.m_pcLine, pszLine, sizeof(TCHAR) * li.m_nLength);

	if (nPosition == -1)
		m_aLines.Add(li);
	else
		m_aLines.InsertAt(nPosition, li);

#ifdef _DEBUG
	int nLines = m_aLines.GetSize();
	if (nLines % 5000 == 0)
		TRACE1("%d lines loaded!\n", nLines);
#endif
}

void CCrystalTextBuffer::AppendLine(int nLineIndex, LPCTSTR pszChars, int nLength /*= -1*/)
{
	if (nLength == -1)
	{
		if (pszChars == NULL)
			return;
		nLength = lstrlen(pszChars);
	}

	if (nLength == 0)
		return;

	register SLineInfo &li = m_aLines[nLineIndex];
	int nBufNeeded = li.m_nLength + nLength;
	if (nBufNeeded > li.m_nMax)
	{
		li.m_nMax = ALIGN_BUF_SIZE(nBufNeeded);
		ASSERT(li.m_nMax >= li.m_nLength + nLength);
		TCHAR *pcNewBuf = new TCHAR[li.m_nMax];
		if (li.m_nLength > 0)
			memcpy(pcNewBuf, li.m_pcLine, sizeof(TCHAR) * li.m_nLength);
		delete li.m_pcLine;
		li.m_pcLine = pcNewBuf;
	}
	memcpy(li.m_pcLine + li.m_nLength, pszChars, sizeof(TCHAR) * nLength);
	li.m_nLength += nLength;
	ASSERT(li.m_nLength <= li.m_nMax);
}

void CCrystalTextBuffer::FreeAll()
{
	//	Free text
	int nCount = m_aLines.GetSize();
	for (int I = 0; I < nCount; I ++)
	{
		if (m_aLines[I].m_nMax > 0)
			delete m_aLines[I].m_pcLine;
	}
	m_aLines.RemoveAll();

	//	Free undo buffer
	int nBufSize = m_aUndoBuf.GetSize();
	for (I = 0; I < nBufSize; I ++)
		m_aUndoBuf[I].FreeText();
	m_aUndoBuf.RemoveAll();

	m_bInit = FALSE;
}

BOOL CCrystalTextBuffer::InitNew(int nCrlfStyle /*= CRLF_STYLE_DOS*/)
{
	ASSERT(! m_bInit);
	ASSERT(m_aLines.GetSize() == 0);
	ASSERT(nCrlfStyle >= 0 && nCrlfStyle <= 2);
	InsertLine(_T(""));
	m_bInit = TRUE;
	m_bReadOnly = FALSE;
	m_nCRLFMode = nCrlfStyle;
	m_bModified = FALSE;
	m_nSyncPosition = m_nUndoPosition = 0;
	m_bUndoGroup = m_bUndoBeginGroup = FALSE;
	m_nUndoBufSize = UNDO_BUF_SIZE;
	ASSERT(m_aUndoBuf.GetSize() == 0);
	UpdateViews(NULL, NULL, UPDATE_RESET);
	return TRUE;
}

BOOL CCrystalTextBuffer::GetReadOnly() const
{
	bool dd =m_bInit;
	ASSERT(m_bInit);	//	Text buffer not yet initialized.
                        //you must call InitNew() or LoadFromFile() first!
	return m_bReadOnly;
}

void CCrystalTextBuffer::SetReadOnly(BOOL bReadOnly /*= TRUE*/)
{
	ASSERT(m_bInit);	//	Text buffer not yet initialized.
						//	You must call InitNew() or LoadFromFile() first!
	m_bReadOnly = bReadOnly;
}

static const char *crlfs[] =
{
	"\x0d\x0a",			//	DOS/Windows style
	"\x0a\x0d",			//	UNIX style
	"\x0a"				//	Macintosh style
};

BOOL CCrystalTextBuffer::LoadFromFile(LPCTSTR pszFileName, int nCrlfStyle /*= CRLF_STYLE_AUTOMATIC*/)
{
	ASSERT(! m_bInit);
	ASSERT(m_aLines.GetSize() == 0);

	HANDLE hFile = NULL;
	int nCurrentMax = 256;
	char *pcLineBuf = new char[nCurrentMax];

	BOOL bSuccess = FALSE;
	__try
	{
		DWORD dwFileAttributes = ::GetFileAttributes(pszFileName);
		if (dwFileAttributes == (DWORD) -1)
			__leave;

		hFile = ::CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
					OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
		if (hFile == INVALID_HANDLE_VALUE)
			__leave;

		int nCurrentLength = 0;

		const DWORD dwBufSize = 32768;
		char *pcBuf = (char *) _alloca(dwBufSize);
		DWORD dwCurSize;
		if (! ::ReadFile(hFile, pcBuf, dwBufSize, &dwCurSize, NULL))
			__leave;

		if (nCrlfStyle == CRLF_STYLE_AUTOMATIC)
		{
			//	Try to determine current CRLF mode
			for (DWORD I = 0; I < dwCurSize; I ++)
			{
				if (pcBuf[I] == _T('\x0a'))
					break;
			}
			if (I == dwCurSize)
			{
				//	By default (or in the case of empty file), set DOS style
				nCrlfStyle = CRLF_STYLE_DOS;
			}
			else
			{
				//	Otherwise, analyse the first occurance of line-feed character
				if (I > 0 && pcBuf[I - 1] == _T('\x0d'))
				{
					nCrlfStyle = CRLF_STYLE_DOS;
				}
				else
				{
					if (I < dwCurSize - 1 && pcBuf[I + 1] == _T('\x0d'))
						nCrlfStyle = CRLF_STYLE_UNIX;
					else
						nCrlfStyle = CRLF_STYLE_MAC;
				}
			}
		}

		ASSERT(nCrlfStyle >= 0 && nCrlfStyle <= 2);
		m_nCRLFMode = nCrlfStyle;
		const char *crlf = crlfs[nCrlfStyle];

		m_aLines.SetSize(0, 4096);

		DWORD dwBufPtr = 0;
		int nCrlfPtr = 0;
		USES_CONVERSION;
		while (dwBufPtr < dwCurSize)
		{
			int c = pcBuf[dwBufPtr];
			dwBufPtr ++;
			if (dwBufPtr == dwCurSize && dwCurSize == dwBufSize)
			{
				if (! ::ReadFile(hFile, pcBuf, dwBufSize, &dwCurSize, NULL))
					__leave;
				dwBufPtr = 0;
			}

			pcLineBuf[nCurrentLength] = (char) c;
			nCurrentLength ++;
			if (nCurrentLength == nCurrentMax)
			{
				//	Reallocate line buffer
				nCurrentMax += 256;
				char *pcNewBuf = new char[nCurrentMax];
				memcpy(pcNewBuf, pcLineBuf, nCurrentLength);
				delete pcLineBuf;
				pcLineBuf = pcNewBuf;
			}

			if ((char) c == crlf[nCrlfPtr])
			{
				nCrlfPtr ++;
				if (crlf[nCrlfPtr] == 0)
				{
					pcLineBuf[nCurrentLength - nCrlfPtr] = 0;
					InsertLine(A2T(pcLineBuf));
					nCurrentLength = 0;
					nCrlfPtr = 0;
				}
			}
			else
				nCrlfPtr = 0;
		}

		pcLineBuf[nCurrentLength] = 0;
		InsertLine(A2T(pcLineBuf));

		ASSERT(m_aLines.GetSize() > 0);		//	At least one empty line must present

		m_bInit = TRUE;
		m_bReadOnly = (dwFileAttributes & FILE_ATTRIBUTE_READONLY) != 0;
		m_bModified = FALSE;
		m_bUndoGroup = m_bUndoBeginGroup = FALSE;
		m_nUndoBufSize = UNDO_BUF_SIZE;
		m_nSyncPosition = m_nUndoPosition = 0;
		ASSERT(m_aUndoBuf.GetSize() == 0);
		bSuccess = TRUE;

		UpdateViews(NULL, NULL, UPDATE_RESET);
	}
	__finally
	{
		if (pcLineBuf != NULL)
			delete pcLineBuf;
		if (hFile != NULL)
			::CloseHandle(hFile);
	}
	return bSuccess;
}

BOOL CCrystalTextBuffer::SaveToFile(LPCTSTR pszFileName, int nCrlfStyle /*= CRLF_STYLE_AUTOMATIC*/, BOOL bClearModifiedFlag /*= TRUE*/)
{
	ASSERT(nCrlfStyle == CRLF_STYLE_AUTOMATIC || nCrlfStyle == CRLF_STYLE_DOS||
			nCrlfStyle == CRLF_STYLE_UNIX || nCrlfStyle == CRLF_STYLE_MAC);
	ASSERT(m_bInit);
	HANDLE hTempFile = INVALID_HANDLE_VALUE;
	HANDLE hSearch = INVALID_HANDLE_VALUE;
	TCHAR szTempFileDir[_MAX_PATH + 1];
	TCHAR szTempFileName[_MAX_PATH + 1];
	TCHAR szBackupFileName[_MAX_PATH + 1];
	BOOL bSuccess = FALSE;
	__try
	{
		TCHAR drive[_MAX_PATH], dir[_MAX_PATH], name[_MAX_PATH], ext[_MAX_PATH];
#ifdef _UNICODE
		_wsplitpath(pszFileName, drive, dir, name, ext);
#else
		_splitpath(pszFileName, drive, dir, name, ext);
#endif
		lstrcpy(szTempFileDir, drive);
		lstrcat(szTempFileDir, dir);
		lstrcpy(szBackupFileName, pszFileName);
		lstrcat(szBackupFileName, _T(".bak"));

		if (::GetTempFileName(szTempFileDir, _T("CRE"), 0, szTempFileName) == 0)
			__leave;

		hTempFile = ::CreateFile(szTempFileName, GENERIC_WRITE, 0, NULL,
					CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人影视亚洲图片在线| 日本午夜精品视频在线观看| 欧美一级在线视频| 一本大道综合伊人精品热热| 成人精品一区二区三区中文字幕 | 高清beeg欧美| 国产一区二区视频在线播放| 国产在线播放一区三区四| 免费视频最近日韩| 久久99精品网久久| 黄色日韩网站视频| 国产麻豆91精品| 国产精品99久久久久久似苏梦涵 | 国产精品亚洲专一区二区三区| 久久国产婷婷国产香蕉| 激情六月婷婷久久| 成人美女视频在线观看| 97久久超碰国产精品电影| 91小视频在线免费看| 91国产精品成人| 欧美一区二区视频在线观看2020| 欧美一区欧美二区| 久久久久国产精品麻豆ai换脸| 久久久久国色av免费看影院| 国产精品不卡在线| 午夜精品久久久久久| 蜜桃视频一区二区三区在线观看| 黑人巨大精品欧美一区| 成人免费毛片a| 欧美亚洲免费在线一区| 91精品国产91久久久久久一区二区| 日韩精品一区二区三区蜜臀| 国产丝袜欧美中文另类| 亚洲一区二区四区蜜桃| 六月丁香婷婷色狠狠久久| 成人sese在线| 538prom精品视频线放| 久久精品视频网| 亚洲一区中文日韩| 国产一区中文字幕| 欧美日韩一区小说| 国产欧美一区二区精品性| 亚洲情趣在线观看| 九九精品一区二区| 一本色道**综合亚洲精品蜜桃冫| 日韩午夜在线观看| 亚洲精品伦理在线| 国产成人亚洲综合a∨猫咪| 在线精品视频一区二区| 欧美精品一区二区高清在线观看| 自拍偷在线精品自拍偷无码专区 | 韩国女主播一区二区三区| 91丨九色丨蝌蚪丨老版| 欧美精品一区二区三区很污很色的 | 一区二区三区不卡视频在线观看 | 国产亚洲人成网站| 午夜精品福利一区二区蜜股av | 一级女性全黄久久生活片免费| 精品一区二区三区在线观看国产| 色婷婷国产精品久久包臀| 亚洲精品一区二区三区蜜桃下载| 亚洲午夜精品网| www.欧美日韩国产在线| 日韩精品一区二| 日韩综合在线视频| 91精品啪在线观看国产60岁| 国产亚洲女人久久久久毛片| 美腿丝袜一区二区三区| 在线成人小视频| 一区二区三区四区亚洲| av亚洲精华国产精华精华| 久久久久国产免费免费| 国内精品免费在线观看| 欧美va亚洲va国产综合| 天堂蜜桃一区二区三区| 欧美三级视频在线| 亚洲国产精品久久人人爱 | 一区二区高清视频在线观看| 成人免费福利片| 国产精品久久久久影院| 丰满亚洲少妇av| 国产欧美1区2区3区| 国产成人免费在线视频| 中文字幕av在线一区二区三区| 国产高清在线精品| 中文字幕乱码日本亚洲一区二区| 高潮精品一区videoshd| 国产精品成人在线观看| 99久久99久久综合| 亚洲欧美国产高清| 欧美日韩1区2区| 日本成人在线网站| 久久老女人爱爱| 丁香婷婷深情五月亚洲| 亚洲色图在线视频| 欧美日韩国产色站一区二区三区| 日韩中文字幕一区二区三区| 91精品欧美综合在线观看最新| 91日韩在线专区| 亚洲一区二区三区四区五区中文| 欧美剧情电影在线观看完整版免费励志电影 | 精品国产髙清在线看国产毛片| 狠狠色丁香婷婷综合| 欧美国产精品专区| 色丁香久综合在线久综合在线观看 | 久久伊99综合婷婷久久伊| 国产福利91精品| 亚洲伦理在线免费看| 欧美一区二区三区视频免费播放 | 亚洲女性喷水在线观看一区| 欧美日韩一区二区在线观看视频| 久久成人久久鬼色| 亚洲色图清纯唯美| 欧美久久久久久蜜桃| 国产九九视频一区二区三区| 亚洲欧美日韩久久精品| 日韩一级视频免费观看在线| 国产成人午夜精品5599| 亚洲午夜电影在线| 欧美国产在线观看| 69p69国产精品| 91亚洲男人天堂| 久久aⅴ国产欧美74aaa| 亚洲精品自拍动漫在线| 久久色.com| 欧美喷水一区二区| 99r国产精品| 国产一区二三区| 亚洲图片有声小说| 国产精品网曝门| 日韩一级二级三级| 欧洲一区在线观看| 成人中文字幕合集| 国产自产2019最新不卡| 午夜精品久久久久久不卡8050| 国产精品国产三级国产| 欧美精品一区二区三区很污很色的 | 欧美国产欧美综合| 精品国产乱码久久久久久夜甘婷婷 | 久久久精品天堂| 日韩一区二区三区在线观看| 91香蕉国产在线观看软件| 国产一区久久久| 狠狠色伊人亚洲综合成人| 日韩激情视频在线观看| 亚洲精品免费在线| 亚洲人成网站精品片在线观看| 国产精品沙发午睡系列990531| 久久青草国产手机看片福利盒子 | 国产99一区视频免费| 久久国产视频网| 美国毛片一区二区| 男人操女人的视频在线观看欧美 | 精品久久一二三区| 26uuuu精品一区二区| 日韩欧美自拍偷拍| 精品国产乱码久久久久久影片| 日韩精品在线一区| 欧美不卡123| 久久久久久久综合色一本| 精品88久久久久88久久久| 26uuu精品一区二区三区四区在线| 欧美videofree性高清杂交| 精品久久一区二区| 国产欧美一二三区| 国产精品电影院| 亚洲夂夂婷婷色拍ww47| 香蕉影视欧美成人| 久久精品国产一区二区三| 蜜臀久久久99精品久久久久久| 另类人妖一区二区av| 国产伦精一区二区三区| aaa欧美日韩| 欧美日韩一区二区在线观看视频| 91精品久久久久久久99蜜桃| 欧美成人在线直播| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 欧美猛男男办公室激情| 69av一区二区三区| 日本一区二区三区dvd视频在线| 国产精品丝袜一区| 亚洲成在人线在线播放| 久久aⅴ国产欧美74aaa| 成人午夜伦理影院| 欧美日韩亚洲国产综合| 欧美电影精品一区二区| 亚洲国产精品传媒在线观看| 亚洲精品国产精华液| 日日嗨av一区二区三区四区| 国产高清久久久| 欧洲精品在线观看| wwww国产精品欧美| 一区二区三区中文在线| 久久成人免费网| 在线观看亚洲专区| 久久尤物电影视频在线观看| 亚洲男同性恋视频| 国产精品一区二区视频| 欧美日韩在线播放一区| 国产区在线观看成人精品|