--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/uigraphicsutils/tulinc/tuladdressstringtokenizer.h Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+#ifndef __TULADDRESSSTRINGTOKENIZER_H__
+#define __TULADDRESSSTRINGTOKENIZER_H__
+
+#include <e32base.h>
+
+/**
+Address String Tokenizer API offers methods for parsing phone numbers and e-mail,
+URL and URI addresses from the given text. The API consists of the
+CTulAddressStringTokenizer class.
+
+Usage:
+
+@code
+ #include <tuladdressstringtokenizer.h>
+
+ // SFoundItem instance
+ CTulAddressStringTokenizer::SFoundItem item;
+
+ // Some text
+ TBufC<256> strSomeText(_L("Mail to me@someplace.com or call 040 1234567.
+ You can also tune in to audio feed at rtsp://someplace.com/somefeed.ra."));
+
+ // First the user has to create an instance of CTulAddressStringTokenizer by using the
+ // factory method NewL(). The method takes two parameters. The first
+ // parameter defines the text to be searched from and the second parameter
+ // tells what exactly is being looked for.
+ CTulAddressStringTokenizer singleSearch = CTulAddressStringTokenizer::NewL(strSomeText,
+ CTulAddressStringTokenizer::EFindItemSearchMailAddressBin);
+
+ // The passed text is parsed in construction, and found items can be fetched
+ // by using the ItemArray() method. It returns a constant array containing
+ // all the found items. The interface also offers helper functions for
+ // handling the item array by itself.
+
+ // Get count of found items.
+ TInt count(singleSearch->ItemCount());
+
+ // Get currently selected item (me@someplace.com) to the result1 variable.
+ singleSearch->Item(item);
+ TPtrC16 result1(strSomeText.Mid(item.iStartPos, item.iLength));
+
+ // Deallocate memory
+ delete singleSearch;
+
+ // Create an instance of CTulAddressStringTokenizer and look for all possible
+ // things (cases work as binary mask).
+ CTulAddressStringTokenizer* multiSearch = CTulAddressStringTokenizer::NewL(strSomeText,
+ (CTulAddressStringTokenizer::EFindItemSearchPhoneNumberBin |
+ CTulAddressStringTokenizer::EFindItemSearchURLBin |
+ CTulAddressStringTokenizer::EFindItemSearchMailAddressBin |
+ CTulAddressStringTokenizer::EFindItemSearchScheme));
+
+ // Get count of found items.
+ TInt count2(multiSearch->ItemCount());
+
+ // Get currently selected item to the result2 variable.
+ multiSearch->Item(item);
+
+ // Debug print all items and their type.
+ for( TInt i=0; i<count2; i++)
+ {
+ TPtrC16 result2(strSomeText.Mid(item.iStartPos, item.iLength));
+ RDebug::Print(_L("Found type %d item:"), item.iItemType);
+ RDebug::Print(_L("%S"), &result2);
+ multiSearch->NextItem(item);
+ }
+
+ // Deallocate memory
+ delete multiSearch;
+@endcode
+
+@publishedAll
+@released
+*/
+
+class CTulAddressStringTokenizer : public CBase
+ {
+public:
+ /**
+ Enumeration to define the search case.
+ Multiple enumerations can be used as binary mask.
+ */
+ enum TTokenizerSearchCase
+ {
+ // Searches phone numbers.
+ EFindItemSearchPhoneNumberBin = 4,
+ // Searches mail addresses.
+ EFindItemSearchMailAddressBin = 8,
+ // Searches fixed start URLs ("http://", "https://", "rtsp://"), "www.", "wap." and IPv4 addresses.
+ EFindItemSearchURLBin = 16,
+ // Searches for all URIs containing a scheme.
+ EFindItemSearchScheme = 32
+ };
+
+ // Struct to contain a found item.
+ struct SFoundItem
+ {
+ TInt iStartPos; // Start position of the found item.
+ TInt iLength; // Length of the found item (characters).
+ TTokenizerSearchCase iItemType; // Search case of the found item
+ };
+
+public: // Constructors and destructor
+ IMPORT_C static CTulAddressStringTokenizer* NewL( const TDesC& aText, TInt aSearchCases );
+ IMPORT_C static CTulAddressStringTokenizer* NewL( const TDesC& aText, TInt aSearchCases, TInt aMinNumbers );
+ IMPORT_C ~CTulAddressStringTokenizer();
+public:
+ IMPORT_C TInt ItemCount() const;
+ IMPORT_C TBool Item( SFoundItem& aItem ) const;
+ IMPORT_C TBool NextItem( SFoundItem& aItem );
+ IMPORT_C TBool PrevItem( SFoundItem& aItem );
+ IMPORT_C const CArrayFixFlat<SFoundItem>* ItemArray() const;
+ IMPORT_C TInt Position() const;
+ IMPORT_C void ResetPosition();
+ IMPORT_C TInt DoNewSearchL( const TDesC& aText, TInt aSearchCases);
+ IMPORT_C TInt DoNewSearchL( const TDesC& aText, TInt aSearchCases, TInt aMinNumbers );
+private:
+ CTulAddressStringTokenizer();
+ void AddItemL( TInt aStartPos, TInt aLength, TTokenizerSearchCase aType );
+
+ TBool SearchPhoneNumberL( const TDesC& aText );
+ TBool SearchMailAddressL( const TDesC& aText );
+ TBool SearchGenericUriL( const TDesC& aText );
+ TBool SearchUrlL( const TDesC& aText, TBool aFindFixedSchemas );
+ TBool ParseUrlL( const TDesC& aType, const TPtrC& aTokenPtr, TInt aTextOffset );
+
+ static TBool IsValidEmailChar(const TChar& charac); // Login part of the e-mail address
+ static TBool IsValidEmailHostChar(const TChar& charac); // Host part of the e-mail address
+ static TBool IsValidPhoneNumberChar(const TChar& charac); // Phone number
+ static TBool IsValidUrlChar( const TChar& charac); // URL
+
+ void ConstructL( const TDesC& aText, TInt aSearchCases, TInt aMinNumbers );
+ void PerformSearchL( const TDesC& aText, TInt aSearchCases );
+
+ CTulAddressStringTokenizer( const CTulAddressStringTokenizer& ); // Prohibit copy constructor
+ CTulAddressStringTokenizer& operator= ( const CTulAddressStringTokenizer& ); // Prohibit assigment operator
+private:
+ CArrayFixFlat<SFoundItem>* iFoundItems; // Array of all found items.
+ TInt iPosition; // Engine's position in the iFoundItems.
+ TInt iMinNumbers; // Minimum count of numbers in a phone number
+ };
+
+
+#endif // __TULADDRESSSTRINGTOKENIZER_H__
+