creator/engine/src/creator_scriptparser.cpp
branchRCL_3
changeset 22 fad26422216a
parent 21 b3cee849fa46
child 23 f8280f3bfeb7
--- a/creator/engine/src/creator_scriptparser.cpp	Tue Aug 31 15:15:20 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,395 +0,0 @@
-/*
-* Copyright (c) 2010 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: 
-*
-*/
-
-
-
-#include <f32file.h>
-#include <utf.h>
-#include <xml/documentparameters.h>
-#include "creator_scriptparser.h"
-#include "creator_scriptelementfactory.h"
-#include "creator_traces.h"
-
-using namespace Xml;
-
-CCreatorScriptParser::CCreatorScriptParser() 
-: iDefaultElement(TCreatorScriptElementInfo(TCreatorScriptElementInfo::EStatusUndefined, 0))
-    {        
-    }
-void CCreatorScriptParser::ConstructL(CCreatorEngine* aEngine)
-    {
-    LOGSTRING("Creator: CCreatorScriptParser::ConstructL");
-    iEngine = aEngine;
-    }
-
-CCreatorScriptParser* CCreatorScriptParser::NewL(CCreatorEngine* aEngine)
-    {
-    LOGSTRING("Creator: CCreatorScriptParser::NewL");
-    CCreatorScriptParser* self = CCreatorScriptParser::NewLC(aEngine);    
-    CleanupStack::Pop();
-    return self;
-    }
-CCreatorScriptParser* CCreatorScriptParser::NewLC(CCreatorEngine* aEngine)
-    {
-    LOGSTRING("Creator: CCreatorScriptParser::NewLC");
-    CCreatorScriptParser* self = new (ELeave) CCreatorScriptParser;
-    CleanupStack::PushL(self);
-    self->ConstructL(aEngine);
-    return self;
-    }
-
-CCreatorScriptParser::~CCreatorScriptParser()
-    {
-    delete iParser;
-    if( iElementStack.Count() > 0 )
-        {
-        delete iElementStack[0].iElement;        
-        }
-    iElementStack.Reset();
-    iElementStack.Close();
-    }
-
-void CCreatorScriptParser::GetTextFileMode(RFile& aFile, TInt& aFileSize) 
-    { 
-    LOGSTRING("Creator: CCreatorScriptParser::GetTextFileMode");
-    iScriptTextFormat = EFormatANSIASCII; 
-
-    // if we are working with text files, check the type first   
-    TBuf8<4> BOM; 
-
-    // first check for UTF-16 
-    if (aFileSize >= 2 && aFile.Read(0, BOM, 2) == KErrNone) 
-        { 
-        if (BOM.Length()==2 && BOM[0]==0xFF && BOM[1]==0xFE) 
-            { 
-            iScriptTextFormat = EFormatUTF16LE; 
-            aFileSize -= 2; 
-            return; 
-            } 
-        else if (BOM.Length()==2 && BOM[0]==0xFE && BOM[1]==0xFF) 
-            { 
-            iScriptTextFormat = EFormatUTF16BE; 
-            aFileSize -= 2; 
-            return;                 
-            }       
-        }
-        // then check for UTF-8 
-    if (aFileSize >= 3 && aFile.Read(0, BOM, 3) == KErrNone) 
-        { 
-        if (BOM.Length()==3 && BOM[0]==0xEF && BOM[1]==0xBB && BOM[2]==0xBF) 
-            { 
-            iScriptTextFormat = EFormatUTF8; 
-            aFileSize -= 3; 
-            return; 
-            } 
-        }
-        
-    // none of those, seek back to beginning 
-    TInt pos(0); 
-    aFile.Seek(ESeekStart, pos); 
-    }    
- 
-
-
-void CCreatorScriptParser::ParseL(const TDesC& aFileName)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::ParseL: %S", &aFileName);
-    // Create and start XML-parser
-    if( iParser == 0)
-        {
-        _LIT8(KXmlMimeType, "text/xml");
-        iParser = CParser::NewL(KXmlMimeType, *this);        
-        }
-
-    RFs filesession;
-    CleanupClosePushL(filesession);
-    User::LeaveIfError( filesession.Connect() );
-    Xml::ParseL(*iParser, filesession, aFileName);
-    
-    CleanupStack::PopAndDestroy(&filesession); // filesession    
-    }
-
-void CCreatorScriptParser::ParseL(RFile& aFile)
-    {
-    LOGSTRING("Creator: CCreatorScriptParser::ParseL");
-    TInt filesize = 0;
-    aFile.Size(filesize);
-    GetTextFileMode(aFile, filesize);
-    // Create and start XML-parser    
-    if( iParser == 0)
-        {
-        _LIT8(KXmlMimeType, "text/xml");
-        iParser = CParser::NewL(KXmlMimeType, *this);        
-        }
-    Xml::ParseL(*iParser, aFile);
-    }
-
-void CCreatorScriptParser::OnStartDocumentL(const Xml::RDocumentParameters& aDocParam, TInt aErrorCode)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::OnStartDocumentL (Error code: %d)", aErrorCode);
-    User::LeaveIfError(aErrorCode);    
-    const TDesC8& charSet = aDocParam.CharacterSetName().DesC();
-    }
-
-void CCreatorScriptParser::OnEndDocumentL(TInt aErrorCode)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::OnEndDocumentL (Error code: %d)", aErrorCode);
-    User::LeaveIfError(aErrorCode);
-    iEngine->SortCommands();
-    }
-
-void CCreatorScriptParser::OnStartPrefixMappingL(   const RString& /*aPrefix*/, 
-                                                    const RString& /*aUri*/, 
-                                                    TInt aErrorCode)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::OnStartPrefixMappingL (Error code: %d)", aErrorCode);
-    User::LeaveIfError(aErrorCode);
-    }
-
-void CCreatorScriptParser::OnEndPrefixMappingL(const RString& /*aPrefix*/, TInt aErrorCode)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::OnEndPrefixMappingL (Error code: %d)", aErrorCode);
-    User::LeaveIfError(aErrorCode);
-    }
-void CCreatorScriptParser::OnIgnorableWhiteSpaceL(const TDesC8& /*aBytes*/, TInt aErrorCode)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::OnIgnorableWhiteSpaceL (Error code: %d)", aErrorCode);
-    User::LeaveIfError(aErrorCode);
-    }
-void CCreatorScriptParser::OnSkippedEntityL(const RString& /*aName*/, TInt aErrorCode)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::OnSkippedEntityL (Error code: %d)", aErrorCode);
-    User::LeaveIfError(aErrorCode);
-    }
-void CCreatorScriptParser::OnProcessingInstructionL(  const TDesC8& /*aTarget*/, 
-                                    const TDesC8& /*aData*/, 
-                                    TInt aErrorCode)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::OnProcessingInstructionL (Error code: %d)", aErrorCode);
-    User::LeaveIfError(aErrorCode);
-    }
-void CCreatorScriptParser::OnError(TInt aErrorCode)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::OnError: %d", aErrorCode);
-    
-    iLastError = aErrorCode;
-    
-    // Delete all elements from the stack:
-    while(iElementStack.Count() > 0 )
-        {
-        TCreatorScriptElementInfo previousElem = LastElementInfo();    
-        delete previousElem.iElement;
-        previousElem.iElement = 0;
-        iElementStack.Remove(iElementStack.Count()-1);
-        }
-    }
-TAny* CCreatorScriptParser::GetExtendedInterface(const TInt32 aUid)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::GetExtendedInterface (UID: %d)", aUid);
-    return this;
-    }
-
-const TCreatorScriptElementInfo& CCreatorScriptParser::LastElementInfo() const
-{
-    LOGSTRING("Creator: CCreatorScriptParser::LastElementInfo");
-    if(iElementStack.Count() > 0)
-        {
-        return iElementStack[iElementStack.Count()-1];
-        }
-    return iDefaultElement;
-}
-
-/**
- * Create an element and add attributes to it.
- */
-void CCreatorScriptParser::OnStartElementL(  const RTagInfo& aElement,
-                                            const RAttributeArray& aAttributes,
-                                            TInt aErrorCode)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::OnStartElementL (Error code: %d)", aErrorCode);
-    User::LeaveIfError(aErrorCode);
-    const TDesC8& elementName8 = aElement.LocalName().DesC();        
-    HBufC* elementName16 = Convert8BitTo16BitLC(elementName8);
-        
-    const TCreatorScriptElementInfo& context = LastElementInfo();
-    
-    CCreatorScriptElement* element = 0;
-    if( context.iElement )
-        {
-        HBufC* fullContext = HBufC::NewL(
-                context.iElement->Context().Length() + 
-                context.iElement->Name().Length() + 
-                2);        
-        CleanupStack::PushL(fullContext);
-        if(context.iElement->Context() != KNullDesC && 
-           context.iElement->Context().Length() > 0 )
-            {
-            fullContext->Des().Copy(context.iElement->Context());
-            _LIT(KContextSeparator, "::");
-            fullContext->Des().Append(TPtrC(KContextSeparator));
-            }
-        const TDesC& parentName = context.iElement->Name();
-        if(parentName.Length() > 0 )
-            {            
-            fullContext->Des().Append(parentName);
-            }
-        element = TCreatorScriptElementFactory::CreateElementL( iEngine,
-                                                                elementName16->Des(), 
-                                                                fullContext->Des());
-        CleanupStack::PopAndDestroy(fullContext); // fullContext        
-        }
-    else
-        {
-        element = TCreatorScriptElementFactory::CreateElementL(iEngine, elementName16->Des());        
-        }
-        
-    CleanupStack::PopAndDestroy(elementName16);
-    CleanupStack::PushL(element);
-    
-    if( element == 0 )
-        {
-        // Add NULL pointer to stack. Otherwise the stack would go out of sync. in ::OnEndElement().
-        TCreatorScriptElementInfo info(TCreatorScriptElementInfo::EStatusParsing, element);
-        iElementStack.AppendL(info);   
-        CleanupStack::Pop(element);
-        return;        
-        }
-        
-    // Add attributes to the element:
-    TInt attrCount = aAttributes.Count();
-    for(TInt i = 0; i < attrCount; ++i)
-        {
-        const RAttribute& attribute = aAttributes[i];
-        const RTagInfo& nameInfo = attribute.Attribute();
-        const TDesC8& attrName8 = nameInfo.LocalName().DesC();
-        const TDesC8& value8 = attribute.Value().DesC();
-        // Convert data to 16 bit:
-        HBufC* attrName16 = Convert8BitTo16BitLC(attrName8);
-        HBufC* value16 = Convert8BitTo16BitLC(value8);
-        CCreatorScriptAttribute* scriptAttr = CCreatorScriptAttribute::NewLC(attrName16->Des(), value16->Des());
-        element->AddAttributeL(scriptAttr);
-        CleanupStack::Pop(scriptAttr);
-        CleanupStack::PopAndDestroy(value16);
-        CleanupStack::PopAndDestroy(attrName16);
-        }
-    
-    // Save element to the stack:
-    TCreatorScriptElementInfo info(TCreatorScriptElementInfo::EStatusParsing, element);
-    iElementStack.AppendL(info);
-    CleanupStack::Pop(element);
-    }
-
-/**
- * Executes the command if needed. Also caches the element for future use, if needed.
- */
-void CCreatorScriptParser::OnEndElementL(const RTagInfo& /*aElement*/, TInt aErrorCode)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::OnEndElementL (Error code: %d)", aErrorCode);
-    User::LeaveIfError(aErrorCode);
-     
-    if( iElementStack.Count() == 0 )
-        {
-        return;
-        }
-    // Get element from the stack:    
-    TCreatorScriptElementInfo elementInfo = LastElementInfo();
-    
-    if( elementInfo.iElement == 0 )
-        {
-        // Remove element from the stack:        
-        iElementStack.Remove(iElementStack.Count()-1);
-        return;
-        }
-        
-    // Execute the command if this is a command element:
-    if( elementInfo.iElement->IsCommandElement() )
-        {
-        elementInfo.iElement->ExecuteCommandL();
-        }
-    
-    // Remove element from the stack:
-    iElementStack.Remove(iElementStack.Count()-1);
-    
-    // Get the previous element from the stack:
-    if( iElementStack.Count() > 0 )
-        {
-        TCreatorScriptElementInfo previousElem = LastElementInfo();
-        
-        if( previousElem.iElement->IsRoot() )
-            {
-            // This element is not a sub-element (except of the root element, of course).        
-            if( elementInfo.iElement->IsCacheNeeded() )
-                {
-                // Add element to the cache, since it will be needed in future.            
-                elementInfo.iElement->AddToCacheL();
-                }
-            //else
-            //    {
-                // Not needed anymore, so element can be deleted:
-                delete elementInfo.iElement;
-                elementInfo.iElement = 0;
-           //     }
-            }
-        else
-            {
-            // There is a parent element (other than root), so we add this element
-            // as a sub-element fot it.
-            previousElem.iElement->AddSubElementL(elementInfo.iElement);
-            }
-        }
-    else
-        {
-        // Delete root element, which will delete recursively all sub-elements:
-        delete elementInfo.iElement;
-        elementInfo.iElement = 0;
-        }
-    }
-
-/**
- * Add content to element.
- */
-void CCreatorScriptParser::OnContentL(const TDesC8& aBytes, TInt aErrorCode)
-    {
-    LOGSTRING2("Creator: CCreatorScriptParser::OnContentL (Error code: %d)", aErrorCode);
-    User::LeaveIfError(aErrorCode);
-    if( iElementStack.Count() > 0 )
-        {
-        HBufC* contentData = Convert8BitTo16BitLC(aBytes);
-        TCreatorScriptElementInfo elementInfo = iElementStack[iElementStack.Count()-1];
-        if( elementInfo.iElement )
-            {
-            elementInfo.iElement->AppendContentL(*contentData);
-            }
-        CleanupStack::PopAndDestroy(contentData);
-        }
-    }
-
-HBufC16* CCreatorScriptParser::Convert8BitTo16BitLC(const TDesC8& aInput) 
-    {     
-    LOGSTRING("Creator: CCreatorScriptParser::Convert8BitTo16BitLC");
-    HBufC16* output = NULL;
-    
-    output = CnvUtfConverter::ConvertToUnicodeFromUtf8L(aInput);
-    
-    CleanupStack::PushL(output);
-    return output;          
-    } 
-
-TInt CCreatorScriptParser::GetError() const 
-{
-    return iLastError;
-}