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

📄 ngtextbuffer.cpp

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 CPP
字号:

// NGTextBuffer.cpp : implementation file
//

#include "StdAfx.h"

#include "NGTextBuffer.h"


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



/////////////////////////////////////////////////////////////////////////////
// CNGTextBuffer

#define BUFFER_GROWBY 100			// Grow file buffer by 100 lines at a time

//#define	BUF_SIZE	1024


IMPLEMENT_DYNAMIC(CNGTextBuffer, CNGTextBuffer_BASE)


CNGTextBuffer::CNGTextBuffer(void)
{
}


CNGTextBuffer::~CNGTextBuffer(void)
{
}


/////////////////////////////////////////////////////////////////////////////
// CNGTextBuffer overrides

void CNGTextBuffer::Serialize(CArchive& ar) 
{
	ASSERT_VALID(this);
	
	CWaitCursor WaitCursor;
	m_sFileName = ar.GetFile()->GetFilePath();

	if (ar.IsLoading())
	{	// loading code
		Read(ar);
	}
	else
	{	// storing code
		Write(ar);
	}
}


void CNGTextBuffer::RemoveAll(void)
{
	m_arrayLines.RemoveAll();
}


/////////////////////////////////////////////////////////////////////////////
// Operations

CString& CNGTextBuffer::operator[](int nIndex)
{
	return m_arrayLines[nIndex];
}


CString CNGTextBuffer::operator[](int nIndex) const
{
	return m_arrayLines[nIndex];
}


/////////////////////////////////////////////////////////////////////////////
// File Read Implementation


/******************************************************************************
 *	Read from an archive
 *
 ******************************************************************************/

BOOL CNGTextBuffer::Read(CArchive& ar)
{
	BOOL bResult = FALSE;

	// First read the entire file into a buffer for processing
	m_arrayLines.SetSize(0, BUFFER_GROWBY);

	int nTotalLines = 0;
	while (TRUE)
	{
		CString sData;
		if (!ar.ReadString(sData))
		{
			TRACE1("End of file reached; %d lines read\n", nTotalLines);
			break;
		}
		nTotalLines++;

		// Expand tabs
//		sData = UnTabify(sData, 8);
		m_arrayLines.Add(sData);
	}
	if (m_arrayLines.GetSize() > 0)
	{
		// The file definitely exists and has been read successfully
		// From here on in its up to the parser...
		Parse();
	}
	else
	{
		//Error(ERR_FILE_EMPTY, ar.GetFile()->GetFilePath());
		AfxMessageBox("File is empty!");	//	temp - should be in string table anyhow
	}
	return bResult;
}


/******************************************************************************
 *	Parse the whole buffer
 *
 ******************************************************************************/

BOOL CNGTextBuffer::Parse(void)
{
	if (m_arrayLines.GetSize() > 0)
	{
		// The file definitely exists and has been read successfully
		// From here on in its up to the parser...
		for (int nLineNo = 0; nLineNo < m_arrayLines.GetSize(); nLineNo++)
		{
			CString sLine = m_arrayLines[nLineNo];

/*
			// Check line length
			if (sLine.GetLength() > BUF_SIZE)
			{
	//			Error(ERR_LINE_LEN_EXCEEDED);
				AfxMessageBox("Line Length Exceeded");	//	temp - should be in string table anyhow
				break;
			}
*/
			Parse(sLine);
		}
		return TRUE;
	}
	return FALSE;
}


/******************************************************************************
 *	Parse the given line
 *
 ******************************************************************************/

BOOL CNGTextBuffer::Parse(const CString& /*rsLine*/)
{
	return FALSE;
}




/////////////////////////////////////////////////////////////////////////////
// File Write Implementation

/******************************************************************************
 *	Write the buffer to an archive
 *
 ******************************************************************************/

BOOL CNGTextBuffer::Write(CArchive& ar)
{
	BOOL bResult = TRUE;
	if (m_arrayLines.GetSize() > 0)
	{
		for (int nLine = 0; nLine <= m_arrayLines.GetUpperBound(); nLine++)
		{
			TRY
			{
				ar.WriteString( m_arrayLines[nLine] + _T("\r\n") );
			}
			CATCH( CFileException, e )
			{
				CString sMsg;
				//sMsg.Format(IDP_ERR_WRITING_FILE, ar.GetFile()->GetFilePath());
				sMsg.Format(_T("Error writing file %s"), ar.GetFile()->GetFilePath());
				AfxMessageBox(sMsg, MB_OK | MB_ICONSTOP);
				bResult = FALSE;
			}
			END_CATCH
		}
	}
	return bResult;
}


⌨️ 快捷键说明

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