📄 engine.c
字号:
HANDLE hFile = NULL;
DWORD dwWrite = 0;
hFile = (HANDLE)hDE;
if (NULL == hFile)
{
return DE_CALLBACK_ERROR;
}
if(!WriteFile(hFile, lpBuffer, nLength, &dwWrite, NULL) || dwWrite != (DWORD)nLength)
{
return DE_CALLBACK_ERROR;
}
return dwWrite;
}
unsigned short* GetTypeStr(BYTE bType)
{
wchar_t* TypeStr[] = {
L"", /* no word type or other type*/
L"n.", /* noun */
L"pron.", /* pronoun */
L"vi.", /* verb intransitive */
L"vt.", /* verb transitive */
L"adj.", /* adjective */
L"adv.", /* sdverb*/
L"prep.", /* preposition */
L"conj.", /* conjunction */
L"int." , /* interjection*/
L"abbr.",
L"v."
};
if(bType < 12)
return (unsigned short*)TypeStr[bType];
else
return (unsigned short*)TypeStr[0];
}
void ReplaceHTML(TCHAR *szSource, TCHAR *szDest)
{
int i = 0;
int j = 0;
while (szSource[i])
{
switch(szSource[i])
{
case '<':
szDest[j++] = TEXT('&');
szDest[j++] = TEXT('l');
szDest[j++] = TEXT('t');
szDest[j++] = TEXT(';');
break;
case '>':
szDest[j++] = TEXT('&');
szDest[j++] = TEXT('g');
szDest[j++] = TEXT('t');
szDest[j++] = TEXT(';');
break;
default:
szDest[j++] = szSource[i];
}
i++;
}
}
static unsigned short TransYB(unsigned char ch)
//static unsigned char TransYB(unsigned char ch)
{
switch(ch)
{
case 0x01:
return '1';
//return 0x026a;
case 0x02:
return '2';
//return 0x025b;
case 0x03:
return '3';
//return 0x00e6;
case 0x04:
return '4';
//return 0x0251;
case 0x06:
return '5';
//return 0x0254;
case 0x0b:
return '6';
//return 0x0275;
case 0x0f:
return '7';
//return 0x028c;
case 0x10:
return '8';
//return 0x0259;
case 0x19:
return '9';
//return 0x014b;
case 0x1c:
return '0';
//return 0x00f0;
case 0x1d:
return '<';
//return 0x0283;
case 0x1e:
return '>';
//return 0x0292;
case 0x1f:
return '|';
//return 0x02cf;
default:
return (unsigned short)ch;
}
}
static char ReverseTransYB(char ch)
//static unsigned char TransYB(unsigned char ch)
{
switch(ch)
{
case '1':
return 0x01;
//return 0x026a;
case '2':
return 0x02;
//return 0x025b;
case '3':
return 0x03;
//return 0x00e6;
case '4':
return 0x04;
//return 0x0251;
case '5':
return 0x06;
//return 0x0254;
case '6':
return 0x0b;
//return 0x0275;
case '7':
return 0x0f;
//return 0x028c;
case '8':
return 0x10;
//return 0x0259;
case '9':
return 0x19;
//return 0x014b;
case '0':
return 0x1c;
//return 0x00f0;
case '<':
return 0x1d;
//return 0x0283;
case '>':
return 0x1e;
//return 0x0292;
case '|':
return 0x1f;
//return 0x02cf;
default:
return ch;
}
}
BOOL DDE_GetWordContent(LPTSTR lpBuf, LPTSTR lpWord)
{
if ( lpWord[0] < 0x0100 )
{
// 英文单词
DDE_GetWordContentEN(lpBuf, lpWord);
}
else
{
// 中文单词
DDE_GetWordContentCN(lpBuf, lpWord);
}
return TRUE;
}
// 函数名 : ShowContent
// 描述 : 显示当前单词的解释(英文)
// 返回类型 : BOOL
// 参数 : HWND hWndWordContent
BOOL DDE_GetWordContentEN(LPTSTR lpBuf, LPTSTR lpWord)
{
wchar_t* pOutput = (wchar_t*)lpBuf;
int nSize = DEGetWordContentSize(&g_pData, 0);
unsigned char* chOutput = (unsigned char*)malloc(sizeof(unsigned char)*nSize);
WCONTENT* output = (WCONTENT*)chOutput;
WCONTENT* pTemp = (WCONTENT*)output;
int NUM = 100;
ONEEXP_LIST pOneLib;
WORDLIST* pWordList;
BOOL bOne = FALSE;
wchar_t* pType = NULL;
int nNum = 1;
unsigned short* p = NULL;
unsigned short usIndex[12];
// 反义词
unsigned short temp[4] = {
0x53cd,
0x4e49,
0x8bcd,
0x0000
};
int iNum =0;
int i = 0;
DESTR pStr = NULL;
pOutput[0] = 0x00;
wcscpy(g_szFocusWord, lpWord);
if(nSize == 0)
return FALSE;
DEGetWordContent(&g_pData, 0, output);
while(pTemp)
{
if(pTemp->pContent != NULL)
{
//if(pTemp->pContent->phoneSym[0] != 0x00)/********** 20061129 wangjf **********/
if(pTemp->pContent->phoneSym != 0x00)
{
// 音标
p = pTemp->pContent->phoneSym;
wcscat(pOutput, L"2@[");
wcscat(pOutput, (wchar_t*)p);
wcscat(pOutput, L"]\n");
}
pOneLib = pTemp->pContent->explanation;
while(pOneLib)
{
pType = (wchar_t*)GetTypeStr(pOneLib->typeofword);
if(pType[0])
{
// 词性
wcscat(pOutput, L"6@");
wcscat(pOutput, pType);
wcscat(pOutput, L"\n");
}
pWordList = pOneLib->interpretation;
bOne = FALSE;
if(pWordList)
{
if(pWordList->pNext)
bOne = TRUE;
}
nNum = 1;
while(pWordList)
{
pStr = pWordList->pWord;
if(pStr != NULL)
{
if(bOne)
{
usIndex[0] = '(';
swprintf((wchar_t*)&usIndex[1], TEXT("%d"), nNum);
wcscat((wchar_t*)pOutput, (wchar_t*)usIndex);
wcscat((wchar_t*)pOutput, L")");
nNum++;
}
wcscat((wchar_t*)pOutput, (wchar_t*)pStr);
wcscat((wchar_t*)pOutput, L"\n");
}
pWordList = pWordList->pNext;
//wcscat(pOutput, L"\n");
}
pOneLib = pOneLib->pNext;
}
if(pTemp->pContent->numofAntonym != 0)
{
// 反义词
temp[0] = 0x53cd;
temp[1] = 0x4e49;
temp[2] = 0x8bcd;
temp[2] = 0x0000;
wcscat(pOutput, L"\n");
wcscat(pOutput, L"3@");
wcscat(pOutput, (wchar_t*)&temp[0]);
wcscat(pOutput, L"\n");
wcscat(pOutput, L"7@"); // 焦点单词
iNum = pTemp->pContent->numofAntonym;
i = 0;
while(i < iNum)
{
pStr = pTemp->pContent->pAntonym[i];
if(pStr)
{
wcscat(pOutput, L" ");
wcscat(pOutput, (wchar_t*)pStr);
}
i ++;
}
wcscat(pOutput, L"\n");
}
if(pTemp->pContent->numofSynonym != 0)
{
// 同义词
temp[0] = 0x8fd1,
temp[1] = 0x4e49,
temp[2] = 0x8bcd,
temp[3] = 0x0000;
wcscat(pOutput, L"\n");
wcscat(pOutput, L"4@");
wcscat(pOutput, (wchar_t*)&temp[0]);
wcscat(pOutput, L"\n");
wcscat(pOutput, L"7@"); // 焦点单词
iNum = pTemp->pContent->numofSynonym;
i = 0;
while(i < iNum)
{
pStr = pTemp->pContent->pSynonym[i];
if(pStr)
{
wcscat(pOutput, L" ");
wcscat(pOutput, (wchar_t*)pStr);
}
i ++;
}
wcscat(pOutput, L"\n");
}
if(pTemp->pContent->numofIrregular != 0)
{
// 不规则
temp[0] = 0x4e0d;
temp[0] = 0x89c4;
temp[0] = 0x5219;
temp[0] = 0x0000;
wcscat(pOutput, L"\n");
wcscat(pOutput, L"5@");
wcscat(pOutput, (wchar_t*)&temp[0]);
// wcscat(pOutput, L"\n");
// wcscat(pOutput, L"7@"); // 焦点单词
iNum = pTemp->pContent->numofIrregular;
i = 0;
while(i < iNum)
{
pStr = pTemp->pContent->pIrregular[i];
if(pStr)
{
wcscat(pOutput, L"\n");
wcscat(pOutput, L" ");
wcscat(pOutput, (wchar_t*)pStr);
}
i ++;
}
wcscat(pOutput, L"\n");
}
}
pTemp = pTemp->pNext;
}
if(chOutput != NULL)
{
free(chOutput);
chOutput = NULL;
}
return TRUE;
}
// 函数名 : DDE_GetWordContentCN
// 描述 : 显示当前单词的解释(中文)
// 返回类型 : BOOL
BOOL DDE_GetWordContentCN(LPTSTR lpBuf, LPTSTR lpWord)
{
wchar_t* pOutput = (wchar_t*)lpBuf;
int nSize = DEGetWordContentSize(&g_pData, 0);
unsigned char* chOutput = (unsigned char*)malloc(sizeof(unsigned char)*nSize);
WCONTENT* output = (WCONTENT*)chOutput;
WCONTENT* pTemp = (WCONTENT*)output;
int NUM = 100;
ONEEXP_LIST pOneLib;
WORDLIST* pWordList;
DESTR pStr = NULL;
BOOL bOne = FALSE;
int nNum = 1;
if(nSize == 0)
return FALSE;
DEGetWordContent(&g_pData, 0, output);
pOutput[0] = 0x00;
while (pTemp) // 不同词库
{
if (pTemp->pContent != NULL)
{
pOneLib = pTemp->pContent->explanation;
// 不同词性
while (pOneLib)
{
wchar_t* pType = (wchar_t*)GetTypeStr(pOneLib->typeofword);
if(pType[0])
{
// 词性
wcscat(pOutput, L"6@");
wcscat(pOutput, pType);
wcscat(pOutput, L"\n");
}
pWordList = pOneLib->interpretation;
bOne = FALSE;
if(pWordList)
{
if(pWordList->pNext)
bOne = TRUE;
}
nNum = 1;
while(pWordList)
{
pStr = pWordList->pWord;
if(pStr != NULL)
{
if (wcschr((wchar_t*)pStr, TEXT(' ')) == NULL)
{
// 非词组
wcscat((wchar_t*)pOutput, L"7@");
}
else
{
// 词组
wcscat((wchar_t*)pOutput, L" ");
}
wcscat(pOutput, (wchar_t*)pStr);
wcscat(pOutput, L"\n");
}
pWordList = pWordList->pNext;
}
pOneLib = pOneLib->pNext;
} // end while pExplanation
}// end if pContent
pTemp = pTemp->pNext;
}
if(chOutput != NULL)
{
free(chOutput);
chOutput = NULL;
}
return TRUE;
}
BOOL DDE_GetReciteContent(LPTSTR lpBuf, LPTSTR lpWord, BOOL bWord, BOOL bPhoneticFlag, LPTSTR lpPhonetic)
{
wchar_t* pOutput = (wchar_t*)lpBuf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -