|
|
/****************************************************************************
IHJDict.cpp : Implementation of CHJDict
Copyright 2000 Microsoft Corp.
History: 02-AUG-2000 bhshin remove unused method for Hand Writing team 17-MAY-2000 bhshin remove unused method for CICERO 02-FEB-2000 bhshin created ****************************************************************************/ #include "private.h"
#include "HjDict.h"
#include "IHJDict.h"
#include "Lookup.h"
#include "..\inc\common.h"
// maximum output buffer size
#define MAX_OUT_BUFFER 512
#define SZLEX_FILENAME "hanja.lex"
/////////////////////////////////////////////////////////////////////////////
// CHJDict
// CHJDict::~CHjDict
//
// load main lexicon
//
// Parameters:
// lpcszPath -> (LPCSTR) lexicon path
//
// Result:
// (HRESULT)
//
// 02AUG2000 bhshin began
CHJDict::~CHJDict() { if (m_fLexOpen) CloseLexicon(&m_LexMap); }
// CHJDict::Init
//
// load main lexicon
//
// Parameters:
// lpcszPath -> (LPCSTR) lexicon path
//
// Result:
// (HRESULT)
//
// 02FEB2000 bhshin began
STDMETHODIMP CHJDict::Init() { CHAR szLexPath[MAX_PATH], szLexPathExpanded[MAX_PATH] ; HKEY hKey; DWORD dwCb, dwType;
if (m_fLexOpen) { CloseLexicon(&m_LexMap); m_fLexOpen = FALSE; }
// default value
StringCchCopy(szLexPath, MAX_PATH, "%WINDIR%\\IME\\IMKR6_1\\Dicts\\"); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, g_szIMEDirectoriesKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { dwCb = sizeof(szLexPath); dwType = REG_EXPAND_SZ;
RegQueryValueEx(hKey, g_szDicPath, NULL, &dwType, (LPBYTE)szLexPath, &dwCb); RegCloseKey(hKey); }
ExpandEnvironmentStrings(szLexPath, szLexPathExpanded, sizeof(szLexPathExpanded)); if (szLexPathExpanded[lstrlen(szLexPathExpanded)-1] != '\\') StringCchCat(szLexPathExpanded, MAX_PATH, "\\"); StringCchCat(szLexPathExpanded, MAX_PATH, SZLEX_FILENAME);
if (!OpenLexicon(szLexPathExpanded, &m_LexMap)) return E_FAIL;
m_fLexOpen = TRUE;
return S_OK; }
// CHJDict::LookupHangulOfHanja
//
// lookup hangul of input hanja string
//
// Parameters:
// pwszHanja -> (LPCWSTR) input hanja string
// pwszHangul -> (WCHAR *) output hangul string
// cchHangul -> (int) output buffer size
//
// Result:
// (HRESULT)
//
// 02FEB2000 bhshin began
STDMETHODIMP CHJDict::LookupHangulOfHanja(LPCWSTR pwszHanja, WCHAR *pwszHangul, int cchHangul) { int cchHanja; BOOL fLookup; cchHanja = wcslen(pwszHanja); if (cchHanja == 0) return E_FAIL;
// output buffer insufficient
if (cchHangul < cchHanja) return E_FAIL;
fLookup = ::LookupHangulOfHanja(&m_LexMap, pwszHanja, cchHanja, pwszHangul, cchHangul); if (!fLookup) return E_FAIL; // it shoud be found
return S_OK; }
// CHJDict::LookupMeaning
//
// lookup hanja meaning
//
// Parameters:
// wchHanja -> (WCHAR) input hanja unicode
// pwszMeaning -> (LPWSTR) output meaning
// cchMeaning -> (int) output buffer size
//
// Result:
// (HRESULT)
//
// 09FEB2000 bhshin began
STDMETHODIMP CHJDict::LookupMeaning(WCHAR wchHanja, LPWSTR pwszMeaning, int cchMeaning) { BOOL fLookup;
fLookup = ::LookupMeaning(&m_LexMap, (WCHAR)wchHanja, pwszMeaning, cchMeaning); if (!fLookup) return E_FAIL;
return S_OK; }
|