connectivitymodules/SeCon/services/csc/inc/capparser.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:56 +0100
branchRCL_3
changeset 20 4a793f564d72
parent 0 d0791faffa3f
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201032 Kit: 201035

/*
* Copyright (c) 2005-2008 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:  CapParser header file
*
*/



#ifndef _CAPPARSER_H_
#define _CAPPARSER_H_

// INCLUDES

#include <e32base.h>
#include <badesca.h>

//
// Class CapParser
//
NONSHARABLE_CLASS( CapParser )
    {

public:
    /**
     * Parses element's id and type (eg. "<Memory>" -> EMemory, EElementBegin)
     * @param aText
     * @param aId
     * @param aType
     * @return none
     */
    static void ParseElement(const TDesC& aText, TInt& aId, TInt& aType);
    
public:
    /**
     * Constructs element with value (eg. "<Free>23456</Free>").
     * @param aText
     * @param aId
     * @param aValue
     * @return none
     */
    static void MakeElementL(TDes& aText, TInt aId, const TDesC& aValue);   
    /**
     * Constructs element without value (eg. "<Memory>" or "</Memory>").
     * @param aText
     * @param aId
     * @param aType
     * @return none
     */
    static void MakeElementL(TDes& aText, TInt aId, TInt aType);
    /**
     * Constructs element with attributes "Version" and "Date"(eg. 
     * "<FW Version="2.2"/>").
     * @param aText
     * @param aId
     * @param aVersion
     * @param aDate
     * @return none
     */
    static void MakeElementL(TDes& aText, TInt aId, const TDesC& aVersion, 
                            const TDesC& aDate);
    /**
     * Constructs element with attributes
     * @param aText
     * @param aId
     * @param aAttributes
     * @return none
     */
    static void MakeElementL(TDes& aText, TInt aId, CDesCArrayFlat* aAttributes);
    
public:
    /**
     * Returns capability element id (eg. EMemory).
     * @param aText
     * @return none
     */
    static TInt ElementId(const TDesC& aText);
    /**
     * Returns capability element tag (eg. "Memory").
     * @param aText
     * @param aId
     * @return none
     */
    static void GetTagL(TDes& aText, TInt aId);
    
private:
    /**
     * Replaces special characters to xml compliant.
     * @param aText
     * @param aValue
     * @return none
     */
    static void ReplaceSpecialCharsL( TDes& aText, const TDesC& aValue );
    };


//
// Class TXmlParser
//
NONSHARABLE_CLASS( TXmlParser )
    {

public:
    enum TElementType
        {
        EElementValue,
        EElementBegin,
        EElementEnd,
        EElementEmpty,
        EElementAtt,
        EElementComment,
        EElementVersion,
        EElementDocType,
        EElementUnknown
        };


public:
    /**
     * Sets a tag
     * @param aText The tag
     * @return none
     */
    void Set(const TDesC& aText);
    /**
     * Returns type
     * @return type
     */
    TInt Type() const;
    /**
     * Returns a pointer to a tag
     * @return The tag pointer
     */
    TPtrC Tag() const;
    /**
     * Gets the tag
     * @param aText The tag buffer
     * @return none
     */
    void GetTag(TDes& aText) const;

private:
    /**
     * Parses value (eg. <Language>en</Language>)
     * @return Operation success
     */
    TBool ElementValue();
    /**
     * Parses beginning tag (eg. <General>)
     * @return Operation success
     */
    TBool ElementBegin();
    /**
     * Parses ending tag (eg. </General>)
     * @return Operation success
     */
    TBool ElementEnd();
    /**
     * Parses empty element (eg. <CaseSenN/>)
     * @return Operation success
     */
    TBool ElementEmpty();
    /**
     * Parses attribute element (eg. <HW Version="1.5"/>)
     * Note: Attribute values cannot contain equals (=) or quotations (")
     * @return Operation success
     */
    TBool ElementAtt();
    /**
     * Identifies comment element ("<!-- OBEX Capability Object -->").
     * @return Operation success
     */
    TBool ElementComment();
    /**
     * Parses unknown elements
     * @return Operation success
     */
    TBool ElementUnknown();
    /**
     * Identifies version element ("<?xml version="1.0" ?>") 
     * @return Operation success
     */
    TBool ElementVersion();
    /**
     * Identifies document type element 
     * ("<!DOCTYPE Capability SYSTEM "obex-capability.dtd">").
     * @return Operation success
     */
    TBool ElementDocType();

private:
    /**
     * Inits the parser
     * @return none
     */
    void Init();
    /**
     * Parses xml-element.  
     * @return none
     */
    void Parse();

public:
    /**
     * Validates the character
     * @param aChar The char to be validated.
     * @return ETrue if the char is valid
     */
    static TBool ValidChar(const TChar aChar);
    /**
     * Validates the tag
     * @param aText The tag to be validated.
     * @return ETrue if the tag is valid
     */
    static TBool ValidTag(const TDesC& aText);
    /**
     * Returns the number of characters (aChar)
     * @param aText The buffer
     * @param aChar The character
     * @return The number of characters
     */
    static TInt Count(const TDesC& aText, const TChar aChar);
    /**
     * Returns the position of the first non space character
     * @param aText The buffer
     * @return The position
     */
    static TInt FirstNonSpace(const TDesC& aText);
    /**
     * Returns the position of the last non space character
     * @param aText The buffer
     * @return The position
     */
    static TInt LastNonSpace(const TDesC& aText);
    /**
     * Function returns a sub-string between aPos1 and aPos2
     * @param aText The buffer
     * @param aText Start position
     * @param aText End position
     * @return The pointer to the substring
     */
    static TPtrC SubStr(const TDesC& aText, TInt aPos1, TInt aPos2);
    /**
     * Function performs string copy with length checking.
     * @param aTarget Target buffer
     * @param aSource Source buffer
     * @return none
     */
    static void StrCopy(TDes& aTarget, const TDesC& aSource);

private:    
    /**
     * Returns a string
     * @return A pointer to a string
     */
    TPtrC Str() const;
    /**
     * Trimmer function
     * @return none
     */
    void TrimOriginal();
    /**
     * Function returns sub string between aPos1 and aPos2
     * @param aPos1 Start position
     * @param aPos2 End posiotion
     * @return none
     */
    TPtrC SubStr(TInt pos1, TInt pos2);

private:
    TPtrC iOriginal;
    TPtrC iText;
    TPtrC iTag;
    TPtrC iValue;
    TInt  iType;

    TInt iSlash;
    TInt iFirst;
    TInt iLast;
    };

#endif 

// End of file