// EdIRDict.cpp : implementation file // #include "stdafx.h" #include "Defines.hpp" #ifdef D_ED_IR_ACTIVE #include "EdIRDict.hpp" ////////////////////////////////////////////////////////////////// // class CPA_EdIR_WordEntry ////////////////////////////////////////////////////////////////// /****************************************************************************/ CPA_EdIR_WordEntry::CPA_EdIR_WordEntry() { m_csLanguage=C_INVALID_WORD; m_csWord=C_INVALID_LANGUAGE; } /****************************************************************************/ CPA_EdIR_WordEntry::CPA_EdIR_WordEntry(CString csWord,CString csLanguage) { m_csWord=csWord; m_csLanguage=csLanguage; } /****************************************************************************/ CString CPA_EdIR_WordEntry::m_fn_csGetLanguage() { ASSERT(M_LANGUAGE_IS_VALID(m_csLanguage)); return m_csLanguage; } /****************************************************************************/ CString CPA_EdIR_WordEntry::m_fn_csGetWord() { ASSERT(M_WORD_IS_VALID(m_csWord)); return m_csWord; } /****************************************************************************/ void CPA_EdIR_WordEntry::m_fn_vSetLanguage(CString csLanguage) { ASSERT(M_LANGUAGE_IS_VALID(csLanguage)); ASSERT(M_LANGUAGE_IS_INVALID(m_csLanguage)); m_csLanguage=csLanguage; } /****************************************************************************/ void CPA_EdIR_WordEntry::m_fn_vSetWord(CString csWord) { ASSERT(M_WORD_IS_VALID(csWord)); ASSERT(M_WORD_IS_INVALID(m_csWord)); m_csWord=csWord; } ////////////////////////////////////////////////////////////////// // class CPA_EdIR_DictionnaryEntry ////////////////////////////////////////////////////////////////// /****************************************************************************/ CPA_EdIR_DictionnaryEntry::CPA_EdIR_DictionnaryEntry(long lNbEntries) { m_pclWordEntries=new CPA_EdIR_WordEntry[lNbEntries]; m_csScriptName=C_INVALID_SCRIPTNAME; m_lId=C_INVALID_ID; m_lNbEntries=lNbEntries; m_lCurrentEntry=0; //ANNECY CB memset(m_acFirstLetter, 0, 256 * sizeof(char)); memset(m_acSecondLetter, 0, 256 * sizeof(char)); //END ANNECY } /****************************************************************************/ CPA_EdIR_DictionnaryEntry::~CPA_EdIR_DictionnaryEntry() { delete[] m_pclWordEntries; } /****************************************************************************/ void CPA_EdIR_DictionnaryEntry::m_fn_vAddEntry(CString csWord,CString csLanguage) { ASSERT(m_lCurrentEntrym_fn_lGetId()); lIndex++; } //Adds the entry if(bFound) { m_ppclDictionnaryEntry[lIndex-1]->m_fn_vAddEntry(csWord,csLanguage); } else { ASSERT(m_lCurrentEntrym_fn_vAddEntry(csWord,csLanguage); m_ppclDictionnaryEntry[m_lCurrentEntry]->m_fn_vSetId(lId); m_ppclDictionnaryEntry[m_lCurrentEntry]->m_fn_vSetScriptName(csScriptName); m_lCurrentEntry++; } } /****************************************************************************/ //ANNECY CB long CPA_EdIR_Dictionary::m_fn_lGetId(CString &csWord,CString &csLanguage) //long CPA_EdIR_Dictionary::m_fn_lGetId(CString csWord,CString csLanguage) //END { //Looks for this (word,language) in the dictionnary long lIndex=0; BOOL bFound=FALSE; //ANNECY CB LPCSTR pcsWord = (LPCSTR) csWord; if(m_acFirstLetter[pcsWord[0]] == 0) return C_INVALID_ID; if(m_acSecondLetter[pcsWord[1]] == 0) return C_INVALID_ID; //END while(lIndexm_acFirstLetter[pcsWord[0]]) && (m_ppclDictionnaryEntry[lIndex]->m_acSecondLetter[pcsWord[1]])) //END bFound=m_ppclDictionnaryEntry[lIndex]->m_fn_bEntryExists(csWord,csLanguage); lIndex++; } if(bFound) return m_ppclDictionnaryEntry[lIndex-1]->m_fn_lGetId(); else return C_INVALID_ID; } /****************************************************************************/ //ANNECY CB CString CPA_EdIR_Dictionary::m_fn_csGetWord(long lId,CString &csLanguage) //CString CPA_EdIR_Dictionary::m_fn_csGetWord(long lId,CString csLanguage) //END { //Looks for this "lId" in the dictionnary long lIndex=0; BOOL bFound=FALSE; while(lIndexm_fn_lGetId()); lIndex++; } if(bFound) return m_ppclDictionnaryEntry[lIndex-1]->m_fn_csGetName(csLanguage); else return C_INVALID_WORD; } /****************************************************************************/ CString CPA_EdIR_Dictionary::m_fn_csTranslate(CString csWord,CString csLanguage) { CString csTranslation=C_INVALID_WORD; long lIndex=0; while((lIndexm_fn_csTranslate(csWord,csLanguage); lIndex++; } return csTranslation; } /****************************************************************************/ int CPA_EdIR_Dictionary::m_fn_iCompareNoCase(const void *pcsWord1,const void *pcsWord2) { return ((CString *)pcsWord1)->CompareNoCase(*((CString *)pcsWord2)); } /****************************************************************************/ void CPA_EdIR_Dictionary::m_fn_vInitFastTranslation(CString csLanguage1,CString csLanguage2) { if((m_csOldLanguage1.CompareNoCase(csLanguage1)!=0) || (m_csOldLanguage2.CompareNoCase(csLanguage2)!=0)) { m_csOldLanguage1=csLanguage1; m_csOldLanguage2=csLanguage2; if(m_pstCouple) delete[] m_pstCouple; m_pstCouple=new CPA_EdIR_stCouple[m_lNbEntries]; for(long lIndex=0;lIndexm_fn_csGetName(csLanguage1); m_pstCouple[lIndex].csTranslatedWord=m_ppclDictionnaryEntry[lIndex]->m_fn_csGetName(csLanguage2); } qsort(m_pstCouple,m_lNbEntries,sizeof(CPA_EdIR_stCouple),m_fn_iCompareNoCase); } } /****************************************************************************/ CString CPA_EdIR_Dictionary::m_fn_csFastTranslate(CString csWord) { CPA_EdIR_stCouple *pstCouple; pstCouple=(CPA_EdIR_stCouple *)bsearch((void *)(&csWord),m_pstCouple,m_lNbEntries,sizeof(CPA_EdIR_stCouple),m_fn_iCompareNoCase); if(pstCouple!=NULL) return pstCouple->csTranslatedWord; else return C_INVALID_WORD; } #endif //D_ED_IR_ACTIVE