/*
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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 CWMLFORMATHANDLER_H
#define CWMLFORMATHANDLER_H
// INCLUDES
#include <E32BASE.H>
// CONSTANTS
const TInt KInfiniteLength = -1;
const TInt KNotFound = -1;
_LIT( KObscuringChar, "*" );
// DATA TYPES
enum TWapDocType
{
EWmlDocType_Is_Literal_String,
EWmlDocType_Unknown,
EWmlDocType_Wml_1_0,
EWmlDocType_Wta_1_0,
EWmlDocType_Wml_1_1,
EWmlDocType_Si_1_0,
EWmlDocType_Sl_1_0,
EWmlDocType_Co_1_0,
EWmlDocType_Channel_1_0,
EWmlDocType_Wml_1_2,
EWmlDocType_Wml_1_3
};
// FORWARD DECLARATIONS
// CLASS DECLARATION
/**
* Tiny class that encapsulates a WML format character.
*/
class TWmlFormatChar
{
public: // Constructors and destructor
/**
* C++ default constructor.
* @param aChar Format character.
* @param aStatic Static character.
*/
TWmlFormatChar( TUint aChar = 0, TUint aStatic = 0 );
public: // New functions
enum TWmlCase
{
EWmlNone,
EWmlUpperCase,
EWmlLowerCase,
EWmlNumericCase
};
/**
* Returns the character case forced by the format character.
* @return Character case.
*/
TWmlCase ForcedCase() const;
/**
* Returns the character case suggested by the format character.
* @return Character case.
*/
TWmlCase SuggestedCase() const;
/**
* Returns true whether alphabetical characters are allowed.
* @return Alphabetical characters are allowed.
*/
TBool AlphaAllowed() const;
/**
* Returns true whether numbers are allowed.
* @return Numeric characters are allowed.
*/
TBool NumericAllowed() const;
/**
* Returns true whether special characters are allowed.
* @return Special characters are allowed.
*/
TBool SpecialAllowed() const;
public: // Getter functions
/**
* Returns format character.
* @return Format character.
*/
TUint Char() const;
/**
* Returns static character if the format specifies static text
* , otherwise 0.
* @return Static character.
*/
TUint Static() const;
private: // Data
TUint iChar;
TUint iStatic;
};
class TKStaticChar
{
public: // Constructors and destructor
/**
* C++ default constructor.
* @param aChar Character code.
* @param aPos Document position.
*/
TKStaticChar( TUint aChar, TInt aPos );
public: // Getter functions
/**
* Returns static character.
* @return Static character.
*/
TUint Char() const;
/**
* Returns document position.
* @return Document position.
*/
TInt Pos() const;
private: // Data
TUint iChar;
TInt iPos;
};
/**
* Handles WML input format string.
*/
class CWmlFormatHandler : public CBase
{
protected: // Constructors and destructor
/**
* C++ default constructor.
*/
CWmlFormatHandler();
public: // Constructors and destructor
/**
* Two-phased constructor.
* @param aFormatString Validated format string.
* @param aWapDocType Document type. Format handling is different
* in earlier WML versions. Other than EWmlDocType_Wml_1_x is handled
* as EWmlDocType_Wml_1_3.
*/
static CWmlFormatHandler* NewLC
( const TDesC& aFormatString, TWapDocType aWapDocType );
/**
* Two-phased constructor.
* @param aFormatString Validated format string.
* @param aWapDocType Document type. Format handling is different
* in earlier WML versions. Other than EWmlDocType_Wml_1_x is handled
* as EWmlDocType_Wml_1_3.
*/
static CWmlFormatHandler* NewL
( const TDesC& aFormatString, TWapDocType aWapDocType );
/**
* Destructor.
*/
virtual ~CWmlFormatHandler();
public: // Text handling
/**
* Returns text only - without static text involved.
* This is quite useful for handling the pasting of text into the content of
* an input box.
* @return HBufC* Pointer to plain text input (no statics inserted).
*/
HBufC* GetTextOnlyL();
/**
* Stores visible text. If the text is invalid,
* the static text will be used instead.
* @param aText Constant descriptor.
* @param aNoValidation Force no validation.
* @return ETrue whether the operation succeeds.
*/
TBool SetTextL( const TDesC& aText, TBool aNoValidation = EFalse );
/**
* Returns zeroterminated copy of the stored content filled with
* static text in readable or illegible form.
* @param aReadable If EFalse dynamic text is replaced with
* KObscuringChar.
* @return Zeroterminated text.
*/
HBufC* TextLC( TBool aReadable = ETrue ) const;
/**
* Inserts character into the stored text.
* Nothing happens if aPos is invalid!
* @param aPos Document position.
* @param aChar Character to be inserted.
*/
void InsertL( TInt aPos, TChar aChar );
/**
* Inserts text into the stored text.
* Nothing happens if aPos is invalid!
* @param aPos Document position.
* @param aDes Text to be inserted.
*/
void InsertL( TInt aPos, const TDesC& aDes );
/**
* Deletes characters from the stored text.
* Nothing happens if aPos or aLength is invalid!
* @param aPos Document position.
* @param aLength Specifies the number of characters to be deleted.
*/
TBool Delete( TInt aPos, TInt aLength );
public: // Static text handling
/**
* Returns zeroterminated copy of the static text.
* @return Zeroterminated copy of the static text.
*/
HBufC* StaticTextLC() const;
/**
* Returns number of static characters.
* @return Number of static characters..
*/
TInt NumberOfStatic() const;
public: // Format handling
/**
* Returns the format of the specified document position.
* @param aIndex Document position.
* @return Format of the specified document position.
*/
TWmlFormatChar GetFormat( TInt aIndex ) const;
/**
* Returns the format of postfix. It's the value of "f" when
* format ends with "*f" or "nf", KWmlFormatNone othervise
* @return Format of postfix.
*/
TWmlFormatChar PostFix() const;
public: // Getter functions
/*
* Getter function.
* @return Value of iMinLength member.
*/
TInt MinLength() const;
/*
* Getter function.
* @return Value of iMaxLength member.
*/
TInt MaxLength() const;
public: // Validation functions
/**
* Validates the given character against the format character.
* @param aChar Character to be validated.
* @param aFormatChar Format character.
* @return ETrue whether the character matches to the format.
*/
TBool ValidateChar( TChar aChar, TWmlFormatChar aFormatChar ) const;
/**
* Validates all of the stored text against the stored format.
* @return List of invalid positions. (always non-NULL, can be empty)
*/
CArrayFixFlat<TInt>* ValidateTextLC() const;
/**
* Validates all of the stored text against the stored format.
* @return Text is valid.
*/
TBool ValidateTextL() const;
public: // position conversions
/**
* Returns position in the whole text.
* @param aPosExludingStatic Position in non-static text.
* @return Position in the whole text.
*/
TInt PosIncludingStatic( TInt aPosExludingStatic );
/**
* Returns position in the non-static text.
* @param aPosIncludingStatic Position in the whole text.
* @return Position in non-static text.
*/
TInt PosExludingStatic( TInt aPosIncludingStatic );
public: // other functions
/**
* Returns the position of the previous dynamic character to aPos.
* Returns KNotFound if there's no previous dynamic character.
* @param aPos Document position.
* @return Position of the previous dynamic character.
*/
TInt PreviousNonStatic( TInt aPos );
/**
* Returns the position of the next dynamic character to aPos.
* Returns KNotFound if there's no next dynamic character.
* @param aPos Document position.
* @return Position of the next dynamic character.
*/
TInt NextNonStatic( TInt aPos );
/**
* Returns the first position that is empty, but can be filled.
* Returns the length of the whole text if the text is fully filled.
* @return First position that is empty, but can be filled.
*/
TInt FirstEmpty();
/**
* Returns the first static position to the given position from left
* @return First position of the static character.
*/
TInt PreviousStatic( TInt aPos );
/**
* Returns the ETrue if the given pos is static else false
* @return is static char
*/
TBool IsPosStatic( TInt aPos );
private:
/**
* By default EPOC constructor is private.
* @param aFormatString Validated format string.
* @param aWapDocType Document type. Format handling is different
* in earlier WML versions. Other than EWmlDocType_Wml_1_x is handled
* as EWmlDocType_Wml_1_3.
*/
void ConstructL( const TDesC& aFormatString, TWapDocType aWapDocType );
private: // Data
TInt iMinLength;
TInt iMaxLength;
HBufC* iMask;
CArrayFixFlat<TKStaticChar>* iStatic;
TText iPostFix;
HBufC* iDynamic;
};
#endif
// End of File