diff -r 417699dc19c9 -r c7e9f1c97567 xml/legacyminidomparser/xmldom/src/gmxmlcharacterdata.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/legacyminidomparser/xmldom/src/gmxmlcharacterdata.cpp Mon Sep 13 13:16:40 2010 +0530 @@ -0,0 +1,159 @@ +// Copyright (c) 2001-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: +// MDXMLCharacterData.cpp +// @file +// This class represents a text section of an XML file - +// basically it is a chunk of text which has a place in the +// object tree but has no children. +// +// + +#include +#include +#include + +CMDXMLCharacterData::CMDXMLCharacterData( TDOMNodeType aNodeType, CMDXMLDocument* aOwnerDocument ): +CMDXMLNode( aNodeType, false, aOwnerDocument) +// +// Constructor +// @param aNodeType The node type of the derived object +// @param aOwnerDocument The Document at the root of the DOM tree. +// + { + } + +EXPORT_C CMDXMLCharacterData::~CMDXMLCharacterData() + { + delete iData; + } + +EXPORT_C TDesC& CMDXMLCharacterData::Data() +// +// @return Returns the text of the Character Data section +// + { + return *iData; + } + +EXPORT_C void CMDXMLCharacterData::SetDataL( TDesC& aData ) +// +// Sets the whole of the Character Data section text +// @param aData Text to set. +// @leave Can Leave due to OOM +// + { + if( iData != NULL ) + { + delete iData; + iData = NULL; + } + iData = aData.AllocL(); + } + +EXPORT_C TInt CMDXMLCharacterData::Length() +// +// @return Returns the length of the text +// + { + return iData->Length();; + } + +EXPORT_C void CMDXMLCharacterData::AppendL( TDesC& aData ) +// +// Appends text to the Character Data section +// @param aData Text to append +// @leave Can Leave due to OOM +// + { + TInt newLength = aData.Length() + iData->Length(); + if(newLength > iData->Des().MaxLength()) + { + HBufC* newData = HBufC::NewMaxL(newLength); + newData->Des().Copy(iData->Des()); + delete iData; + iData = newData; + } + iData->Des().Append(aData); + } + +EXPORT_C TInt CMDXMLCharacterData::InsertL( TInt aInsertPos, TDesC& aData ) +// +// Inserts text at a point in the Character Data section +// @param aInsertPos The position to insert the text (0 means insert at the start) +// @param aData Text to insert +// @leave Can Leave due to OOM +// @return Returns KErrNone if successful or KErrNotFound if the insert position is out of range +// + { + TInt retVal = KErrNone; + if((aInsertPos >= 0) && (aInsertPos < iData->Length())) + { + TInt newLength = aData.Length() + iData->Length(); + if(newLength > iData->Des().MaxLength()) + { + HBufC* newData = HBufC::NewMaxL(newLength); + newData->Des().Copy(iData->Des()); + delete iData; + iData = newData; + } + iData->Des().Insert(aInsertPos, aData); + } + else + { + retVal = KErrNotFound; + } + return retVal; + } + +EXPORT_C TInt CMDXMLCharacterData::ReplaceL( TInt aInsertPos, TInt aLength, TDesC& aData ) +// +// Replaces a block of text in the Character Data section +// @param aInsertPos The position to insert the text (0 means insert at the start) +// @param aLength The number of characters to replace +// @param aData Text to insert +// @leave Can Leave due to OOM +// @return Returns KErrNone if successful or KErrNotFound if the replace block is out of range +// + { + TInt retVal = KErrNone; + if((aInsertPos >= 0) && (aInsertPos < iData->Length()) && (aLength >= 0)) + { + TInt newLength = aData.Length() + iData->Length() - aLength; + if(newLength > iData->Des().MaxLength()) + { + HBufC* newData = HBufC::NewMaxL(newLength); + newData->Des().Copy(iData->Des()); + delete iData; + iData = newData; + } + iData->Des().Replace(aInsertPos, aLength, aData); + } + else + { + retVal = KErrNotFound; + } + return retVal; + } + +EXPORT_C TBool CMDXMLCharacterData::CheckChildren() +// +// Check the children of this node for legality - must be defined based on DTD. +// For a Character Data section there can be no children so this always returns true. +// @return True if the node has legitimate children +// + { + return true; + } + +// End Of File