CPVT_WordRange CPWL_Edit::GetSameWordsRange(const CPVT_WordPlace& place, bool bLatin, bool bArabic) const { CPVT_WordRange range; CFX_Edit_Iterator* pIterator = m_pEdit->GetIterator(); CPVT_Word wordinfo; CPVT_WordPlace wpStart(place), wpEnd(place); pIterator->SetAt(place); if (bLatin) { while (pIterator->NextWord()) { if (!pIterator->GetWord(wordinfo) || !FX_EDIT_ISLATINWORD(wordinfo.Word)) { break; } wpEnd = pIterator->GetAt(); } } else if (bArabic) { while (pIterator->NextWord()) { if (!pIterator->GetWord(wordinfo) || !PWL_ISARABICWORD(wordinfo.Word)) break; wpEnd = pIterator->GetAt(); } } pIterator->SetAt(place); if (bLatin) { do { if (!pIterator->GetWord(wordinfo) || !FX_EDIT_ISLATINWORD(wordinfo.Word)) { break; } wpStart = pIterator->GetAt(); } while (pIterator->PrevWord()); } else if (bArabic) { do { if (!pIterator->GetWord(wordinfo) || !PWL_ISARABICWORD(wordinfo.Word)) break; wpStart = pIterator->GetAt(); } while (pIterator->PrevWord()); } range.Set(wpStart, wpEnd); return range; }
CFX_PointF CPWL_Edit::GetWordRightBottomPoint(const CPVT_WordPlace& wpWord) { CFX_Edit_Iterator* pIterator = m_pEdit->GetIterator(); CPVT_WordPlace wpOld = pIterator->GetAt(); pIterator->SetAt(wpWord); CFX_PointF pt; CPVT_Word word; if (pIterator->GetWord(word)) { pt = CFX_PointF(word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent); } pIterator->SetAt(wpOld); return pt; }