windows-nt/Source/XPSP1/NT/enduser/speech/sapi/tools/gramcomp/comp.h
2020-09-26 16:20:57 +08:00

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.