csxhelp/HelpEngine/src/CSXHHTMLContentParser.cpp
branchRCL_3
changeset 44 12f60d9a73b3
parent 40 0d1adf67ec1b
child 45 cbffe13eac63
--- a/csxhelp/HelpEngine/src/CSXHHTMLContentParser.cpp	Thu Aug 19 09:42:56 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1419 +0,0 @@
-/*
-* Copyright (c) 2006 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:  CCSXHHTMLContentParser class definition
-*
-*/
-
-#include "CSXHHTMLContentParser.h"
-#include "CSXHXMLParseHandler.h"
-#include "CSXHHtmlTOC1.h"
-#include "CSXHKywdTOC1.h"
-#include "CSXHHtmlTOC2.h"
-#include "CSXHHelpDataBase.h"
-#include "csxhconstants.h"
-#include "CSXHRuntimeIndexing.h"
-#include "CSXHViewIDs.h"
-
-#include <eikenv.h> 
-#include <utf.h>
-#include <data_caging_path_literals.hrh>
-#include <zipfile.h>
-#include <bautils.h>
-#include <SenXmlReader.h> 
-#include <f32file.h>
-#include <pathinfo.h> 
-
-//Input Language variation changes
-#include <PtiEngine.h>
-
-const TInt KOffset = 2;
-        
-CCSXHHTMLContentParser* CCSXHHTMLContentParser::NewL(CCoeEnv* aCoeEnv)
-    {
-    CCSXHHTMLContentParser* self = CCSXHHTMLContentParser::NewLC(aCoeEnv);
-    CleanupStack::Pop(self);
-    return self;
-    }
-    
-CCSXHHTMLContentParser* CCSXHHTMLContentParser::NewLC(CCoeEnv* aCoeEnv)
-    {
-    CCSXHHTMLContentParser* self = new (ELeave) CCSXHHTMLContentParser(aCoeEnv);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    return self;
-    }
-    
-void CCSXHHTMLContentParser::ConstructL()
-    {
-    //RUNTIME
-    GetSupportedFeatureListL();
-    }
-    
-CCSXHHTMLContentParser::CCSXHHTMLContentParser(CCoeEnv* aCoeEnv) : iCoeEnv(aCoeEnv)
-    {
-    }
-    
-CCSXHHTMLContentParser::~CCSXHHTMLContentParser()
-    {
-    delete iXmlReader;
-    
-    //No need to delete the entries here, it will be done by the database
-    iHtmlTOC1List.Close();
-    
-    //Delete all contents from the array.
-    TInt count =    iDuplicateHelpTopicList.Count();
-    CCSXHHtmlTOC1* toc1;
-    for(TInt i=0;i<count;++i )
-        {
-        toc1 = iDuplicateHelpTopicList[i];
-        delete toc1;
-        }
-    iDuplicateHelpTopicList.Reset();    
-    iDuplicateHelpTopicList.Close();
-    
-    // Closes the array and frees all memory allocated to the array.
-   // iSupportedFeatures.Close();
-    
-    delete iSupportedInputLanguages;
-    delete iFeatureManager_FeatureIds;
-    delete iIndexing;
-    }
-    
-void CCSXHHTMLContentParser::GenerateTOC1ListL(CCSXHHelpDataBase* aDataBase)
-    {       
-    RFs& FileSession = iCoeEnv->FsSession();
-
-    TDriveList DirList; 
-    if(FileSession.DriveList(DirList) != KErrNone)
-        return; 
-    CCSXHXMLParseHandler_MetaFile* XMLParser = CCSXHXMLParseHandler_MetaFile::NewL(iCoeEnv); 
-    CleanupStack::PushL(XMLParser);   
-    InitializeReaderL(XMLParser);
-    
-      
-    TBuf<KMaxFileName>* rootDir = new(ELeave) TBuf<KMaxFileName>;
-    CleanupStack::PushL(rootDir);//5
-
-    // begin runtime index XML generating
-    //   
-    iIndexing = CCSXHRuntimeIndexing::NewL();
-    TInt driveListSize = DirList.Length();
-    TBool dirExists = iIndexing->IndexFileExistsL();
-    CDirScan* scanner=CDirScan::NewLC(FileSession);
-#ifdef _DEBUG
-    RDebug::Print(_L("runtime indexing object successfully build"));
-#endif
-    for(TInt dir(0); dir < driveListSize; dir++)
-        {
-        TInt error;
-        TDriveInfo info;
-        TChar driveLetter = '?';
-        error = FileSession.Drive(info, dir);
-            
-        if  ( ( error == KErrNone ) && 
-                (DirList[dir] && info.iType != EMediaNotPresent))
-            {
-            RFs::DriveToChar( dir, driveLetter );
-            TInt dirChanged = iIndexing->CheckDirChangeL( driveLetter );
-            rootDir->Delete( 0, rootDir->Length() );//Clear the previous contents                  
-            rootDir->Append( driveLetter );
-
-            if  ( dirExists 
-                    && ( dirChanged == KNoChange
-                        || dirChanged == KNoDirExist) )
-                {
-                // xml exist and no install/uninstall happened
-                // while Z needs special process once its index file exists
-#ifdef _DEBUG
-                RDebug::Print(_L("Used to launch, scan drive number:  %d"), dir);
-#endif
-                if ( dirChanged == KNoChange )
-                    {
-                    // no modify helps, so just parse index.xml
-                    //
-                    HandleMasterMetaFileL( aDataBase, driveLetter, XMLParser );
-                    }
-                else // KNoDirExist
-                    {
-                    // help content folder removed due to some reason (uninstall/crash?)
-                    // delete index file in case it exist
-#ifdef _DEBUG
-                    RDebug::Print( _L("no resource folder, delete index.xml if exists") );
-#endif
-                    iIndexing->DeleteIndexFileL( driveLetter );
-                    }
-                }
-            else
-                {
-                // xml not exist or install/uninstall not happend
-                //
-                if( GetHTMLContentPathForDriveL( rootDir,iCoeEnv ) )
-                    {
-#ifdef _DEBUG
-                    RDebug::Print( _L("No index, scan folder for parsing, drive letter: %d"), dir );
-#endif
-                    iIndexing->BeginIndexFileL( driveLetter );
-                    scanner->SetScanDataL(*rootDir
-                                    ,KEntryAttDir|KEntryAttMatchExclusive,
-                                    ESortByName|EAscending, CDirScan::EScanDownTree);
-                    ScanAndParseXMLfileToCreateTOC1ObjectL(FileSession,scanner,aDataBase,
-                                                        dir,XMLParser);  
-                                                        
-                    iIndexing->FinishAndCloseIndexFileL();
-                    
-                    }
-                
-                }
-
-            }
-        }
-    CleanupStack::PopAndDestroy( scanner );
-    CleanupStack::PopAndDestroy(rootDir);
-    CleanupStack::PopAndDestroy(XMLParser);
-    
-    ClearReader();
-    }
-
-TBool CCSXHHTMLContentParser::GetHTMLContentPathForDriveL(TBuf<KMaxFileName>* aContentDrive,CCoeEnv *aCoeEnv)
-    {
-    // get the path to language level
-    // Input: aContentDrive == C or E or Z
-    // Output: aContentDrive == C:\\resource\\xhtml\\01\\ (or Z:\\resource\\xhtml\\31\\)
-    //
-    aContentDrive->Append(KXhtmlFolder);
-    TInt len = aContentDrive->Length();
-    RFs& FileSession = aCoeEnv->FsSession();
-    RArray<TLanguage> langs;
-       BaflUtils::GetDowngradePathL(FileSession,User::Language(),langs);
-            
-    for(int i = 0; i < langs.Count(); ++i)
-        {
-        TLanguage lang = langs[i];
-        //TSW Error: UKAL-6YL72P
-        //Tool chain uses full symbian language id in 
-        //the directory name, which is not detected by help application.
-        //
-        if(lang < 10)
-            {
-            aContentDrive->AppendNumFixedWidth(lang,EDecimal,2);
-            }
-        else
-            {
-            aContentDrive->AppendNum(lang);
-            }
-        
-        aContentDrive->Append(KFwdSlash);
-        if(BaflUtils::PathExists(FileSession,*aContentDrive))
-            {
-            langs.Reset();
-            return ETrue;
-            }
-        else
-            {
-            aContentDrive->Delete((len-1),aContentDrive->Length()-len);
-            }    
-        }
-        langs.Reset();
-        return EFalse;
-    }
-    
-TBool CCSXHHTMLContentParser::HandleMasterMetaFileL(CCSXHHelpDataBase* aDataBase, 
-                        TChar& aDrive, MSenContentHandlerClient *aPrevHandler)                                               
-    {
-    RFs& FileSession = iCoeEnv->FsSession();
-    TBuf<KMaxFileName> masterFile;
-
-    iIndexing->GetPrivatePath( masterFile );
-    masterFile.Append( aDrive );
-    masterFile.Append( KFwdSlash );
-    iIndexing->AppendLocaleL( masterFile );
-    masterFile.Append( KMasterMetaFile );
-    if(BaflUtils::FileExists( FileSession,masterFile ) )
-        {
-#ifdef _DEBUG
-        RDebug::Print(_L("index exist begin to parse!    %c"), TUint( aDrive ) );
-#endif
-        CCSXHXMLParseHandler_MasterMetaFile* masterMetaHandler = 
-        CCSXHXMLParseHandler_MasterMetaFile::NewL(iCoeEnv);
-        masterMetaHandler->SetDataBasePtr(aDataBase);
-        masterMetaHandler->SetHtmlContentParserPtr(this);
-        CleanupStack::PushL(masterMetaHandler);      
-    
-        iXmlReader->SetContentHandler(*masterMetaHandler);
-        // ParseL is not in async
-        iXmlReader->ParseL(FileSession,masterFile);
-        iXmlReader->SetContentHandler(*aPrevHandler);
-        CleanupStack::PopAndDestroy(masterMetaHandler);
-        }
-
-    return ETrue;
-    }
-
-TBool CCSXHHTMLContentParser::IsRedirectedL(CCSXHHelpDataBase *aDataBase, 
-                              const TDesC &aPath, TUid &aUid, TCoeContextName &aContextName)                                               
-    {
-    RFs& FileSession = iCoeEnv->FsSession();
-    TBuf<KMaxFileName> redirectFile( aPath );
-    redirectFile.Append( KRedirectFile );
-    TBool result = EFalse;
-    
-    if ( BaflUtils::FileExists( FileSession, redirectFile ) )
-        {
-        CCSXHXMLParseHandler_RedirectFile* XMLParser = 
-                     CCSXHXMLParseHandler_RedirectFile::NewL(iCoeEnv, aUid, aContextName);
-        XMLParser->SetDataBasePtr( aDataBase );
-     
-        CleanupStack::PushL( XMLParser );      
-        InitializeReaderL( XMLParser );
-        // ParseL is not in async
-        iXmlReader->ParseL( FileSession, redirectFile );
-        if ( XMLParser->IsTargetPathFound() )
-            {
-            TBuf<KMaxFileName>& targetContextName = XMLParser->TargetContextName();
-            if ( targetContextName.Length() <= aContextName.MaxLength() )
-                {
-                aUid = XMLParser->TargetUid();
-                aContextName = targetContextName;
-                result = ETrue;
-                }
-            }
-        CleanupStack::PopAndDestroy( XMLParser );
-        ClearReader();
-        }
-
-    return result;
-    }
-    
-void CCSXHHTMLContentParser::GenerateTOC2ListL(CCSXHGenericTOC1& 
-aGenericTOC1Object, RPointerArray<CCSXHHelpContentBase>* GenericTOC2List)
-    {
-    CCSXHXMLParseHandler_IndexFile* XMLParser = CCSXHXMLParseHandler_IndexFile::NewL(iCoeEnv);
-    CleanupStack::PushL(XMLParser);      
-    InitializeReaderL(XMLParser);
-        
-    XMLParser->SetArray(GenericTOC2List);
-    XMLParser->SetGenericTOC1Object(aGenericTOC1Object);
-    XMLParser->SetHtmlContentParserPtr(this);
-    RFs& FileSession = iCoeEnv->FsSession();
-    CCSXHHtmlTOC1* toc1 = STATIC_CAST(CCSXHHtmlTOC1*,&aGenericTOC1Object);
-    TBuf<KMaxFileName> lookupindexfile;
-    toc1->GetHelpFileL(lookupindexfile);
-    XMLParser->SetPath(lookupindexfile);
-    lookupindexfile.Append(KIndexFile);              
- 
-    if(BaflUtils::FileExists(FileSession,lookupindexfile))
-        iXmlReader->ParseL (FileSession,lookupindexfile);
-    
-    TBuf<KMaxFileName>HelpContentName(toc1->GetName());
-    int toc1Count = iDuplicateHelpTopicList.Count();
-    
-     for(int i=0;i < toc1Count;i++)
-        {    
-        CCSXHHtmlTOC1* temptoc1 = iDuplicateHelpTopicList[i];
-            
-        if(temptoc1->GetName().CompareF(HelpContentName) == 0)
-            {    
-            TBuf<KMaxFileName> lookup;
-            temptoc1->GetHelpFileL(lookup);
-            XMLParser->SetPath(lookup);
-            lookup.Append(KIndexFile);              
-         
-            if(BaflUtils::FileExists(FileSession,lookup))
-                iXmlReader->ParseL (FileSession,lookup);
-            }
-        }
-    
-    CleanupStack::PopAndDestroy(XMLParser);
-    ClearReader();
-    }       
-        
-TAny* CCSXHHTMLContentParser::GetTopicContentL(CCSXHGenericTOC2* aTopic)
-    {
-    CCSXHHtmlTOC2* topic = STATIC_CAST(CCSXHHtmlTOC2*,aTopic);
-    TBuf<KMaxFileName> htmlFile;
-    topic->GetHtmlFileName(htmlFile);
-    return GetContentsFromFileL(htmlFile,iCoeEnv,iFeatureControl);
-    }
-    
-
-void CCSXHHTMLContentParser::ScanAndParseXMLfileToCreateTOC1ObjectL(
-        RFs& FileSession,
-        CDirScan* scanner,
-        CCSXHHelpDataBase* aDataBase,
-        const TInt& aDrive,
-        CCSXHXMLParseHandler_MetaFile* XMLParser
-        )
-    {
-    CDir* entryList = NULL;
-    scanner->NextL(entryList);
-    if (!entryList)
-        {
-        return;
-        }
- 
-    CleanupStack::PushL(entryList);
-    
-    TInt entryCount = entryList->Count();     
-    TInt ROMDrive;
-    RFs::CharToDrive(PathInfo::RomRootPath()[0], ROMDrive);
-    TBuf<KMaxFileName> lookup;
-
-    while (entryCount--)
-        {
-        TEntry entry = (*entryList)[entryCount];
-        
-        //Clear the previous values
-        lookup.Delete(0, lookup.Length());
-        lookup.Append(scanner->FullPath());
-        lookup.Append(entry.iName); 
-        lookup.Append(KFwdSlash);
-        lookup.Append(KMetaFile);
-        
-        //Check whether a file exists        
-        if (!BaflUtils::FileExists(FileSession,lookup))
-            continue;
-        
-        TRAPD(parserResult, iXmlReader->ParseL(FileSession, lookup));
-        if (parserResult == KErrNone)
-            {
-            if (CheckFeatureIDL(XMLParser->GetFeatureIds()))
-                {            
-                if (!IsAppUIdPresentAlready(entry.iName))
-                    {
-                    TBool isRomBased = EFalse;
-                    TInt32 priority = XMLParser->Priority();
-                    
-                    // Now we take a walk if it's application helps (priority == 0)
-                    if ((priority != 0) 
-                        && ((aDrive == ROMDrive) || IsRomBasedContentL(FileSession, entry.iName)))
-                        {
-                        if (priority < KHighestPriority)
-                            {
-                            priority = KHighestPriority;
-                            }
-                        else if (priority > KLowestPriority)
-                            {
-                            priority = KLowestPriority;
-                            }
-                        
-                        isRomBased = ETrue;
-                        }
-                    else 
-                        {
-                        priority = 0;
-                        }
-                    
-                    CCSXHHtmlTOC1* categoryObj = CCSXHHtmlTOC1::NewL(XMLParser->GetApplicationName(), entry.iName, aDrive, 
-                            isRomBased ? KCSXHToc2ViewID : KCSXHToc2AppHelpsViewID, priority);
-                    if (!categoryObj->IsValid())
-                        {
-                        delete categoryObj;
-                        }
-                    else
-                        {
-                        CleanupStack::PushL(categoryObj);
-                        if (isRomBased)
-                            {
-                            if (aDataBase->GetMainTopics()->InsertChildWithPriority(categoryObj, EFalse))
-                                {
-                                iHtmlTOC1List.AppendL(categoryObj);
-                                }
-                            else
-                                {
-                                iDuplicateHelpTopicList.AppendL(categoryObj);
-                                }
-                            }
-                        else
-                            {
-                            if (aDataBase->GetAppHelpsTopics()->InsertChild(categoryObj, EFalse))
-                                {
-                                iHtmlTOC1List.AppendL(categoryObj);
-                                }
-                            else
-                                {
-                                iDuplicateHelpTopicList.AppendL(categoryObj);
-                                }
-                            }
-                        
-                        iIndexing->RuntimeGenerateIndexL(*categoryObj, XMLParser->GetFeatureIds());
-                        CleanupStack::Pop(categoryObj);
-                        }
-                    }
-                }         
-            }
-        }       
-
-    CleanupStack::PopAndDestroy(entryList);
-    }
-
-TBool CCSXHHTMLContentParser::IsRomBasedContentL( RFs& FileSession, const TDesC &aUid )
-    {
-#ifdef __WINSCW__
-    return ETrue;
-#endif
-    
-    TBool result = EFalse;
-    CDirScan* scanner=CDirScan::NewLC(FileSession);
-    TBuf<KMaxFileName> rootDir;
-    rootDir.Append( 'z' );
-                
-    if( GetHTMLContentPathForDriveL( &rootDir,iCoeEnv ) )
-        {
-        scanner->SetScanDataL(rootDir,KEntryAttDir|KEntryAttMatchExclusive,
-                                        ESortByName|EAscending, CDirScan::EScanDownTree);
-        CDir* entryList = NULL;
-        scanner->NextL(entryList);
-    
-        if ( !entryList )
-            {
-            CleanupStack::PopAndDestroy( scanner );
-            return EFalse;
-            }
- 
-        TInt entryCount = entryList->Count();           
-    
-        while ( entryCount-- )
-            {
-            TEntry entry=(*entryList)[entryCount]; 
-            if ( ( entry.iName ).CompareC(aUid) == 0 )
-                {
-                result = ETrue;
-                break;
-                }
-            }
-        delete entryList;
-        }
-    
-    CleanupStack::PopAndDestroy( scanner );
- 
-    return result;
-    }
-    
-void CCSXHHTMLContentParser::InsertHTMLToc1L(
-        const TDesC& aAppUidName,
-        const TDesC& aAppName, 
-        const TInt& aDrive,
-        CCSXHHelpDataBase* aDataBase, 
-        const TDesC& aFeatureIds, 
-        TInt32 aPriority
-        )
-    {
-    if (CheckFeatureIDL(aFeatureIds))
-        {
-        if (!IsAppUIdPresentAlready(aAppUidName)) 
-            {
-            // Now we take a walk if it's application helps (priority == 0)
-            CCSXHHtmlTOC1* categoryObj = CCSXHHtmlTOC1::NewL(aAppName,aAppUidName, aDrive,
-                    aPriority == 0 ? KCSXHToc2AppHelpsViewID : KCSXHToc2ViewID, aPriority);
-            
-            if (categoryObj->IsValid())
-                {
-                CleanupStack::PushL(categoryObj);
-                if (aPriority == 0)
-                    {
-                    if (aDataBase->GetAppHelpsTopics()->InsertChild(categoryObj, EFalse))
-                        {
-                        iHtmlTOC1List.AppendL(categoryObj);
-                        }
-                    else
-                        {
-                        iDuplicateHelpTopicList.AppendL(categoryObj);
-                        }
-                    }
-                else
-                    {
-                    if (aDataBase->GetMainTopics()->InsertChildWithPriority(categoryObj, EFalse))
-                        {
-                        iHtmlTOC1List.AppendL(categoryObj); //Keep a local copy*/
-                        }
-                    else
-                        {
-                        iDuplicateHelpTopicList.AppendL(categoryObj);
-                        }
-                    }
-                CleanupStack::Pop(categoryObj);
-                }
-            else
-                {
-                delete categoryObj;
-                }                    
-            }
-        }    
-    }
-    
-HBufC8* CCSXHHTMLContentParser::GetContentsFromFileL(const TDesC& htmlFile,CCoeEnv* aCoeEnv,
-            RFeatureControl& aFeatureControl) 
-    {
-    RFs& fileSession = aCoeEnv->FsSession();        
-    TInt SlashPosition = htmlFile.LocateReverse('\\');    
-    TBuf<KMaxFileName>* CompressedFile = new (ELeave) TBuf<KMaxFileName>; 
-    CleanupStack::PushL(CompressedFile); //1
-    CompressedFile->Copy(htmlFile.Mid(0,SlashPosition+1));
-    CompressedFile->Append(KContentZipFile);    
-    
-    HBufC8* CssContent = CreateBufferForCSSContentL(aFeatureControl);
-       
-    if(!BaflUtils::FileExists(fileSession,*CompressedFile))
-        {
-        CleanupStack::PopAndDestroy(CompressedFile);
-        
-        HBufC8* buffer = GetContentsFromHTMLFileL(htmlFile,aCoeEnv);
-        
-        return MergeCssAndHTMLContentL(buffer,CssContent);
-        }
-        
-    // Create an instance of CZipFile.
-    CZipFile* zipFile = CZipFile::NewL(fileSession, *CompressedFile);    
-    CleanupStack::PushL(zipFile); //2
-        
-    // Iterate and get the file name
-    CZipFileMemberIterator* members = zipFile->GetMembersL();
-    CleanupStack::PushL(members);//3
-    CZipFileMember* member = members->NextL(); // Get the first file in zip
-    
-    TInt nCount=0;    
-    const TBuf<KMaxFileName>*Fname;
-    TBuf<KMaxFileName> *HtmlFileName = new (ELeave) TBuf<KMaxFileName>;
-    CleanupStack::PushL(HtmlFileName); //4
-    HtmlFileName->Copy(htmlFile.Mid(SlashPosition+1));
-    for(nCount=0;member!=NULL;nCount++)
-        {         
-         Fname = member->Name();    
-         if(Fname->Compare(*HtmlFileName)==0 )
-            {
-            break;
-            }        
-        delete member;    
-        member = members->NextL();        
-        }
-
-    if(NULL == member)
-        {
-        CleanupStack::PopAndDestroy(HtmlFileName);
-        CleanupStack::PopAndDestroy(members);
-        CleanupStack::PopAndDestroy(zipFile);
-        CleanupStack::PopAndDestroy(CompressedFile);
-        
-        HBufC8* buffer = GetContentsFromHTMLFileL(htmlFile,aCoeEnv);
-        return MergeCssAndHTMLContentL(buffer,CssContent);
-        }
-        
-    CleanupStack::PushL(member);//5
-    RZipFileMemberReaderStream* stream;
-    zipFile->GetInputStreamL(member, stream);
-    CleanupStack::PushL(stream);//6
-        
-    // Extracts aFileName to a buffer.
-    // If the file is quite huge, then read the file in streaming mode.
-    // For example, use 4KB buffer and read it in an active object.
-    HBufC8* buffer = HBufC8::NewLC(member->UncompressedSize());//5
-    TPtr8 bufferPtr(buffer->Des());
-    User::LeaveIfError(stream->Read(bufferPtr, member->UncompressedSize()));
-
-    // Release all the resources.   
-    CleanupStack::Pop(buffer);
-    CleanupStack::PopAndDestroy(stream); 
-    CleanupStack::PopAndDestroy(member);
-    CleanupStack::PopAndDestroy(HtmlFileName);
-    CleanupStack::PopAndDestroy(members);
-    CleanupStack::PopAndDestroy(zipFile);
-    CleanupStack::PopAndDestroy(CompressedFile);
-    
-    return MergeCssAndHTMLContentL(buffer,CssContent);
-    }
-
-TBool CCSXHHTMLContentParser::HandleMasterKeywordFileL(CCSXHHelpDataBase* aDataBase)
-    {
-    RFs& FileSession = iCoeEnv->FsSession();
-    CCSXHXMLParseHandler_MasterKywd* XMLParser_MasterKywd = CCSXHXMLParseHandler_MasterKywd::NewL(iCoeEnv);  
-    CleanupStack::PushL(XMLParser_MasterKywd);  
-    InitializeReaderL(XMLParser_MasterKywd);
-    XMLParser_MasterKywd->SetHtmlContentParserPtr(this);
-    XMLParser_MasterKywd->SetDataBasePtr(aDataBase);
-    TBool bMasterKeywordFilePresent = EFalse;
-    
-    //Check for the availability of Master Keyword file
-    TBuf<KMaxFileName>* Master_kywdPath = new(ELeave) TBuf<KMaxFileName>;
-    CleanupStack::PushL(Master_kywdPath);//5
-    Master_kywdPath->Append(PathInfo::RomRootPath().Left(1));
-    GetHTMLContentPathForDriveL(Master_kywdPath,iCoeEnv);
-    Master_kywdPath->Append(KMasterKywdFile);
-    
-    if(BaflUtils::FileExists(FileSession,*Master_kywdPath))
-        {        
-        TRAP_IGNORE(iXmlReader->ParseL(FileSession,*Master_kywdPath ));
-        bMasterKeywordFilePresent = ETrue;
-        }    
-    
-    //KMasterKywdFile;
-    CleanupStack::PopAndDestroy(Master_kywdPath);
-    CleanupStack::PopAndDestroy(XMLParser_MasterKywd);
-    ClearReader();    
-    
-    return bMasterKeywordFilePresent;
-    }
-    
-void CCSXHHTMLContentParser::GenerateKywdTOC1ListL(CCSXHHelpDataBase* aDataBase)
-    {
-    if(!iHtmlTOC1List.Count())
-        return;
-    TBool bMasterKeywordFilePresent = HandleMasterKeywordFileL(aDataBase);
-    
-    CCSXHXMLParseHandler_Kywd* XMLParser = CCSXHXMLParseHandler_Kywd::NewL(iCoeEnv);  
-    CleanupStack::PushL(XMLParser);  
-    InitializeReaderL(XMLParser);
-    
-    XMLParser->SetDataBasePtr(aDataBase);
-    XMLParser->SetIsTOC2(EFalse);
-    XMLParser->SetHtmlContentParserPtr(this);
-    
-    //Parse keyword.xml file from Main Array list
-    ParseKeywdFileAndCreatekywdTOC1ObjectsL(iHtmlTOC1List,XMLParser,bMasterKeywordFilePresent);
-    
-    //Parse keyword.xml file from duplicate Array list
-    ParseKeywdFileAndCreatekywdTOC1ObjectsL(iDuplicateHelpTopicList,XMLParser,bMasterKeywordFilePresent);
-    
-    CleanupStack::PopAndDestroy(XMLParser);
-    ClearReader();
-    }
-    
-void CCSXHHTMLContentParser::GenerateTOC2ListForKeywordSearchL
-(CCSXHHelpDataBase* aDataBase,CCSXHKywdTOC1* aKywdTOC1Object)
-    {
-    RPointerArray<CCSXHHtmlTOC1>* TOC1HtmlList = aKywdTOC1Object->GetHtmlTOC1List();
-    if(!TOC1HtmlList)
-        return;
-    
-    CCSXHXMLParseHandler_Kywd* XMLParser = CCSXHXMLParseHandler_Kywd::NewL(iCoeEnv);
-    CleanupStack::PushL(XMLParser);      
-    InitializeReaderL(XMLParser);
-    
-    int toc1Count = TOC1HtmlList->Count();
-    CCSXHHtmlTOC1* toc1;
-
-    RFs& FileSession = iCoeEnv->FsSession();
-    
-    XMLParser->SetDataBasePtr(aDataBase);
-    XMLParser->SetIsTOC2(ETrue);
-    XMLParser->SetHtmlContentParserPtr(this);
-    
-    TBuf<KMaxFileName>* lookup = new(ELeave)TBuf<KMaxFileName>;
-    CleanupStack::PushL(lookup);//3
-    XMLParser->SetTOC1Title(aKywdTOC1Object->GetName());
-    for(int i = 0; i < toc1Count ; ++i )
-        {
-        toc1 = (*TOC1HtmlList)[i];
-        //Get Corresponding toc1 from Main array and set toc1 object
-        XMLParser->SetCurrentHtmlToc1(GetCorrespondingTOC1FromMainArray(toc1->GetName()));
-        //Clear the previous values
-        lookup->Delete(0,lookup->Length());
-        toc1->GetHelpFileL(*lookup);
-        XMLParser->SetPath(*lookup);
-        lookup->Append(KKeywordsFile);
-        TRAP_IGNORE(iXmlReader->ParseL (FileSession,*lookup ));
-        aDataBase->IncrementKeywordSearchCount();
-        }   
-    CleanupStack::PopAndDestroy(lookup);
-    CleanupStack::PopAndDestroy(XMLParser);  
-    ClearReader();
-    }
-    
-CCSXHHelpContentBase* CCSXHHTMLContentParser::GetContextTopicL( 
-        CCSXHHelpDataBase *aDataBase, 
-        TUid &aUid, 
-        TCoeContextName &aContextName
-        )
-    {
-    TBuf<KMaxFileName> path;
-    TInt32 toc1Count = iHtmlTOC1List.Count();
-    TInt32 dupToc1Count = iDuplicateHelpTopicList.Count();
-    CCSXHHtmlTOC1 *toc1 = NULL;
-    CCSXHHtmlTOC1 *temptoc1 = NULL;
-    TBool redirected = EFalse;
-    
-    for ( TInt32 i = 0; i < toc1Count; ++i )
-        {
-        toc1 = iHtmlTOC1List[i];
-        if ( aUid == toc1->GetAppUid() )
-            {
-            toc1->GetHelpFileL( path );
-            if ( IsRedirectedL( aDataBase, path, aUid, aContextName ) )
-                {
-                redirected = ETrue;
-                }
-            else
-                {
-                return toc1->GetContextTopic( aContextName );
-                }
-            break;
-            }
-        }
-    
-    if ( !redirected )
-        {
-        for ( TInt32 i = 0; i < dupToc1Count; ++i )
-            {
-            toc1 = iDuplicateHelpTopicList[i];
-            if ( aUid == toc1->GetAppUid() )
-                {
-                toc1->GetHelpFileL( path );
-                if ( IsRedirectedL( aDataBase, path, aUid, aContextName ) )
-                    {
-                    redirected = ETrue;
-                    }
-                else
-                    {
-                    temptoc1 = GetCorrespondingTOC1FromMainArray(toc1->GetName());                
-                    return temptoc1->GetContextTopic( aContextName );
-                    }
-                }
-            }
-        }
-        
-    if ( redirected )
-        {
-        for ( TInt32 i = 0; i < toc1Count; ++i )
-            {
-            toc1 = iHtmlTOC1List[i];
-            if ( aUid == toc1->GetAppUid() )
-                {    
-                return toc1->GetContextTopic( aContextName );
-                }
-            }
-        
-        for ( TInt32 i = 0; i < dupToc1Count; ++i )
-            {
-            toc1 = iDuplicateHelpTopicList[i];
-            if ( aUid == toc1->GetAppUid() )
-                {
-                temptoc1 = GetCorrespondingTOC1FromMainArray( toc1->GetName() );                
-                return temptoc1->GetContextTopic( aContextName );
-                }
-            }
-        }
-        
-    return NULL;
-    }
-    
-CCSXHHelpContentBase* CCSXHHTMLContentParser::GetHtmlTopicForUrlL(const TDesC& aUrl)
-    {
-    CCSXHHelpContentBase* tocobj = GetObjectBasedonUrlL(iHtmlTOC1List,aUrl,ETrue);
-    
-    if(NULL == tocobj)
-        tocobj = GetObjectBasedonUrlL(iDuplicateHelpTopicList,aUrl,EFalse);
-    
-    return tocobj;        
-    }
-
-CCSXHHelpContentBase* CCSXHHTMLContentParser::GetObjectBasedonUrlL(RPointerArray<CCSXHHtmlTOC1>& aTOC1ObjectsArray,
-        const TDesC& aUrl, TBool aMainArrayList)    
-    {
-        /*For URLs of form 
-        file:://<Drive Name>:/system/xhtml/<Lang ID>/<App UID>/Html name
-      We can have help topics for other cases, help topic objects not possible   
-    */
-    TBuf<KMaxFileName> aFileUrl;
-    
-    int toc1Count = aTOC1ObjectsArray.Count();
-    CCSXHHtmlTOC1* toc1,*temptoc1;
-    for(int j = 0; j < toc1Count; ++j)
-        {
-        toc1 = aTOC1ObjectsArray[j];
-        TBuf<KMaxFileName> htmlFile;
-        toc1->GetHelpFileL(htmlFile);
-        
-        //Convert fwd slashes to back slashes
-        TInt i = htmlFile.Find(KFwdSlash) ;
-        while (KErrNotFound != i)
-            {
-            htmlFile.Replace(i,1,KBackSlash);
-            i = htmlFile.Find(KFwdSlash) ;
-            }
-        
-        i = aUrl.FindC(htmlFile);
-        if(i != KErrNotFound)
-            {
-            TFileName fileName;
-            i = aUrl.LocateReverseF('/');
-            fileName = aUrl.Mid(i + 1);
-            if(aMainArrayList)
-                temptoc1 = toc1;
-            else
-                temptoc1 = GetCorrespondingTOC1FromMainArray(toc1->GetName());    
-            
-            return temptoc1->GetHtmlTopicForFile(fileName);
-            }
-        }
-    return NULL;    
-    }
-
-void CCSXHHTMLContentParser::GetHtmlFileL(CCoeEnv* coeEnv,const short& aDir,
-                                            const TAppUid& aUid,TBuf<KMaxFileName>& aFileName)
-    {
-    aFileName.Copy(KEmptyString);
-    
-    RFs& FileSession = coeEnv->FsSession();
-    TDriveList DirList; 
-    if( (FileSession.DriveList(DirList)<KErrNone) ||
-        (aDir >= DirList.Length()))
-        return; 
-    
-    TChar driveLetter = '?';
-    TDriveInfo info;
-    TInt error = FileSession.Drive(info, aDir);
-    if  ((error == KErrNone) && 
-        (DirList[aDir] && info.iType != EMediaNotPresent))
-        {
-        RFs::DriveToChar(aDir, driveLetter);
-
-        aFileName.Append(driveLetter);
-        GetHTMLContentPathForDriveL(&aFileName,coeEnv);
-        aUid.AppendUid(aFileName);
-        aFileName.Append(KFwdSlash);
-        }
-    }
-
-void CCSXHHTMLContentParser::InitializeReaderL(CCSXHXMLParseHandler* aXMLParser)
-    {
-    if(iXmlReader == NULL )
-        {       
-        iXmlReader = CSenXmlReader::NewL();
-        iXmlReader->SetContentHandler(*aXMLParser);
-        }
-    }
-void CCSXHHTMLContentParser::ClearReader()
-    {
-    delete iXmlReader;
-    iXmlReader = NULL;
-    }
-    
-TBool CCSXHHTMLContentParser::IsUidCategoryPresent(const TUid& aUid)
-    {
-    int toc1Count = iHtmlTOC1List.Count();
-    CCSXHHtmlTOC1* toc1;    
-    for(int i = 0; i < toc1Count; ++i)
-        {
-        toc1 = iHtmlTOC1List[i];
-        if(aUid == toc1->GetAppUid())
-            return ETrue;
-        }
-    
-    toc1Count = iDuplicateHelpTopicList.Count();
-    for(int i = 0; i < toc1Count; ++i)
-        {
-        toc1 = iDuplicateHelpTopicList[i];
-        if(aUid == toc1->GetAppUid())
-            return ETrue;
-        }    
-    return EFalse;  
-    }
-
-TBool CCSXHHTMLContentParser::GetHTMLToc1(const TDesC& aUid,CCSXHXMLParseHandler* aParser)
-    {
-    TUint AppId;
-    
-    if(!aUid.Length())
-        return EFalse;
-
-    TLex FolderUid(aUid.Mid(KOffset));
-    FolderUid.Val(AppId,EHex);
-    TUid ApplicationUid = TUid::Uid((TInt)AppId);
-    
-    int toc1Count = iHtmlTOC1List.Count();
-    
-    CCSXHHtmlTOC1* toc1;    
-    for(int i = 0; i < toc1Count; ++i)
-        {
-        toc1 = iHtmlTOC1List[i];
-        if(ApplicationUid == toc1->GetAppUid())
-            {
-            STATIC_CAST(CCSXHXMLParseHandler_MasterKywd*,aParser)->SetCurrentHtmlToc1(toc1); 
-            return ETrue;
-            }            
-        }
-    
-    toc1Count = iDuplicateHelpTopicList.Count();            
-    for(int i = 0; i < toc1Count; ++i)
-        {
-        toc1 = iDuplicateHelpTopicList[i];
-        if(ApplicationUid == toc1->GetAppUid())
-            {
-            STATIC_CAST(CCSXHXMLParseHandler_MasterKywd*,aParser)->SetCurrentHtmlToc1(toc1); 
-            return ETrue;
-            }            
-        }
-                
-    return EFalse;  
-    }
-
-//To get Corresponding toc1 from main array.
-CCSXHHtmlTOC1* CCSXHHTMLContentParser::GetCorrespondingTOC1FromMainArray(const TDesC& aApplicationName)
-    {
-    TInt toc1Count = iHtmlTOC1List.Count();
-    CCSXHHtmlTOC1* toc1;
-    for(int i=0;i<toc1Count;++i)
-        {
-        toc1 = iHtmlTOC1List[i];
-        if(toc1->GetName().CompareF(aApplicationName) == 0)
-            return toc1;
-        }
-    
-    return NULL;
-    }
-
-//Check UId is already present in the list.    
-TBool CCSXHHTMLContentParser::IsAppUIdPresentAlready(const TDesC& aUid)
-    {
-    TBool result = EFalse;
-    TInt toc1Count = iHtmlTOC1List.Count();
-    CCSXHHtmlTOC1* toc1;
-    
-    TUint AppId;
-    TLex FolderUid(aUid.Mid(KOffset));
-    FolderUid.Val(AppId,EHex);
-    TUid ApplicationUid = TUid::Uid((TInt)AppId);
-    
-    for(int i=0;i<toc1Count;++i)
-        {
-        toc1 = iHtmlTOC1List[i];
-        if(ApplicationUid == toc1->GetAppUid())
-            {
-            result = ETrue;
-            break;
-            }            
-        }
-        
-    toc1Count =    iDuplicateHelpTopicList.Count();    
-    for(int i=0;i<toc1Count;++i)
-        {
-        toc1 = iDuplicateHelpTopicList[i];
-        if(ApplicationUid == toc1->GetAppUid())
-            {
-            result = ETrue;
-            break;
-            }
-        }        
-        
-    return result;    
-
-    }
-    
-void CCSXHHTMLContentParser::ParseKeywdFileAndCreatekywdTOC1ObjectsL(
-        RPointerArray<CCSXHHtmlTOC1>& aTOC1ObjectsArray,
-        CCSXHXMLParseHandler_Kywd* XMLParser, TBool bMasterKeywordFilePresent)
-    {
-    int toc1Count = aTOC1ObjectsArray.Count();
-    CCSXHHtmlTOC1* toc1;
-     
-    TBuf<KMaxFileName>* lookup = new(ELeave)TBuf<KMaxFileName>;
-    CleanupStack::PushL(lookup);//1
-    
-    RFs& FileSession = iCoeEnv->FsSession();
-    
-        for(int i = 0; i < toc1Count; ++i)
-        {
-        toc1 = aTOC1ObjectsArray[i];
-        
-        if(bMasterKeywordFilePresent && toc1->IsROMDrive())
-            continue;
-        
-        //Clear the previous values
-        lookup->Delete(0,lookup->Length());
-        
-        toc1->GetHelpFileL(*lookup);
-        lookup->Append(KKeywordsFile);
-        
-          //Check whether a file exists        
-        if(!BaflUtils::FileExists(FileSession,*lookup))
-            continue;
-        
-        XMLParser->SetCurrentHtmlToc1(toc1);
-        TRAP_IGNORE(iXmlReader->ParseL(FileSession,*lookup ));
-        }
-
-    CleanupStack::PopAndDestroy(lookup);  
-    }
-
-//RUNTIME
-void CCSXHHTMLContentParser::GetSupportedFeatureListL()
-    {
-    RFeatureUidArray SupportedFeatures;    
-    TInt err = iFeatureControl.Connect();
-    if ( err == KErrNone )
-        {
-         // ListSupportedFeatures() returns one of the Symbian error codes.
-         err = iFeatureControl.ListSupportedFeatures( SupportedFeatures );
-             
-         // Remember to call CloseL after using RFeatureControl.
-         // It disconnects the Feature Manager server.
-         iFeatureControl.Close();  
-        }
-    //As per new req. add true, flase to id and create an array.
-    
-    iFeatureManager_FeatureIds = new (ELeave) CDesCArrayFlat(2); 
-    
-    TBuf<25>CurrFId;
-    
-    for(TInt i=0;i<SupportedFeatures.Count();i++)
-        {
-        CurrFId.Copy(KEmptyString);    
-        CurrFId.AppendNum(SupportedFeatures[i].iUid);
-        iFeatureManager_FeatureIds->AppendL(CurrFId);
-        
-        CurrFId.Copy(KTrue_StringtoAppend);    
-        CurrFId.AppendNum(SupportedFeatures[i].iUid);
-        iFeatureManager_FeatureIds->AppendL(CurrFId);
-        
-        CurrFId.Copy(KFalse_StringtoAppend);    
-        CurrFId.AppendNum(SupportedFeatures[i].iUid);
-        iFeatureManager_FeatureIds->AppendL(CurrFId);        
-        }
-        
-    //Input Language variation changes
-    //-----------------------------------------
-    //Create an array with supported input language        
-    CPtiEngine* ptiEngine = CPtiEngine::NewL();
-    CleanupStack::PushL( ptiEngine );
-    
-    CArrayFix<TInt>* languageCodeArray = new(ELeave)CArrayFixFlat<TInt>(2);
-    
-    ptiEngine->GetAvailableLanguagesL( languageCodeArray );
-    
-    TInt nCount = languageCodeArray->Count();
-    
-    iSupportedInputLanguages = new (ELeave) CDesCArrayFlat(2); 
-    
-    //Codescanner gives error, if member variables are pushed.
-    //CleanupStack::PushL( iSupportedInputLanguages );
-    
-    for(TInt i=0; i<nCount;i++)
-        {
-        TInt languageCode = languageCodeArray->At(i);
-        TBuf<25>Currlang(_L("LANGUAGE_"));
-        if(languageCode < 10)
-            Currlang.AppendNumFixedWidth(languageCode,EDecimal,2);
-        else
-            Currlang.AppendNum(languageCode);
-        
-        iSupportedInputLanguages->AppendL(Currlang);
-        }
-    
-    //CleanupStack::Pop(iSupportedInputLanguages);    
-    CleanupStack::PopAndDestroy( ptiEngine );
-    
-    delete languageCodeArray;    
-    //-----------------------------------------
-    
-    SupportedFeatures.Close();
-    }
-    
-//RUNTIME
-TBool CCSXHHTMLContentParser::CheckFeatureIDL(const TDesC& aFeatureIds)
-    {
-    if(/*KHexPrefixLength == aFeatureIds.Length() &&*/ 
-        KErrNotFound != aFeatureIds.Find(KDefaultFeatureIdStringTemp))
-        {
-        return ETrue;
-        }
-            
-    HBufC* Ids = HBufC::NewLC(aFeatureIds.Length());    
-    TPtr CurrentFeatureIds = Ids->Des();    
-    CurrentFeatureIds.Copy(aFeatureIds);
-    CleanupStack::Pop(Ids);
-        
-    CDesCArray* FeatureIdList = new (ELeave) CDesCArrayFlat(2); ;
-    TInt EndPos = CurrentFeatureIds.Locate(' ');
-    
-    CleanupStack::PushL(FeatureIdList);
-                
-    while (KErrNotFound != EndPos)
-        {
-                FeatureIdList->AppendL(CurrentFeatureIds.Mid(0,EndPos));// FId_Val);            
-        CurrentFeatureIds = CurrentFeatureIds.Mid(EndPos+1);
-        EndPos = CurrentFeatureIds.Locate(' ') ;
-        }
-
-    if(KErrNotFound == EndPos && 0!= CurrentFeatureIds.Length())
-        {
-        FeatureIdList->AppendL(CurrentFeatureIds);
-        }    
-    
-    CleanupStack::Pop(FeatureIdList); 
-     
-    TInt position;        
-    if(KErrNone == FeatureIdList->Find(KDefaultFeatureIdString,position) || 
-       KErrNone == FeatureIdList->Find(KDefaultFeatureIdStringTemp,position) )
-        {
-        delete FeatureIdList;
-        delete Ids;
-        return ETrue;
-        }
-        
-    TInt nCount = FeatureIdList->MdcaCount();
-    
-    
-    //FeatureManager list contains all enabled featureIds, appended with true, and false.
-    //New Req. text associated with true_featureId, should be displayed, if Id is enabled.
-    //else, if featureId is disabled, text associated with false_featureId should be displayed. 
-    // 1. if featureId string contains "false" and it is not in the list, return ETrue.
-    // 2. if featureId string does not contain "false" and it is present in the list, return ETrue.
-    // 3. if featureId is part of input language, return ETrue.
-    for(TInt j=0;j < nCount;j++)
-        {
-        if(
-            (KErrNotFound != FeatureIdList->MdcaPoint(j).Find(KFalseString) &&
-            KErrNone != iFeatureManager_FeatureIds->Find(FeatureIdList->MdcaPoint(j),position))||
-        
-            (KErrNotFound == FeatureIdList->MdcaPoint(j).Find(KFalseString) &&
-            KErrNone == iFeatureManager_FeatureIds->Find(FeatureIdList->MdcaPoint(j),position)) ||
-        
-            KErrNone == iSupportedInputLanguages->Find(FeatureIdList->MdcaPoint(j),position)
-        )                        
-            {
-            delete FeatureIdList;
-            delete Ids;
-            return ETrue;
-            }        
-        }
-                
-    delete Ids;        
-    delete FeatureIdList;    
-    return EFalse;        
-    }    
-    
-HBufC8* CCSXHHTMLContentParser::CreateBufferForCSSContentL(RFeatureControl& aFeatureControl)
-    {    
-    RFeatureUidArray SupportedFeatures;
-    TInt err = aFeatureControl.Connect();
-    if ( err == KErrNone )
-        {
-         // ListSupportedFeatures() returns one of the Symbian error codes.
-         err = aFeatureControl.ListSupportedFeatures( SupportedFeatures );
-             
-         // Remember to call CloseL after using RFeatureControl.
-         // It disconnects the Feature Manager server.
-         aFeatureControl.Close();                    
-        }
-    
-        //Input Language variation changes
-    //-----------------------------------------
-
-    CPtiEngine* ptiEngine = CPtiEngine::NewL();
-    CleanupStack::PushL( ptiEngine );
-
-    CArrayFix<TInt>* languageCodeArray = new(ELeave)CArrayFixFlat<TInt>(2);
-
-    ptiEngine->GetAvailableLanguagesL( languageCodeArray );
-    
-    TInt nInputLangCount = languageCodeArray->Count();
-    TInt nCount = SupportedFeatures.Count();    
-
-    HBufC8* CssContent = HBufC8::NewLC(nCount * KMaxUnits * 6 + nInputLangCount * 3 + 400);
-    TPtr8 bufferPtr(CssContent->Des());
-    
-    AppendStyleSheetContent_listitem(bufferPtr,nCount,SupportedFeatures,*languageCodeArray);
-    AppendStyleSheetContent_paragraph(bufferPtr,nCount,SupportedFeatures,*languageCodeArray);
-    AppendStyleSheetContent_ahref(bufferPtr,nCount,SupportedFeatures,*languageCodeArray);
-    AppendStyleSheetContent_none(bufferPtr,nCount,SupportedFeatures);    
-        
-    SupportedFeatures.Close();                
-    
-    CleanupStack::Pop(CssContent);    
-    
-    //Input Language variation changes
-    //-----------------------------------------
-    CleanupStack::PopAndDestroy( ptiEngine );    
-
-    delete languageCodeArray;
-    //-----------------------------------------
-
-    return CssContent;
-    }
-    
-HBufC8* CCSXHHTMLContentParser::GetContentsFromHTMLFileL(const TDesC& htmlFile,CCoeEnv* aCoeEnv)
-    {
-    RFs& fsSession = aCoeEnv->FsSession();             
-    RFile file; 
-        
-    TInt err = file.Open(fsSession,htmlFile,EFileRead|EFileShareReadersOrWriters);
-    if(KErrNone == err)
-        {
-        TInt FileSize;
-        HBufC8* htmlFileContent = NULL;
-        if(KErrNone == file.Size(FileSize))
-            {
-            htmlFileContent = HBufC8::NewLC(FileSize);
-            TPtr8 PtrContent = htmlFileContent->Des();
-            
-            file.Read(PtrContent);    
-            CleanupStack::Pop(htmlFileContent);                
-            }        
-        file.Close();
-        return htmlFileContent;
-        }
-    else
-        {        
-        return NULL;
-        }
-    }
-    
-HBufC8* CCSXHHTMLContentParser::MergeCssAndHTMLContentL(HBufC8* aHTMLBuffer, HBufC8* aCssContent)
-    {
-    TInt BufferLength=0;
-    if(aHTMLBuffer)
-        BufferLength = aHTMLBuffer->Size();
-    
-    if(aCssContent)
-        BufferLength += aCssContent->Size();
-    
-    HBufC8* Htmlbuffer = HBufC8::NewLC(BufferLength);
-    
-    TPtr8 HtmlbufferPtr(Htmlbuffer->Des());
-    
-    if(aCssContent)
-        {
-        HtmlbufferPtr.Copy(aCssContent->Des());
-        delete aCssContent;
-        }
-        
-    if(aHTMLBuffer)
-        {
-        HtmlbufferPtr.Append(aHTMLBuffer->Des());
-        delete aHTMLBuffer;    
-        }
-    
-    if(Htmlbuffer)
-        CleanupStack::Pop(Htmlbuffer);
-    
-    return Htmlbuffer;    
-    }
-
-void CCSXHHTMLContentParser::AppendStyleSheetContent_listitem(TPtr8& abufferptr,TInt aFeatureIdCount,
-                                                    RFeatureUidArray& aSupportedFeatures,
-                                                    CArrayFix<TInt>& alanguageCodeArray)
-    {
-    //List Items
-    //---------------------------------------------------------
-    abufferptr.Copy(KCsstext_First);
-    
-    for(TInt i=0;i<aFeatureIdCount;++i)
-        {
-        TBuf<KMaxFileName> FeatureId;
-        FeatureId.Format(KtextFormat_true_l,aSupportedFeatures[i].iUid);
-        //FeatureId.Append(KComma);
-        abufferptr.Append(FeatureId);        
-        }
-        
-    for(TInt i=0;i<alanguageCodeArray.Count();++i)
-        {
-        TBuf<KMaxFileName> FeatureId;
-        if(alanguageCodeArray[i] < 10)
-            FeatureId.Format(KtextFormat_lang_0l,alanguageCodeArray[i]);
-        else
-            FeatureId.Format(KtextFormat_lang_l,alanguageCodeArray[i]);
-        
-        abufferptr.Append(FeatureId);        
-        }
-        
-    abufferptr.Append(KDefaultFeatureId);        
-    abufferptr.Append(KCsstext_displayp_li);        
-    abufferptr.Append(KCsstext_Last);
-    //---------------------------------------------------------
-    }
-
-void CCSXHHTMLContentParser::AppendStyleSheetContent_paragraph(TPtr8& abufferptr,TInt aFeatureIdCount,
-                                                    RFeatureUidArray& aSupportedFeatures,
-                                                    CArrayFix<TInt>& alanguageCodeArray)
-    {
-    //Paragraph
-    //---------------------------------------------------------
-    abufferptr.Append(KCsstext_First);
-    for(TInt i=0;i<aFeatureIdCount;++i)
-        {
-        TBuf<KMaxFileName> FeatureId;
-        FeatureId.Format(KtextFormat_true_b,aSupportedFeatures[i].iUid);
-        //FeatureId.Append(KComma);
-        
-        abufferptr.Append(FeatureId);        
-        }
-        
-    for(TInt i=0;i<alanguageCodeArray.Count();++i)
-        {
-        TBuf<KMaxFileName> FeatureId;
-        if(alanguageCodeArray[i] < 10)
-            FeatureId.Format(KtextFormat_lang_0b,alanguageCodeArray[i]);
-        else
-            FeatureId.Format(KtextFormat_lang_b,alanguageCodeArray[i]);
-        
-        abufferptr.Append(FeatureId);        
-        }
-        
-    abufferptr.Append(KDefaultFeatureId);
-    abufferptr.Append(KCsstext_displayp_p);        
-    abufferptr.Append(KCsstext_Last);
-    
-    //---------------------------------------------------------
-    }
-
-void CCSXHHTMLContentParser::AppendStyleSheetContent_ahref(TPtr8& abufferptr,TInt aFeatureIdCount,
-                                                RFeatureUidArray& aSupportedFeatures,
-                                                CArrayFix<TInt>& alanguageCodeArray)
-    {
-    //A href
-    //---------------------------------------------------------
-    abufferptr.Append(KCsstext_First);
-    for(TInt i=0;i<aFeatureIdCount;++i)
-        {
-        TBuf<KMaxFileName> FeatureId;
-        FeatureId.Format(KtextFormat_true_a,aSupportedFeatures[i].iUid);        
-        abufferptr.Append(FeatureId);        
-        }
-    
-    for(TInt i=0;i<alanguageCodeArray.Count();++i)
-        {
-        TBuf<KMaxFileName> FeatureId;
-        if(alanguageCodeArray[i] < 10)
-            FeatureId.Format(KtextFormat_lang_0a,alanguageCodeArray[i]);
-        else
-            FeatureId.Format(KtextFormat_lang_a,alanguageCodeArray[i]);
-        abufferptr.Append(FeatureId);        
-        }
-        
-    abufferptr.Append(KDefaultFeatureId);
-    abufferptr.Append(KCsstext_displayp_a);        
-    abufferptr.Append(KCsstext_Last);
-    
-    //---------------------------------------------------------
-    }
-
-void CCSXHHTMLContentParser::AppendStyleSheetContent_none(TPtr8& abufferptr,TInt aFeatureIdCount,
-                                                    RFeatureUidArray& aSupportedFeatures
-                                                    )
-    {
-    //False
-    //---------------------------------------------------------
-    abufferptr.Append(KCsstext_First);
-    for(TInt i=0;i<aFeatureIdCount;++i)
-        {
-        TBuf<KMaxFileName> FeatureId;
-        FeatureId.Format(KtextFormat_false,aSupportedFeatures[i].iUid,aSupportedFeatures[i].iUid,aSupportedFeatures[i].iUid);
-        abufferptr.Append(FeatureId);        
-        }
-        
-    abufferptr.Append(KDefaultFeatureId);
-    abufferptr.Append(KCsstext_displayp_n);        
-    abufferptr.Append(KCsstext_Last);
-    
-    //---------------------------------------------------------
-    }