in PollyTTSEngine/ttsengobj.cpp [463:530]
HRESULT CTTSEngObj::GetNextSentence( CItemList& ItemList )
{
HRESULT hr = S_OK;
m_logger->debug(__FUNCTION__);
m_logger->debug("Clearing the item list\n");
//--- Clear all items in the list
ItemList.RemoveAll();
//--- Is there any work to do
if( m_pCurrFrag == NULL )
{
m_logger->debug("CurrFrag is null, nothing to do");
hr = S_FALSE;
}
else
{
BOOL fSentDone = false;
BOOL fGoToNextFrag = false;
while( m_pCurrFrag && !fSentDone )
{
if( m_pCurrFrag->State.eAction == SPVA_Speak )
{
fSentDone = AddNextSentenceItem( 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 */