2025-11-27 16:46:48 +09:00

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;
}