本文整理汇总了C++中TLex::Peek方法的典型用法代码示例。如果您正苦于以下问题:C++ TLex::Peek方法的具体用法?C++ TLex::Peek怎么用?C++ TLex::Peek使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TLex
的用法示例。
在下文中一共展示了TLex::Peek方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GotoEndOfLine
/*
-------------------------------------------------------------------------------
Class: CStifSectionParser
Method: GotoEndOfLine
Description: Goes end of the line.
Parameters: TLex& lex: inout: Parsed line.
Return Values: TInt: Last item's end position.
Errors/Exceptions: None
Status: Proposal
-------------------------------------------------------------------------------
*/
TInt CStifSectionParser::GotoEndOfLine( TLex& lex )
{
// End position of the last token(Initialized with current position)
TInt lastItemPosition( lex.Offset() );
// LINE BREAK NOTE:
// Line break in SOS, WIN: '\r\n'
// Line break in UNIX: '\n'
do
{
// Peek next character(10 or '\n' in UNIX style )
if( lex.Peek() == 0x0A )
{
lex.Inc();
break;
}
// Peek next character(13 or '\r' in Symbian OS)
if ( lex.Peek() == 0x0D )
{
// Increment the lex position
lex.Inc();
// Peek next character(10 or '\n' in Symbian OS)
if ( lex.Peek() == 0x0A )
{
// End of the section is found and increment the lex position
lex.Inc();
break;
}
// 0x0A not found, decrement position
lex.UnGet();
}
// Peek for tabulator(0x09) and space(0x20)
else if ( lex.Peek() == 0x09 || lex.Peek() == 0x20 )
{
// Increment the lex position
lex.Inc();
continue;
}
// If white spaces not found take next token
lex.NextToken();
lastItemPosition = lex.Offset();
} while ( !lex.Eos() );
return lastItemPosition;
}
示例2: result
// ----------------------------------------------------
// CheckIPv6Address()
// IPv6address = hexpart [ ":" IPv4address ]
// ----------------------------------------------------
//
LOCAL_C TBool CheckIPv6Address( TLex& aLex )
{
TBool result( CheckIPv6HexPart( aLex ) );
if( aLex.Peek() == '.' )
{
while( aLex.Peek() != ':' && aLex.Offset() > 0 )
{
aLex.UnGet();
}
aLex.Inc();
result = CheckIPv4Address( aLex );
}
return result && aLex.Eos();
}
示例3: GetDigits
// -----------------------------------------------------------------------------
// CAknKeyRotatorImpl::SkipSpaces
// Goes over digits and returns that sequence.
// -----------------------------------------------------------------------------
//
TPtrC CAknKeyRotatorImpl::GetDigits( TLex& aLex )
{
// Mark current place and go over digits.
aLex.Mark();
while ( !aLex.Eos() && !IsEndOfLine( aLex.Peek() ) )
{
if ( aLex.Peek().IsDigit() )
{
aLex.Inc();
}
else
{
break;
}
}
return aLex.MarkedToken();
}
示例4: SkipSpaces
// -----------------------------------------------------------------------------
// CAknKeyRotatorImpl::SkipSpaces
// Skips over spaces.
// -----------------------------------------------------------------------------
//
TInt CAknKeyRotatorImpl::SkipSpaces( TLex& aLex )
{
TInt flags = 0;
// Skip spaces, but stop at end of line.
while ( !aLex.Eos() && !IsEndOfLine( aLex.Peek() ) )
{
if ( aLex.Peek().IsSpace() )
{
// There was a space, so ok for now.
flags |= EAknWasSpace;
aLex.Inc();
}
else
{
flags |= EAknWasCharacter;
break;
}
}
return flags;
}
示例5: GetNextWord
EXPORT_C TInt CScriptFile::GetNextWord(TLex& aInput, TChar aDelimiter, TPtrC& aOutput)
{
//Get to the start of the descriptor
while (!aInput.Peek().IsAlphaDigit() && aInput.Peek() != '+' && !aInput.Eos() && aInput.Peek() != aDelimiter)
aInput.Inc();
if (aInput.Eos())
return KErrNotFound;
aInput.Mark();
while (aInput.Peek() != aDelimiter && !aInput.Eos())
aInput.Inc();
aOutput.Set(aInput.MarkedToken());
if (!aInput.Eos())
aInput.SkipAndMark(1);
return KErrNone;
}
示例6: GetL
TPtrC TfrLex::GetL( TLex& aLex, const TChar aChar )
{
// Skip spaces and mark the token's start point.
aLex.SkipSpace();
TLexMark mark;
aLex.Mark(mark);
if (aLex.Peek() == '"' )
{
// Skip the " and do find next " followed by eos, space or aChar.
aLex.Inc();
TChar x;
while ( x = aLex.Get(), !x.Eos() )
{
if ( x == '"' )
{
// Found a " character - but is it the end of the token?
x = aLex.Peek(); // peek the next character
if ( x.Eos() || x.IsSpace() || x == aChar )
// End of token: return token.
return aLex.MarkedToken(mark);
}
}
// Unget and L E A V E because did not find the end " of token.
aLex.UnGetToMark(mark);
User::Leave(KErrArgument);
return aLex.MarkedToken(mark); // never reached (l e a v e).
}
else
{
// Is not a "*" token: find eos or the next space or the aChar
// and return the token.
TChar x;
while ( x = aLex.Peek(), !x.Eos() && !x.IsSpace() && x != aChar )
aLex.Inc();
return aLex.MarkedToken(mark);
}
}
示例7: hexDigits
// ----------------------------------------------------
// CheckIPv6Hex4()
// hex4 = 1*4HEXDIG
// ----------------------------------------------------
//
LOCAL_C TBool CheckIPv6Hex4( TLex& aLex )
{
_LIT( KHexDigits, "0123456789ABCDEF" );
TPtrC hexDigits( KHexDigits );
TBool foundOne( EFalse );
while( hexDigits.LocateF( aLex.Peek() ) != KErrNotFound )
{
foundOne = ETrue;
aLex.Inc();
}
return foundOne;
}
示例8: hexSeq
// ----------------------------------------------------
// CheckIPv6HexPart()
// hexpart = hexseq | hexseq "::" [ hexseq ] | "::" [ hexseq ]
// ----------------------------------------------------
//
LOCAL_C TBool CheckIPv6HexPart( TLex& aLex )
{
TBool hexSeq( DoOrReverse( CheckIPv6HexSeq, aLex ) );
TBool doubleSemiColon( EFalse );
if( aLex.Peek() == ':' )
{
aLex.Inc();
if( aLex.Get() == ':' )
{
doubleSemiColon = ETrue;
DoOrReverse( CheckIPv6HexSeq, aLex );
}
}
return hexSeq || doubleSemiColon;
}
示例9: ReadDurationL
// -----------------------------------------------------------------------------
// CStartupAdaptationStubModel::ReadDurationL
//
// -----------------------------------------------------------------------------
//
TInt CStartupAdaptationStubModel::ReadDurationL( TLex& aLexer )
{
RDEBUG( _L( "CStartupAdaptationStubModel::ReadDurationL." ) );
TInt val = KDefaultDuration;
if ( aLexer.Peek() == '[' ) // Duration value is written to file
{
aLexer.Inc();
User::LeaveIfError( aLexer.Val( val ) );
if ( aLexer.Get() != ']' )
{
User::Leave( KErrCorrupt );
}
}
RDEBUG_1( _L( "CStartupAdaptationStubModel::ReadDurationL finished with %d." ), val );
return val;
}
示例10: IsAllDigits
// -----------------------------------------------------------------------------
// CSTSPinConverter::IsAllDigits
// Checks, are all values in gived descriptor digits or not.
// Returns: ETrue: All was digits
// EFalse: At least one value was not digit
// -----------------------------------------------------------------------------
TBool CSTSPinConverter::IsAllDigits(const TDesC& aPinValue)
{
//if empty
if (aPinValue.Length() == 0)
{
return EFalse;
}
TLex lex;
lex.Assign(aPinValue);
while (lex.Peek() != 0)
{
if (!(lex.Get()).IsDigit())
{
//if was not digit
return EFalse;
}
}
return ETrue;
}
示例11: ParseUrlL
/**
Parses URL from a token. Is used by SearchUrlL method and if a URL
was found it's appended to item array. Note that parsing for generic URIs
is done with SearchGenericUriL -method.
@param aType a Type of URL to seach, i.e.
www.
wap.
IP e.g.127.0.0.1
@param aTokenPtr Pointer to token that will be parsed
@param aTextOffset Offset of the token (start position in the whole text)
@leave KErrNone, if successful; otherwise one of the other system-wide error codes.
@return ETrue if the parameter for phone number is valid, else returns EFalse
*/
TBool CTulAddressStringTokenizer::ParseUrlL(const TDesC& aType, const TPtrC& aTokenPtr, TInt aTextOffset)
{
TBool wasValidUrl = EFalse;
TLex url;
TInt position = aTokenPtr.FindF( aType );
if ( position != KErrNotFound )
{ // address start found
url = aTokenPtr.Right( aTokenPtr.Length() - position );
url.Inc( aType.Length() );
while( IsValidUrlChar( url.Peek() ) && !(url.Eos()) )
{
if( url.Peek() == ':' )
{
url.Inc();
if ( !url.Peek().IsDigit() )
{
url.UnGet();
break;
}
}
else
url.Inc();
}
// If a period or question mark was followed by a whitespace remove it
if ( url.Eos() ) // Can't be followed by white space if it's
{ // the last character at token
url.UnGet();
if ( url.Peek() != '.' && url.Peek() != '?' && url.Peek() != ',' ) // If it wasn't a period or question mark
url.Inc();
}
url.Mark();
wasValidUrl = ETrue;
}
if ( wasValidUrl && ( url.MarkedOffset() > aType.Length() ) )
{
AddItemL( aTextOffset - aTokenPtr.Length() + position, url.MarkedOffset(), EFindItemSearchURLBin );
return ETrue;
}
return EFalse;
}
示例12: SearchGenericUriL
/**
Search algorithm for searching generic URIs
@param aText Text that will be parsed
@return ETrue if any generic URI is found else returns EFalse
@leave KErrNone, if successful; otherwise one of the other system-wide error codes.
*/
TBool CTulAddressStringTokenizer::SearchGenericUriL( const TDesC& aText )
{
// Detect generic URI within the token
const TDesC& schemeStartArray = KURISchemeStartCharacters;
const TDesC& schemeBodyArray = KURISchemeBodyCharacters;
const TDesC& schemeTerminatorArray = KURISchemeTerminator;
const TDesC& URIArray = KURICharacters;
TBool wasValidUri = EFalse;
TLex text = aText;
while ( !text.Eos() )
{
// Discard characters until URI scheme terminator is found
while( !(text.Eos()) && schemeTerminatorArray.Locate(text.Peek()) == KErrNotFound )
text.Inc();
// if at end of the text, no legit URI found
if ( !text.Eos() )
{
// Store the schema end offset (+1 to skip ':')
TInt schemeEndOffset = text.Offset() + 1;
// Scheme must be at least 1 character long at the beginning of the text to be valid
if ( text.Offset() > 0 )
{
// Un-get last scheme character to begin examination
text.UnGet();
// Rewind until beginning of the URI
while ( text.Offset() > 0 && schemeBodyArray.Locate(text.Peek().GetLowerCase()) != KErrNotFound )
text.UnGet();
// Now text pointer is at first character of the URI
// Do go back through the scheme until a legal beginning character for URI
// is found or back to the (schemeEndOffset - 1) i.e. URI scheme terminator
while ( schemeStartArray.Locate(text.Peek().GetLowerCase()) == KErrNotFound && (text.Offset() + 1) < schemeEndOffset )
text.Inc();
// check if terminated because a valid start character was found when
// scheme terminator was reached.
if ( schemeStartArray.Locate(text.Peek().GetLowerCase()) != KErrNotFound )
{
// First character is a valid URI char, so the scheme is valid ->
// marks the beginning of the array
text.Mark();
// fast forward to the end of the scheme
while( text.Offset() < schemeEndOffset )
text.Inc();
// Get characters until end of schema
while( !(text.Eos()) && URIArray.Locate( text.Peek().GetLowerCase() ) != KErrNotFound )
text.Inc();
// remove certain punctuation from end of the URI, as it is likely
// to be part of the surrounding text.
text.UnGet();
//special processing for bracket
//only remove the end bracket if there is no open bracket in the uri
//not counting bracket pairs for efficiency
if (text.Peek()!=')' || text.MarkedToken().Locate(TChar('('))!=-1)
text.Inc();
text.UnGet();
if ( text.Peek() != '.' && text.Peek() != '?' && text.Peek() != ',')
text.Inc();
// URI cannot contain only scheme, so check that pointer was increased
// by at least one character
if ( schemeEndOffset != text.Offset() )
{
// Append found text to item array (it is now known to be
// syntactically valid URI as it contains characters after the scheme)
AddItemL( text.MarkedOffset(), text.Offset() - text.MarkedOffset(), EFindItemSearchScheme );
wasValidUri = ETrue;
}
}
else // First character of scheme is not legit, fast forward to end of the
// scheme anyway to continue search
{
while( text.Offset() < schemeEndOffset )
text.Inc();
}
}
else
text.Inc();
}
}
return wasValidUri;
}
示例13: SearchMailAddressL
/**
Search algorithm for searching e-mail addresses
@param aText Text that will be parsed
@return ETrue if any EMail items were found else returns EFalse
@leave KErrNone, if successful; otherwise one of the other system-wide error codes.
@panic ETulPanicDescriptorLength in debug build if item's position
and/or length is out of the document's range.
*/
TBool CTulAddressStringTokenizer::SearchMailAddressL( const TDesC& aText )
{
TInt searchStart = 0;
TInt searchResult = 0;
const TInt end = aText.Length(); // end of document
do
{
TPtrC segment = aText.Right( end - searchStart );
searchResult = segment.LocateF('@');
if (searchResult != KErrNotFound)
{ // @ found
// There should be valid characters (not a period) before and after the @ character
if ( searchResult == 0 // first char
|| (searchResult >= segment.Length() - 1) // last char
|| !(IsValidEmailChar(segment[searchResult - 1]))
|| !(IsValidEmailHostChar(segment[searchResult + 1]))
|| segment[searchResult - 1] == '.'
|| segment[searchResult + 1] == '.'
)
{
searchStart += searchResult + 1;
continue;
}
TBool wasPeriod = EFalse; // To prevent sequential periods
// Get TLex from the pointer to get a better API for parsing
TLexMark startPos;
TLexMark endPos;
TLex token = segment;
// Go to searchResult and un-get until the beginning of e-mail address is reached
token.Inc( searchResult );
token.Mark();
do
{
token.UnGet();
if ( token.Peek() == '.' )
{ // If it was a period
if (wasPeriod) // and if the former was also -> break
break;
else // else mark that this one was a period
wasPeriod = ETrue;
}
else
wasPeriod = EFalse;
}
while (token.Offset() > 0 && IsValidEmailChar(token.Peek()));
if (token.Offset() != 0 || !IsValidEmailChar(token.Peek()))
token.Inc();
// Get rid of periods from the start of address
// Does it have to start with a number or char(abc...).
// If it does, the loop should check that it gets rid of all special chars also.
while (token.Peek() == '.')
token.Inc();
token.Mark( startPos ); // Mark the beginning of address
token.UnGetToMark();
wasPeriod = EFalse;
do // Go forward until a nonvalid character
{
token.Inc();
if ( token.Peek() == '.' )
{ // If it was a period
if ( wasPeriod ) // and if the former was also -> break
break;
else // else mark that this one was a period
wasPeriod = ETrue;
}
else
wasPeriod = EFalse;
}
while ( !token.Eos() && IsValidEmailHostChar( token.Peek() ) );
// If address ends with a period take it away
token.UnGet();
if (token.Peek() != '.')
token.Inc();
token.Mark( endPos ); // Mark the beginning of address
// Append the found string to the array
__ASSERT_DEBUG( searchStart + token.MarkedOffset( startPos )
+ token.MarkedOffset( endPos )
- token.MarkedOffset( startPos ) <= aText.Length(),
Panic(ETulPanicDescriptorLength) );
AddItemL( searchStart + token.MarkedOffset( startPos ),
//.........这里部分代码省略.........
示例14: ParseMessageL
//
// ParseMessageL()
//
// Simple Notification:
// Looks for number of messages and "From:" field
// writes numMsg into the parsed field array, sets
// entry.iDetails to the "From:"
// Complicated Notification:
// does the above and writes everything else into
// the array....
//
void CEmailNotificationParser::ParseMessageL()
{
TBool isSimpleNotification = EFalse;
TLex tokenLex;
TPtrC fieldName;
TPtrC fieldValue;
// reset parsedfield array
for(TInt i = iParsedFieldArray->Count();--i>=0;)
(*iParsedFieldArray)[i]->SetFieldValueL(_L(""));
// Set extraction mark at first character
iSms.SkipSpaceAndMark();
if(iSms.Peek() == KCharSlash)
{
// Check first line is <header>
iSms.SkipCharacters();
if (iSms.MarkedToken() != KEmailHeader)
{
User::Leave(KBspInvalidMessage);
}
// Get <new-amount> from second line and check for terminating linefeed
iSms.SkipSpaceAndMark();
}
// Val() seeks forward from next char position, looking for valid
// digits and incrementing next char as it goes.
if (!(iSms.Val(iMessageCount) == KErrNone && iMessageCount >= 0)) // If marked token is not a valid positive integer
{
iMessageCount = 0;
User::Leave(KBspInvalidMessage);
}
else
{
fieldValue.Set(iSms.MarkedToken()); // The message count..
AddParsedFieldL(KHeaderNumberMessages, fieldValue, ETrue);
}
// Next character may now be at newline or space after integer.
// If at space, advance to newline.
while (iSms.Peek() != KCharLineFeed && !iSms.Eos())
iSms.Inc();
iSms.SkipSpaceAndMark();
// Now parse the rest of the fields, if any.
while (!iSms.Eos())
{
while (iSms.Peek() != KCharLineFeed && !iSms.Eos())
iSms.Inc(); // Skip to next delimiter
if (iSms.Eos())
break; // we've finished break out of the function
if (iSms.TokenLength() == 0)
User::Leave(KBspSmartMessageInvalidToken);
// Parsing....
tokenLex.Assign(iSms.MarkedToken()); // Assign token to a new TLex
while (tokenLex.Peek() != KCharColon && !tokenLex.Eos())
tokenLex.Inc(); // Advance to a ':'
if (tokenLex.Eos() || tokenLex.TokenLength() == 0)
User::Leave(KBspSmartMessageInvalidToken);
fieldName.Set(tokenLex.MarkedToken()); // Store (pointer to) field name
tokenLex.Inc();
//fix for DEF017686
LeaveIfEmptyFieldsL(fieldName,tokenLex);
tokenLex.SkipSpaceAndMark(); // Step past optional spaces
//fix for DEF017686
LeaveIfEmptyFieldsL(fieldName,tokenLex);
// if it's the server id field try to extract the id value
// and match to an existing email service
if(fieldName.CompareF(KHeaderServerId)==KErrNone)
{
TInt valErr = tokenLex.Val(iServerId);
if(valErr != KErrNone)
iServerId = 0;
else
GetEmailServicesL();
//.........这里部分代码省略.........
示例15: SearchPhoneNumberL
/**
Search algorithm for searching phone numbers
@param aText Text that will be parsed
@return ETrue if any Phone Number items were found else returns EFalse
@leave KErrNone, if successful; otherwise one of the other system-wide error codes.
@panic ETulPanicDescriptorLength in debug build if item's position
and/or length is out of the document's range.
*/
TBool CTulAddressStringTokenizer::SearchPhoneNumberL( const TDesC& aText )
{
TLexMark startMark; // Points to the start of the found phone number
TLexMark endMark; // Points to the end of the found phone number
TLexMark mark;
const TInt end = aText.Length();
TLex number = aText;
while ( !(number.Eos()) )
{
TInt numberCount = 0; // How many real numbers (1234567890)
TInt bracketsOpen = 0; // How many brackets are currently open
TInt brackets = 0; // How many brackets overall
TChar charac = number.Peek();
while( (!(IsValidPhoneNumberChar( charac ) || charac == '+'
|| charac == '(' ) || charac == '-' || charac == '.' || charac == '/')
&& !(number.Eos()) && number.Offset() < end )
{
number.Inc();
charac = number.Peek();
}
if ( number.Offset() >= end )
break;
if ( number.Peek() == '#' )
{
number.Inc();
if (number.Peek() == '.' )
continue;
number.UnGet();
}
if ( number.Peek() == '+' )
{ // '+' has to be followed by a number (not # or * ...)
number.Inc();
if ( !(number.Peek().IsDigit()) )
continue;
number.UnGet();
}
if ( number.Peek() == '(' )
{ // '(' has to be followed by valid phone number
// character (whitespaces are allowed before) or '+' is a next character
number.Inc();
if ( !(number.Peek() == '+') )
{
number.Mark(mark);
number.SkipSpace();
charac = number.Peek();
if ( !( IsValidPhoneNumberChar(charac) || charac == '+'
|| charac == '(' ) || charac == '-' || charac == '.' || charac == '/')
{
number.Inc();
continue;
}
else
{
number.UnGetToMark(mark);
number.UnGet();
number.Mark(startMark);
}
}
else
{
number.UnGet();
number.Mark(startMark);
number.Inc();
}
bracketsOpen++;
brackets++;
}
else
number.Mark(startMark);
if ( number.Peek().IsDigit() ) // If the character was a number
numberCount++;
else if ( bracketsOpen > 0 )
{
number.Inc();
TChar next = number.Peek();
TInt bracketsOpen2 = bracketsOpen;
while( (IsValidPhoneNumberChar( next ) || next.IsSpace()
|| next == '(' || next == ')' || next == 'p' || next == '+'
|| next == 'w' ) && !(number.Eos()) && number.Offset() < end)
//.........这里部分代码省略.........