本文整理汇总了C++中CItemList::AddTail方法的典型用法代码示例。如果您正苦于以下问题:C++ CItemList::AddTail方法的具体用法?C++ CItemList::AddTail怎么用?C++ CItemList::AddTail使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CItemList
的用法示例。
在下文中一共展示了CItemList::AddTail方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AddNextSentItem
/*****************************************************************************
* CTTSEngObj::AddNextSentItem *
*-----------------------------*
* Locates the next sentence item in the stream and adds it to the list.
* Returns true if the last item added is the end of the sentence.
****************************************************************************/
BOOL CTTSEngObj::AddNextSentItem( CItemList& ItemList )
{
//--- Get the token
ULONG ulIndex;
CSentItem Item;
Item.pItem = FindNextToken( m_pNextChar, m_pEndChar, m_pNextChar );
//--- This case can occur when we hit the end of a text fragment.
// Returning at this point will cause advancement to the next fragment.
if( Item.pItem == NULL )
{
return false;
}
const WCHAR* pTrailChar = m_pNextChar-1;
ULONG TokenLen = m_pNextChar - Item.pItem;
//--- Split off leading punction if any
static const WCHAR LeadItems[] = { L'(', L'\"', L'{', L'\'', L'[' };
while( TokenLen > 1 )
{
if( SearchSet( Item.pItem[0], LeadItems, sp_countof(LeadItems), &ulIndex ) )
{
CSentItem LItem;
LItem.pItem = Item.pItem;
LItem.ulItemLen = 1;
LItem.pXmlState = &m_pCurrFrag->State;
LItem.ulItemSrcLen = LItem.ulItemLen;
LItem.ulItemSrcOffset = m_pCurrFrag->ulTextSrcOffset +
( LItem.pItem - m_pCurrFrag->pTextStart );
ItemList.AddTail( LItem );
++Item.pItem;
--TokenLen;
}
else
{
break;
}
}
//--- Get primary item insert position
SPLISTPOS ItemPos = ItemList.AddTail( Item );
//--- Split off trailing punction if any.
static const WCHAR EOSItems[] = { L'.', L'!', L'?' };
static const WCHAR TrailItems[] = { L',', L'\"', L';', L':', L')', L'}', L'\'', L']' };
SPLISTPOS NextPos = NULL;
BOOL fIsEOS = false;
while( TokenLen > 1 )
{
BOOL fAddTrailItem = false;
if( SearchSet( *pTrailChar, EOSItems, sp_countof(EOSItems), &ulIndex ) )
{
fIsEOS = true;
fAddTrailItem = true;
}
else if( SearchSet( *pTrailChar, TrailItems, sp_countof(TrailItems), &ulIndex ) )
{
fAddTrailItem = true;
}
if( fAddTrailItem )
{
CSentItem TItem;
TItem.pItem = pTrailChar;
TItem.ulItemLen = 1;
TItem.pXmlState = &m_pCurrFrag->State;
TItem.ulItemSrcLen = TItem.ulItemLen;
TItem.ulItemSrcOffset = m_pCurrFrag->ulTextSrcOffset +
( TItem.pItem - m_pCurrFrag->pTextStart );
NextPos = ItemList.InsertAfter( ItemPos, TItem );
--TokenLen;
--pTrailChar;
}
else
{
break;
}
}
//--- Abreviation or sentence end?
// If we are at the end of the buffer then EOS is implied.
if( *m_pNextChar == NULL )
{
fIsEOS = true;
if( !SearchSet( *(m_pNextChar-1), EOSItems, sp_countof(EOSItems), &ulIndex ) )
{
//--- Terminate with a period if we are at the end of a buffer
// and no end of sentence punction has been added.
static const WCHAR* pPeriod = L".";
CSentItem EOSItem;
EOSItem.pItem = pPeriod;
EOSItem.ulItemLen = 1;
EOSItem.pXmlState = &m_pCurrFrag->State;
//.........这里部分代码省略.........
示例2: GetNextSentence
/*****************************************************************************
* 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 */