Win32: MS Spell dictionary charset is identified in the proper way. Also, language ID is in human readable form now.

This commit is contained in:
Ianos Gnatiuc 2006-04-05 15:56:04 +00:00
parent 3152ff7713
commit f5971f8c6e
3 changed files with 52 additions and 9 deletions

View File

@ -1117,12 +1117,35 @@ int GMenuSChecker::Run(CSpellChecker &schecker, const char *word)
for (idx = 0; idx < langcount; idx++) for (idx = 0; idx < langcount; idx++)
{ {
uint type = langs[idx]->GetSpellType();
const char *code = langs[idx]->GetLangCode(); const char *code = langs[idx]->GetLangCode();
std::string buff = " "; std::string buff = " ";
buff += streql(lcode, code) ? '\x10' : ' '; buff += streql(lcode, code) ? '\x10' : ' ';
buff += code; buff += ' ';
#if !(defined(GCFG_NO_MSSPELL) || defined(GCFG_NO_MYSPELL))
if (type == SCHECKET_TYPE_MSSPELL)
buff += " MS ";
else if (type == SCHECKET_TYPE_MYSPELL)
buff += " MY ";
else
buff += " ?? ";
#endif
#if !defined(GCFG_NO_MYSPELL)
if (type == SCHECKET_TYPE_MSSPELL)
{
char langANSI[100];
char langOEM[100];
GetLocaleInfo(atoi(code), LOCALE_SLANGUAGE, langANSI, sizeof(langANSI));
CharToOem(langANSI, langOEM);
buff += langOEM;
}
else
#endif
buff += code;
buff += ' ';
langstr.push_back(buff); langstr.push_back(buff);
} }

View File

@ -328,17 +328,18 @@ void CMSSpellLang::UnLoad()
void CMSSpellLang::BuildRTable(const char *codeset) void CMSSpellLang::BuildRTable(const char *codeset)
{ {
char codeset2[20]; char codeset2[20];
sprintf(codeset2, "CP%i", GetACP()); strcpy(codeset2, "CP");
GetLocaleInfo(mLIDC, LOCALE_IDEFAULTANSICODEPAGE, &codeset2[2], sizeof(codeset2)-2);
LoadCharset(codeset, codeset2); LoadCharset(codeset, codeset2);
mToDicTable = new Chs; mToDicTable = new Chs;
memset(mToDicTable, 0, sizeof(Chs)); memset(mToDicTable, 0, sizeof(Chs));
*mToDicTable = CharTable ? *CharTable : *mToDicTable; if (CharTable ) *mToDicTable = *CharTable;
LoadCharset(codeset2, codeset); LoadCharset(codeset2, codeset);
mToLocTable = new Chs; mToLocTable = new Chs;
memset(mToLocTable, 0, sizeof(Chs)); memset(mToLocTable, 0, sizeof(Chs));
*mToLocTable = CharTable ? *CharTable : *mToLocTable; if (CharTable ) *mToLocTable = *CharTable;
} }
@ -409,6 +410,8 @@ bool CMSSpellLang::SpellSuggest(const char *text, bool more)
mSIB.lrgChr = (char*)text; mSIB.lrgChr = (char*)text;
mSIB.cChr = strlen(text); mSIB.cChr = strlen(text);
memset(mSZ, 0, sizeof(mSZ));
mSRB.cChr = sizeof(mSZ); mSRB.cChr = sizeof(mSZ);
mSRB.cbRate = sizeof(mRate); mSRB.cbRate = sizeof(mRate);
mSRB.lrgSZ = mSZ; mSRB.lrgSZ = mSZ;
@ -503,12 +506,12 @@ void CMYSpellLang::BuildRTable(const char *codeset)
LoadCharset(codeset, mMSpell->get_dic_encoding()); LoadCharset(codeset, mMSpell->get_dic_encoding());
mToDicTable = new Chs; mToDicTable = new Chs;
memset(mToDicTable, 0, sizeof(Chs)); memset(mToDicTable, 0, sizeof(Chs));
*mToDicTable = CharTable ? *CharTable : *mToDicTable; if (CharTable ) *mToDicTable = *CharTable;
LoadCharset(mMSpell->get_dic_encoding(), codeset); LoadCharset(mMSpell->get_dic_encoding(), codeset);
mToLocTable = new Chs; mToLocTable = new Chs;
memset(mToLocTable, 0, sizeof(Chs)); memset(mToLocTable, 0, sizeof(Chs));
*mToLocTable = CharTable ? *CharTable : *mToLocTable; if (CharTable ) *mToLocTable = *CharTable;
} }

View File

@ -40,6 +40,10 @@
#endif #endif
#endif #endif
const uint SCHECKET_TYPE_UNKNOWN = 0;
const uint SCHECKET_TYPE_MSSPELL = 1;
const uint SCHECKET_TYPE_MYSPELL = 2;
// ------------------------------------------------------------------ // ------------------------------------------------------------------
@ -51,6 +55,8 @@ class CSpellLang
friend class CSpellChecker; friend class CSpellChecker;
protected: protected:
uint mSpellType;
bool mIsMdrLoaded; bool mIsMdrLoaded;
bool mIsUdrLoaded; bool mIsUdrLoaded;
char mLangCode[100]; char mLangCode[100];
@ -64,6 +70,7 @@ protected:
public: public:
CSpellLang() CSpellLang()
{ {
mSpellType = SCHECKET_TYPE_UNKNOWN;
mIsMdrLoaded = mIsUdrLoaded = false; mIsMdrLoaded = mIsUdrLoaded = false;
mToDicTable = mToLocTable = NULL; mToDicTable = mToLocTable = NULL;
} }
@ -81,7 +88,9 @@ public:
bool IsMdrLoaded() { return mIsMdrLoaded; } bool IsMdrLoaded() { return mIsMdrLoaded; }
bool IsUdrLoaded() { return mIsUdrLoaded; } bool IsUdrLoaded() { return mIsUdrLoaded; }
const char *GetLangCode() { return mLangCode; } const char *GetLangCode() { return mLangCode; }
uint GetSpellType() { return mSpellType; }
}; };
@ -203,7 +212,11 @@ private:
bool SpellSuggest(const char *text, bool more); bool SpellSuggest(const char *text, bool more);
public: public:
CMSSpellLang() { mLibrary = NULL; } CMSSpellLang()
{
mLibrary = NULL;
mSpellType = SCHECKET_TYPE_MSSPELL;
}
bool Init(HKEY hKey, const char *name); bool Init(HKEY hKey, const char *name);
@ -234,7 +247,11 @@ private:
MySpell *mMSpell; MySpell *mMSpell;
public: public:
CMYSpellLang() { mMSpell = NULL; } CMYSpellLang()
{
mMSpell = NULL;
mSpellType = SCHECKET_TYPE_MYSPELL;
}
bool Init(const gdirentry *entry); bool Init(const gdirentry *entry);