134 lines
3.2 KiB
C++
134 lines
3.2 KiB
C++
// ParserViewDoc.cpp : implementation of the CParserViewDoc class
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "ParserView.h"
|
|
|
|
#include "ParserViewDoc.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CParserViewDoc
|
|
|
|
IMPLEMENT_DYNCREATE(CParserViewDoc, CDocument)
|
|
|
|
BEGIN_MESSAGE_MAP(CParserViewDoc, CDocument)
|
|
//{{AFX_MSG_MAP(CParserViewDoc)
|
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
|
// DO NOT EDIT what you see in these blocks of generated code!
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CParserViewDoc construction/destruction
|
|
|
|
CParserViewDoc::CParserViewDoc()
|
|
{
|
|
m_parser.SetErrorRptFunction(ReportError, (DWORD) this);
|
|
m_HTMLparser.SetErrorRptFunction(ReportError, (DWORD) this);
|
|
m_bHTML = FALSE;
|
|
}
|
|
|
|
CParserViewDoc::~CParserViewDoc()
|
|
{
|
|
}
|
|
|
|
COXParser* CParserViewDoc::GetParser()
|
|
{
|
|
if (m_bHTML)
|
|
return &m_HTMLparser;
|
|
else
|
|
return &m_parser;
|
|
}
|
|
|
|
BOOL CParserViewDoc::OnNewDocument()
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CParserViewDoc serialization
|
|
|
|
void CParserViewDoc::Serialize(CArchive& /*ar*/)
|
|
{
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CParserViewDoc diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CParserViewDoc::AssertValid() const
|
|
{
|
|
CDocument::AssertValid();
|
|
}
|
|
|
|
void CParserViewDoc::Dump(CDumpContext& dc) const
|
|
{
|
|
CDocument::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CParserViewDoc commands
|
|
|
|
BOOL CParserViewDoc::OnOpenDocument(LPCTSTR lpszPathName)
|
|
{
|
|
//CWaitCursor wait;
|
|
SetPathName(lpszPathName);
|
|
|
|
#ifdef _UNICODE
|
|
USES_CONVERSION
|
|
LPTSTR ptr = (LPTSTR)wcsrchr(A2W(lpszPathName), TCHAR('.'));
|
|
#else
|
|
LPTSTR ptr = (LPTSTR)strrchr(lpszPathName, TCHAR('.'));
|
|
#endif
|
|
if (ptr)
|
|
m_bHTML = (_tcsstr(ptr, _T("htm")) != NULL);
|
|
|
|
|
|
#ifdef _DEBUG
|
|
clock_t start = clock();
|
|
#endif
|
|
|
|
GetParser()->ParseFile(lpszPathName);
|
|
|
|
#ifdef _DEBUG
|
|
CString str;
|
|
str.Format(_T("Parse time: %0.2f seconds"), (double) (clock() - start) / (double) CLOCKS_PER_SEC);
|
|
//AfxMessageBox(str);
|
|
TRACE1("%s\n", str);
|
|
#endif
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CParserViewDoc::OnSaveDocument(LPCTSTR lpszPathName)
|
|
{
|
|
CWaitCursor wait;
|
|
return GetParser()->WriteFile(lpszPathName);
|
|
}
|
|
|
|
BOOL CParserViewDoc::ReportError(int nError, LPCTSTR szError, int nLine, int nCol, DWORD dwData)
|
|
{
|
|
CString str;
|
|
CParserViewDoc* pDoc = (CParserViewDoc*) dwData;
|
|
|
|
if (pDoc)
|
|
str.Format(_T("Error parsing file %s.\n\nLine %d, Column %d. Error %d: %s\n\n%s"),
|
|
pDoc->GetPathName(), nLine, nCol,
|
|
nError, pDoc->GetParser()->TranslateErrorCode(nError),
|
|
szError);
|
|
else
|
|
str.Format(_T("Error parsing file.\n\nLine %d, Column %d. Error %d: %s\n\n%s"),
|
|
nLine, nCol, nError, pDoc->GetParser()->TranslateErrorCode(nError),
|
|
szError);
|
|
|
|
AfxMessageBox(str, MB_ICONEXCLAMATION);
|
|
return FALSE;
|
|
} |