187 lines
6.9 KiB
C++
187 lines
6.9 KiB
C++
/******************************************************************************
|
|
* Comp.h
|
|
* This module contains the base definitions for the SAPI 5 Grammar
|
|
* portion of the GramComp application.
|
|
*
|
|
* Copyright (c) 2000 Microsoft Corporation. All Rights Reserved.
|
|
******************************************************************************/
|
|
|
|
#ifndef __COMPILER__CLASS__
|
|
#define __COMPILER__CLASS__
|
|
|
|
#define MAX_LOADSTRING 100
|
|
|
|
|
|
// Helper function
|
|
inline char ConfidenceGroupChar(char Confidence)
|
|
{
|
|
switch (Confidence)
|
|
{
|
|
case SP_LOW_CONFIDENCE:
|
|
return '-';
|
|
|
|
case SP_NORMAL_CONFIDENCE:
|
|
return ' ';
|
|
|
|
case SP_HIGH_CONFIDENCE:
|
|
return '+';
|
|
|
|
default:
|
|
_ASSERTE(false);
|
|
return '?';
|
|
}
|
|
}
|
|
|
|
|
|
//--- Class, Struct and Union Definitions -------------------------------------
|
|
class CCompiler : public ISpErrorLog
|
|
{
|
|
public:
|
|
CCompiler(HINSTANCE hInstance): m_hInstance(hInstance),
|
|
m_hWnd(NULL),
|
|
m_hAccelTable(0),
|
|
m_hrWorstError(S_OK),
|
|
m_hDlg(NULL),
|
|
m_fNeedStartCompile(TRUE),
|
|
m_fSilent(FALSE),
|
|
m_fCommandLine(FALSE),
|
|
m_fGenerateHeader(FALSE),
|
|
m_fGotReco(FALSE),
|
|
m_hWndEdit(NULL),
|
|
m_hWndStatus(NULL),
|
|
m_hMod(0)
|
|
{
|
|
m_szXMLSrcFile[0] = 0;
|
|
m_szCFGDestFile[0] = 0;
|
|
m_szHeaderDestFile[0] = 0;
|
|
}
|
|
~CCompiler();
|
|
|
|
STDMETHODIMP QueryInterface(REFIID riid, void ** ppv)
|
|
{
|
|
if (riid == __uuidof(IUnknown) ||
|
|
riid == __uuidof(ISpErrorLog))
|
|
{
|
|
*ppv = (ISpErrorLog *)this;
|
|
return S_OK;
|
|
}
|
|
*ppv = NULL;
|
|
return E_NOINTERFACE;
|
|
}
|
|
STDMETHODIMP_(ULONG) AddRef()
|
|
{
|
|
return 2;
|
|
}
|
|
STDMETHODIMP_(ULONG) Release()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
HRESULT Initialize( int nCmdShow );
|
|
int Run();
|
|
static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
|
static LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
static LRESULT CALLBACK Find(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
static LRESULT CALLBACK Goto(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
static LRESULT CALLBACK TestGrammar(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
void AddStatus(HRESULT hr, UINT uID, const TCHAR * pFmtString = NULL);
|
|
STDMETHODIMP AddError(const long lLine, HRESULT hr, const WCHAR * pszDescription, const WCHAR * pszHelpFile, DWORD dwHelpContext);
|
|
HRESULT EnterIdle();
|
|
HRESULT LoadGrammar(TCHAR* szPath);
|
|
HRESULT WriteStream(IStream * pStream, const char * pszText);
|
|
HRESULT StripWrite(IStream * pStream, const char * pszText);
|
|
BOOL CallOpenFileDialog( HWND hWnd, LPSTR szFileName, TCHAR* szFilter );
|
|
BOOL CallSaveFileDialog( HWND hWnd, TCHAR* szSaveFile );
|
|
HRESULT FileSave( HWND hWnd, CCompiler* pComp, TCHAR* szSaveFile );
|
|
HRESULT Compile( HWND hWnd, TCHAR* szSaveFileName, TCHAR* szTitle, CCompiler* pComp );
|
|
void RecoEvent( HWND hDlg, CCompiler* pComp );
|
|
HRESULT EmulateRecognition( WCHAR *pszText );
|
|
|
|
void Recognize( HWND hDlg, CCompiler &rComp, CSpEvent &rEvent );
|
|
HRESULT ConstructPropertyDisplay(const SPPHRASEELEMENT *pElem, const SPPHRASEPROPERTY *pProp,
|
|
CSpDynamicString & dstr, ULONG ulLevel);
|
|
HRESULT ConstructRuleDisplay(const SPPHRASERULE *pRule, CSpDynamicString &dstr, ULONG ulLevel);
|
|
|
|
|
|
inline void AddInternalError(HRESULT hr, UINT uID, const TCHAR * pFmtString = NULL)
|
|
{
|
|
if (hr != S_OK)
|
|
{
|
|
AddStatus(hr, uID, pFmtString);
|
|
}
|
|
}
|
|
|
|
// Member functions for the command line version of the application
|
|
BOOL InitDialog(HWND);
|
|
static int CALLBACK CCompiler::DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
|
|
|
|
|
|
public:
|
|
const HINSTANCE m_hInstance; // Instance handle of process
|
|
HWND m_hWnd; // Window handle of dialog
|
|
HACCEL m_hAccelTable; // Handle to the accelerators
|
|
BOOL m_fNeedStartCompile; // Need a recompile?
|
|
BOOL m_fSilent; // Silent or non-silent mode
|
|
BOOL m_fCommandLine; // App being run from command line?
|
|
BOOL m_fGenerateHeader; // Create a header file from compilation?
|
|
BOOL m_fGotReco; // Was a recognition received?
|
|
HWND m_hDlg; // Window handle of command line compile dialog
|
|
HWND m_hWndEdit; // Window handle of main edit window
|
|
HWND m_hWndStatus; // Window handle of compile status window
|
|
HRESULT m_hrWorstError; // Error code from compiler
|
|
HMODULE m_hMod; // Handle to the rich edit control
|
|
CComPtr<ISpErrorLog> m_cpError; // Error log object
|
|
CComPtr<ISpGrammarCompiler> m_cpCompiler; // Grammar compiler interface
|
|
CComPtr<ISpRecoGrammar> m_cpRecoGrammar; // Grammar compiler interface
|
|
CComPtr<IRichEditOle> m_cpRichEdit; // OLE interface to the rich edit control
|
|
CComPtr<ITextDocument> m_cpTextDoc; // Rich edit control interface
|
|
CComPtr<ITextSelection> m_cpTextSel; // Rich edit control interface
|
|
CComPtr<ISpRecognizer> m_cpRecognizer; // SR engine interface
|
|
CComPtr<ISpRecoContext> m_cpRecoContext; // SR engine interface
|
|
TCHAR m_szXMLSrcFile[MAX_PATH]; // Path to xml source file
|
|
TCHAR m_szCFGDestFile[MAX_PATH]; // Output location for cfg file
|
|
TCHAR m_szHeaderDestFile[MAX_PATH]; // Output location for header file
|
|
CSpDynamicString m_dstr;
|
|
|
|
};
|
|
|
|
|
|
class CError : public ISpErrorLog
|
|
{
|
|
public:
|
|
CError() : m_pszFileName(NULL) {};
|
|
CError(const char * pszFileName)
|
|
{
|
|
m_pszFileName = pszFileName;
|
|
}
|
|
STDMETHODIMP QueryInterface(REFIID riid, void ** ppv)
|
|
{
|
|
if (riid == __uuidof(IUnknown) ||
|
|
riid == __uuidof(ISpErrorLog))
|
|
{
|
|
*ppv = (ISpErrorLog *)this;
|
|
return S_OK;
|
|
}
|
|
*ppv = NULL;
|
|
return E_NOINTERFACE;
|
|
}
|
|
STDMETHODIMP_(ULONG) AddRef()
|
|
{
|
|
return 2;
|
|
}
|
|
STDMETHODIMP_(ULONG) Release()
|
|
{
|
|
return 1;
|
|
}
|
|
// -- ISpErrorLog
|
|
STDMETHODIMP AddError(const long lLine, HRESULT hr, const WCHAR * pszDescription, const WCHAR * pszHelpFile, DWORD dwHelpContext);
|
|
|
|
// -- local
|
|
HRESULT Init(const char *pszFileName);
|
|
|
|
// --- data members
|
|
const char * m_pszFileName;
|
|
};
|
|
|
|
#endif // Must be the last line of this file.
|