/***************************************************************************** * CTTSEngObj::GetNextSentence * *-----------------------------* * This method is used to create a list of items to be spoken. ****************************************************************************/ HRESULT CTTSEngObj::GetNextSentence( CItemList& ItemList ) { HRESULT hr = S_OK; //--- Clear the destination ItemList.RemoveAll(); //--- Is there any work to do if( m_pCurrFrag == NULL ) { hr = S_FALSE; } else { BOOL fSentDone = false; BOOL fGoToNextFrag = false; while( m_pCurrFrag && !fSentDone ) { if( m_pCurrFrag->State.eAction == SPVA_Speak ) { fSentDone = AddNextSentItem( ItemList ); //--- Advance fragment? if( m_pNextChar >= m_pEndChar ) { fGoToNextFrag = true; } } else { //--- Add non spoken fragments CSentItem Item; Item.pItem = m_pCurrFrag->pTextStart; Item.ulItemLen = m_pCurrFrag->ulTextLen; Item.ulItemSrcOffset = m_pCurrFrag->ulTextSrcOffset; Item.ulItemSrcLen = Item.ulItemLen; Item.pXmlState = &m_pCurrFrag->State; ItemList.AddTail( Item ); fGoToNextFrag = true; } if( fGoToNextFrag ) { fGoToNextFrag = false; m_pCurrFrag = m_pCurrFrag->pNext; if( m_pCurrFrag ) { m_pNextChar = m_pCurrFrag->pTextStart; m_pEndChar = m_pNextChar + m_pCurrFrag->ulTextLen; } else { m_pNextChar = NULL; m_pEndChar = NULL; } } } // end while if( ItemList.IsEmpty() ) { hr = S_FALSE; } } return hr; } /* CTTSEngObj::GetNextSentence */