lafagnosticuifoundation/uigraphicsutils/tulinc/tuladdressstringtokenizer.h
changeset 0 2f259fa3e83a
--- /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__
+