CPVT_WordPlace CPDF_VariableText::InsertSection( const CPVT_WordPlace& place, const CPVT_SecProps* pSecProps, const CPVT_WordProps* pWordProps) { int32_t nTotlaWords = GetTotalWords(); if (m_nLimitChar > 0 && nTotlaWords >= m_nLimitChar) return place; if (m_nCharArray > 0 && nTotlaWords >= m_nCharArray) return place; if (!m_bMultiLine) return place; CPVT_WordPlace wordplace = place; UpdateWordPlace(wordplace); CPVT_WordPlace newplace = place; if (CSection* pSection = m_SectionArray.GetAt(wordplace.nSecIndex)) { CPVT_WordPlace NewPlace(wordplace.nSecIndex + 1, 0, -1); CPVT_SectionInfo secinfo; AddSection(NewPlace, secinfo); newplace = NewPlace; if (CSection* pNewSection = m_SectionArray.GetAt(NewPlace.nSecIndex)) { for (int32_t w = wordplace.nWordIndex + 1, sz = pSection->m_WordArray.GetSize(); w < sz; w++) { if (CPVT_WordInfo* pWord = pSection->m_WordArray.GetAt(w)) { NewPlace.nWordIndex++; pNewSection->AddWord(NewPlace, *pWord); } } } ClearSectionRightWords(wordplace); } return newplace; }
int32_t CPDF_VariableText::WordPlaceToWordIndex( const CPVT_WordPlace& place) const { CPVT_WordPlace newplace = place; UpdateWordPlace(newplace); int32_t nIndex = 0; int32_t i = 0; int32_t sz = 0; for (i = 0, sz = m_SectionArray.GetSize(); i < sz && i < newplace.nSecIndex; i++) { if (CSection* pSection = m_SectionArray.GetAt(i)) { nIndex += pSection->m_WordArray.GetSize(); if (i != m_SectionArray.GetSize() - 1) nIndex += kReturnLength; } } if (i >= 0 && i < m_SectionArray.GetSize()) nIndex += newplace.nWordIndex + kReturnLength; return nIndex; }