csxhelp/HelpEngine/src/CSXHXMLParseHandler.cpp
branchRCL_3
changeset 17 12f60d9a73b3
parent 16 0d1adf67ec1b
child 18 cbffe13eac63
equal deleted inserted replaced
16:0d1adf67ec1b 17:12f60d9a73b3
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  CCSXHXMLParseHandler class definition
       
    15 *
       
    16 */
       
    17 
       
    18 #include "CSXHXMLParseHandler.h"
       
    19 #include "CSXHHtmlTOC2.h"
       
    20 #include "CSXHKywdTopics.h"
       
    21 #include "CSXHHelpDataBase.h"
       
    22 #include "CSXHHtmlTOC1.h"
       
    23 #include "csxhconstants.h"
       
    24 #include "CSXHHTMLContentParser.h"
       
    25 
       
    26 #include <aknnotewrappers.h> 
       
    27 #include <utf.h> 
       
    28 #include <eikenv.h> 
       
    29 #include <bautils.h>
       
    30 
       
    31 
       
    32 CCSXHXMLParseHandler::CCSXHXMLParseHandler(CCoeEnv*  aCoeEnv)
       
    33     {   
       
    34     iCoeEnv = aCoeEnv;
       
    35     }
       
    36     
       
    37 CCSXHXMLParseHandler::~CCSXHXMLParseHandler()
       
    38 	{
       
    39 	if(iFeatureIds)
       
    40     	{
       
    41     	delete iFeatureIds;
       
    42     	iFeatureIds = NULL;
       
    43     	}
       
    44 	}
       
    45 TInt CCSXHXMLParseHandler::StartDocument()
       
    46     {
       
    47     return KErrNone;
       
    48     }
       
    49 
       
    50 TInt CCSXHXMLParseHandler::EndDocument()
       
    51     {    
       
    52     return KErrNone;
       
    53     }
       
    54 
       
    55 void CCSXHXMLParseHandler::SetDataBasePtr(CCSXHHelpDataBase* aDataBase)
       
    56     {
       
    57     iDataBase = aDataBase;
       
    58     } 
       
    59     
       
    60 TDesC& CCSXHXMLParseHandler::GetApplicationName()
       
    61     {
       
    62     return iApplicationName;
       
    63     }
       
    64     
       
    65 TPtr CCSXHXMLParseHandler::GetFeatureIds()
       
    66     {    
       
    67     return iFeatureIds->Des();	
       
    68     }
       
    69     
       
    70 TBool CCSXHXMLParseHandler::SetAppNameFlag(const TDesC8&  alocalName,const TDesC& aAppTag)
       
    71     {   
       
    72     //R_TYPE_APPLICATION_TAG_NAME
       
    73     TBool Result = EFalse;
       
    74     TBuf<KMaxFileName> AppName;
       
    75     CnvUtfConverter::ConvertToUnicodeFromUtf8(AppName,alocalName);
       
    76     if(AppName.Compare(aAppTag) == 0)
       
    77         {
       
    78         iApplicationName.Copy(KEmptyString);        
       
    79         Result = ETrue;
       
    80         }
       
    81     else
       
    82         {
       
    83         Result = EFalse;
       
    84         }
       
    85     return Result;      
       
    86     } 
       
    87 
       
    88 //-------------- CCSXHXMLParseHandler_Kywd -------------------
       
    89 
       
    90 void CCSXHXMLParseHandler_Kywd::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser)
       
    91     {
       
    92     iParser = aParser;
       
    93     }
       
    94 
       
    95 CCSXHXMLParseHandler_Kywd* CCSXHXMLParseHandler_Kywd::NewL(CCoeEnv* aCoeEnv)
       
    96     {
       
    97     CCSXHXMLParseHandler_Kywd* self = new (ELeave)CCSXHXMLParseHandler_Kywd(aCoeEnv);   
       
    98     return self;
       
    99     }
       
   100     
       
   101 CCSXHXMLParseHandler_Kywd::CCSXHXMLParseHandler_Kywd(CCoeEnv* aCoeEnv)
       
   102 :CCSXHXMLParseHandler(aCoeEnv)                      
       
   103     {       
       
   104         iCurrentHtmlToc1 = NULL;
       
   105         iIsTargetName = EFalse;     
       
   106     }
       
   107     
       
   108 TInt  CCSXHXMLParseHandler_Kywd::StartElement (const TDesC8&  /*iURI*/ , const TDesC8&  
       
   109 alocalName, const TDesC8&  /*iqualname*/, const RAttributeArray&  aAttributes) 
       
   110     {
       
   111     if(iFeatureIds)
       
   112     	{
       
   113     	delete iFeatureIds;
       
   114     	iFeatureIds = NULL;
       
   115     	}
       
   116     	
       
   117     
       
   118     TRAP_IGNORE(iFeatureIds = HBufC::NewL(2));
       
   119     TPtr FIdValue = iFeatureIds->Des();
       
   120     FIdValue.Copy(_L("-1"));  
       
   121     
       
   122     if(iIsTOC2View)
       
   123         {
       
   124         CreateTOC2ObjectsforKeywordSearch(alocalName,aAttributes);
       
   125         }
       
   126     else
       
   127         {               
       
   128         iIsAppName = SetAppNameFlag(alocalName,KSearchViewTOC1Tag); 
       
   129         
       
   130 	    TInt nElements = aAttributes.Count();
       
   131 	    TBuf<KMaxFileName> TagName; 
       
   132 	    RAttribute AttributeInfo;
       
   133 	    RTagInfo TagInformation;	    
       
   134     	CnvUtfConverter::ConvertToUnicodeFromUtf8(TagName,alocalName);
       
   135     
       
   136 	    for(TInt i=0; i<nElements; i++)
       
   137 	        {
       
   138 	        AttributeInfo = aAttributes.operator[](i);             
       
   139 	        TagInformation = AttributeInfo.Attribute();
       
   140 	        
       
   141 	        TBuf<KMaxUnits> LocalName;
       
   142 	        //Read from resource file
       
   143 	        CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC());	        
       
   144 	        if(LocalName.Compare(_L("FeatureID")) == 0 && TagName.Compare(_L("text")) == 0) 
       
   145 	        	{
       
   146 	        	if(iFeatureIds)
       
   147 			    	{
       
   148 			    	delete iFeatureIds;
       
   149 			    	iFeatureIds = NULL;
       
   150 			    	}
       
   151 	        	
       
   152 	        	TRAP_IGNORE(iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length()));
       
   153 	        	TPtr FIdValue = iFeatureIds->Des(); 
       
   154 	        	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());
       
   155 	        	}	        	
       
   156 	        }       
       
   157         }   
       
   158     return KErrNone;
       
   159     }
       
   160 
       
   161 TInt CCSXHXMLParseHandler_Kywd::EndElement  (  const TDesC8&  ,const TDesC8& ,const TDesC8& ) 
       
   162     {
       
   163 	TRAP_IGNORE(CreateAndInsertKywdL());//Result can be ignored        
       
   164     iIsTargetName = EFalse;
       
   165     iIsAppName = EFalse;    
       
   166     return KErrNone;
       
   167     }
       
   168     
       
   169 TInt CCSXHXMLParseHandler_Kywd::Characters (const TDesC8&  aBuff, const TInt /*aStart*/, const TInt /*aLength*/) 
       
   170     {
       
   171     TBuf<KMaxFileName> TitleName;   
       
   172     if(iIsAppName)
       
   173         {           
       
   174         CnvUtfConverter::ConvertToUnicodeFromUtf8(TitleName,aBuff);
       
   175         iApplicationName.Append(TitleName);     
       
   176         }
       
   177     else if(iIsTargetName)
       
   178         {
       
   179         CnvUtfConverter::ConvertToUnicodeFromUtf8(TitleName,aBuff);
       
   180         iKeywordSearchTOC2TitleName.Append(TitleName);              
       
   181         }
       
   182     return KErrNone;
       
   183     }
       
   184 
       
   185 void CCSXHXMLParseHandler_Kywd::CreateTOC2ObjectsforKeywordSearch(const TDesC8& 
       
   186  alocalName, const RAttributeArray&  aAttributes)
       
   187     {
       
   188         iIsAppName = SetAppNameFlag(alocalName,KSearchViewTOC1Tag);
       
   189         
       
   190         TInt nElements = aAttributes.Count();
       
   191         TBuf<KMaxFileName>TagValue; 
       
   192         RAttribute AttributeInfo;
       
   193         RTagInfo TagInformation;
       
   194 		
       
   195 		TBuf<KMaxFileName> AppName;
       
   196         CnvUtfConverter::ConvertToUnicodeFromUtf8(AppName,alocalName);
       
   197         if(AppName.Compare(KSearchViewTOC2Tag) == 0)
       
   198             {
       
   199             iKeywordSearchTOC2TitleName.Copy(KEmptyString);
       
   200             iIsTargetName = ETrue;
       
   201             }
       
   202         else
       
   203             {
       
   204             iIsTargetName = EFalse;
       
   205             }
       
   206 		
       
   207 		if(!iIsTOC2View)            		               
       
   208 			return;
       
   209 		
       
   210         for(TInt i=0; i<nElements; i++)
       
   211             {
       
   212             AttributeInfo = aAttributes.operator[](i);             
       
   213             TagInformation = AttributeInfo.Attribute();
       
   214             
       
   215             TBuf<KMaxUnits> LocalName;
       
   216             //Read from resource file
       
   217             CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC());
       
   218             if(LocalName.Compare(KHtmlPageTag) == 0)    
       
   219                 {               
       
   220                 CnvUtfConverter::ConvertToUnicodeFromUtf8(iHTMLPageName,
       
   221                 	AttributeInfo.Value().DesC());
       
   222                 }
       
   223             else if(LocalName.Compare(_L("FeatureID")) == 0) 
       
   224 	            {
       
   225    	        	if(iFeatureIds)
       
   226 			    	{
       
   227 			    	delete iFeatureIds;
       
   228 			    	iFeatureIds = NULL;
       
   229 			    	}
       
   230 	        	TRAP_IGNORE(iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length()));
       
   231 	        	TPtr FIdValue = iFeatureIds->Des(); 
       
   232 	        	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());
       
   233 
       
   234 	            }
       
   235             }
       
   236         
       
   237     }   
       
   238     
       
   239 void CCSXHXMLParseHandler_Kywd::CreateAndInsertKywdL()
       
   240     {    
       
   241     if(iParser->CheckFeatureIDL(iFeatureIds->Des()))
       
   242         {
       
   243         if(iIsAppName && !iIsTOC2View)
       
   244 	        {
       
   245 	        iDataBase->InsertKeywordL(iApplicationName,iCurrentHtmlToc1);	
       
   246 	        }
       
   247         else if(iIsTargetName && iApplicationName.Compare(iTOC1Name)==0)
       
   248 	        {
       
   249 	        CCSXHHtmlTOC2* PXHTMLObject = 
       
   250 	        CCSXHHtmlTOC2::NewL(iCurrentHtmlToc1,iKeywordSearchTOC2TitleName,iHTMLPageName,ETrue);
       
   251 	        PXHTMLObject->SetKywdParent(STATIC_CAST(CCSXHKywdTopics*,iDataBase->GetKywdTopics())
       
   252 	                                            ->GetSelectedTopic());
       
   253 			STATIC_CAST(CCSXHHtmlTOC2*,PXHTMLObject)->SetHtmlFilePath(iFilePath);                                            
       
   254 	        iDataBase->InsertKeywordTopicL(/*iTOC1Name,*/PXHTMLObject);	
       
   255 	        }
       
   256         }
       
   257     }
       
   258     
       
   259 void CCSXHXMLParseHandler_Kywd::SetTOC1Title(const TDesC& aName)
       
   260     {
       
   261     iTOC1Name = aName;  
       
   262     }   
       
   263 
       
   264 void CCSXHXMLParseHandler_Kywd::SetCurrentHtmlToc1(CCSXHHtmlTOC1* aCurrentHtmlToc1)
       
   265     {
       
   266     iCurrentHtmlToc1 = aCurrentHtmlToc1;
       
   267     }
       
   268     
       
   269 void  CCSXHXMLParseHandler_Kywd::SetIsTOC2(TBool aFlag)
       
   270     {
       
   271     iIsTOC2View = aFlag;
       
   272     }       
       
   273     
       
   274 void CCSXHXMLParseHandler_Kywd::SetPath(const TDesC&  aFilePath)
       
   275 	{
       
   276 	iFilePath.Copy(KEmptyString);
       
   277 	iFilePath.Append(aFilePath);
       
   278 	}    
       
   279 
       
   280 //-------------- CCSXHXMLParseHandler_MetaFile -------------------
       
   281 
       
   282 CCSXHXMLParseHandler_MetaFile* CCSXHXMLParseHandler_MetaFile::NewL(CCoeEnv* aCoeEnv)
       
   283     {
       
   284     CCSXHXMLParseHandler_MetaFile* self = new (ELeave)CCSXHXMLParseHandler_MetaFile(aCoeEnv);   
       
   285     return self;
       
   286     }
       
   287     
       
   288 CCSXHXMLParseHandler_MetaFile::CCSXHXMLParseHandler_MetaFile(CCoeEnv* aCoeEnv)
       
   289 :CCSXHXMLParseHandler(aCoeEnv)
       
   290     {
       
   291     
       
   292     }
       
   293 TInt  CCSXHXMLParseHandler_MetaFile::StartElement (const TDesC8&  , const TDesC8&  
       
   294 alocalName, const TDesC8&  , const RAttributeArray& aAttributes) 
       
   295     {
       
   296     iIsAppName = SetAppNameFlag(alocalName,KAppNameTag);
       
   297 
       
   298     TInt nElements = aAttributes.Count();    
       
   299     TBuf<KMaxFileName> LocalTagName; 
       
   300     RAttribute AttributeInfo;
       
   301     RTagInfo TagInformation;
       
   302     
       
   303     CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalTagName,alocalName);
       
   304     for(TInt i=0; i<nElements; i++)
       
   305         {
       
   306         AttributeInfo = aAttributes.operator[](i);             
       
   307         TagInformation = AttributeInfo.Attribute();
       
   308         
       
   309     	if(iFeatureIds)
       
   310 	    	{
       
   311 	    	delete iFeatureIds;
       
   312 	    	iFeatureIds = NULL;
       
   313 	    	}
       
   314     	
       
   315     	TRAP_IGNORE(iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length()));
       
   316     	TPtr FIdValue = iFeatureIds->Des(); 
       
   317     	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());    	
       
   318         }
       
   319         
       
   320     if(LocalTagName.Compare(KAppNameTag) == 0 && nElements == 0)        
       
   321 		{
       
   322 		if(iFeatureIds)
       
   323 	    	{
       
   324 	    	delete iFeatureIds;
       
   325 	    	iFeatureIds = NULL;
       
   326 	    	}
       
   327 		
       
   328 		TRAP_IGNORE(iFeatureIds = HBufC::NewL(2));
       
   329 	    TPtr FIdValue = iFeatureIds->Des();
       
   330 	    FIdValue.Copy(_L("-1"));  
       
   331 		}
       
   332     
       
   333     if ( LocalTagName.Compare(KPriorityTag) == 0 && nElements == 0 )
       
   334     	{
       
   335     	iIsPriority = ETrue;
       
   336     	iPriority.Copy(KEmptyString); 
       
   337     	}
       
   338     else
       
   339     	{
       
   340     	iIsPriority = EFalse;
       
   341     	}
       
   342         
       
   343     return KErrNone;
       
   344     }
       
   345 
       
   346 TInt CCSXHXMLParseHandler_MetaFile::EndElement  (  const TDesC8&  ,const TDesC8& ,const TDesC8& ) 
       
   347     {
       
   348     iIsAppName = EFalse;
       
   349     iIsPriority = EFalse;
       
   350     return KErrNone;
       
   351     }
       
   352     
       
   353 TInt CCSXHXMLParseHandler_MetaFile::Characters (const TDesC8&  aBuff, const TInt /*aStart*/, const TInt /*aLength*/) 
       
   354     {
       
   355     if (iIsAppName)
       
   356         {  
       
   357         TBuf<KMaxFileName> TitleName; 
       
   358         CnvUtfConverter::ConvertToUnicodeFromUtf8(TitleName,aBuff);
       
   359         iApplicationName.Append(TitleName);     
       
   360         }
       
   361 		
       
   362     if (iIsPriority)
       
   363         {    
       
   364         TBuf<8> Priority; 
       
   365         CnvUtfConverter::ConvertToUnicodeFromUtf8(Priority,aBuff);
       
   366         iPriority.Append(Priority); 
       
   367         }
       
   368 
       
   369     return KErrNone;
       
   370     }
       
   371 
       
   372 TInt32 CCSXHXMLParseHandler_MetaFile::Priority()
       
   373     {
       
   374 	//The default priority is set to 0
       
   375 	TInt priority = 0;
       
   376 	
       
   377 	if (iPriority.Length() != 0)
       
   378 		{
       
   379 	    TLex lex( iPriority );
       
   380 	    lex.Val( priority );
       
   381 	    iPriority.Copy(KEmptyString); 
       
   382 		}
       
   383 	      
       
   384     return priority;
       
   385     }
       
   386     
       
   387 
       
   388 //-------------- CCSXHXMLParseHandler_MasterMetaFile -------------------
       
   389 CCSXHXMLParseHandler_MasterMetaFile* CCSXHXMLParseHandler_MasterMetaFile::NewL(CCoeEnv* aCoeEnv)
       
   390     {
       
   391     CCSXHXMLParseHandler_MasterMetaFile* self = new (ELeave)CCSXHXMLParseHandler_MasterMetaFile(aCoeEnv); 
       
   392     return self;
       
   393     }
       
   394     
       
   395 CCSXHXMLParseHandler_MasterMetaFile::CCSXHXMLParseHandler_MasterMetaFile(CCoeEnv* aCoeEnv)
       
   396 :CCSXHXMLParseHandler(aCoeEnv)
       
   397     {
       
   398         
       
   399     }
       
   400     
       
   401 TInt  CCSXHXMLParseHandler_MasterMetaFile::StartElement (const TDesC8&  , const TDesC8&  
       
   402 , const TDesC8&  , const RAttributeArray&  aAttributes) 
       
   403     {
       
   404     TRAP_IGNORE(CreateTOC1ObjectsL(aAttributes));
       
   405     return KErrNone;
       
   406     }
       
   407     
       
   408 
       
   409         
       
   410 void CCSXHXMLParseHandler_MasterMetaFile::CreateTOC1ObjectsL(const
       
   411  RAttributeArray&  aAttributes)
       
   412     {
       
   413     TInt nElements = aAttributes.Count();
       
   414     TBuf<KMaxFileName> appUid; 
       
   415     TBuf<KMaxFileName> appName; 
       
   416     TBuf<8> priorityBuf;
       
   417     TInt32 appPriority;
       
   418     RAttribute AttributeInfo;
       
   419     RTagInfo TagInformation;
       
   420     TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>);      
       
   421 	
       
   422     for(TInt i=0; i<nElements; i++)
       
   423         {
       
   424         AttributeInfo = aAttributes.operator[](i);             
       
   425         TagInformation = AttributeInfo.Attribute();
       
   426         
       
   427         TBuf<KMaxUnits> LocalName;
       
   428         //Read from resource file
       
   429         CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC());
       
   430         
       
   431         if ( LocalName.Compare( KDriveInfo ) == 0 )
       
   432             {
       
   433             TChar driveLetter(AttributeInfo.Value().DesC()[0]);
       
   434             RFs::CharToDrive( driveLetter, iDrive );
       
   435             }
       
   436             
       
   437         if(LocalName.Compare(KMasterCollection_idTag) == 0)
       
   438             {
       
   439             CnvUtfConverter::ConvertToUnicodeFromUtf8(appUid,AttributeInfo.Value().DesC());                    
       
   440             }
       
   441         
       
   442         if (LocalName.Compare(KPriorityTag) == 0)
       
   443             {
       
   444             CnvUtfConverter::ConvertToUnicodeFromUtf8(priorityBuf,AttributeInfo.Value().DesC());
       
   445             TLex lex( priorityBuf );
       
   446             lex.Val( appPriority );
       
   447             }
       
   448                     
       
   449         if(LocalName.Compare(KTOC2NameTag) == 0)
       
   450             {
       
   451             CnvUtfConverter::ConvertToUnicodeFromUtf8(appName,AttributeInfo.Value().DesC());
       
   452             if(2 == nElements)
       
   453             	{
       
   454             	if(iFeatureIds)
       
   455 			    	{
       
   456 			    	delete iFeatureIds;
       
   457 			    	iFeatureIds = NULL;
       
   458 			    	}
       
   459             	
       
   460             	iFeatureIds = HBufC::NewL(2);
       
   461 			    TPtr FIdValue = iFeatureIds->Des();
       
   462 			    FIdValue.Copy(_L("-1"));  
       
   463             	}
       
   464             	
       
   465             
       
   466             iParser->InsertHTMLToc1L( appUid, appName, iDrive, iDataBase, iFeatureIds->Des(), appPriority );                            	
       
   467             }
       
   468             
       
   469         if(LocalName.Compare(_L("FeatureID")) == 0) 
       
   470             {
       
   471         	if(iFeatureIds)
       
   472 		    	{
       
   473 		    	delete iFeatureIds;
       
   474 		    	iFeatureIds = NULL;
       
   475 		    	}
       
   476         	
       
   477         	iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length());
       
   478         	TPtr FIdValue = iFeatureIds->Des(); 
       
   479         	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());
       
   480             }            
       
   481         }        
       
   482     } 
       
   483     
       
   484 void CCSXHXMLParseHandler_MasterMetaFile::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser)
       
   485     {
       
   486     iParser = aParser;
       
   487     }
       
   488 
       
   489     
       
   490 //-------------- CCSXHXMLParseHandler_IndexFile -------------------
       
   491 
       
   492 CCSXHXMLParseHandler_IndexFile* CCSXHXMLParseHandler_IndexFile::NewL(CCoeEnv* aCoeEnv)
       
   493     {
       
   494     CCSXHXMLParseHandler_IndexFile* self = new (ELeave)CCSXHXMLParseHandler_IndexFile(aCoeEnv); 
       
   495     return self;
       
   496     }
       
   497     
       
   498 CCSXHXMLParseHandler_IndexFile::CCSXHXMLParseHandler_IndexFile(CCoeEnv* aCoeEnv)
       
   499 :CCSXHXMLParseHandler(aCoeEnv)
       
   500     {
       
   501         
       
   502     }
       
   503     
       
   504 TInt  CCSXHXMLParseHandler_IndexFile::StartElement (const TDesC8&  , const TDesC8&  
       
   505 , const TDesC8&  , const RAttributeArray&  aAttributes) 
       
   506     {
       
   507     if(iFeatureIds)
       
   508     	{
       
   509     	delete iFeatureIds;
       
   510     	iFeatureIds = NULL;
       
   511     	}
       
   512             	
       
   513     TRAP_IGNORE(iFeatureIds = HBufC::NewL(2));
       
   514     TPtr FIdValue = iFeatureIds->Des();
       
   515     FIdValue.Copy(_L("-1"));  
       
   516 
       
   517     TRAP_IGNORE(CreateTOC2ObjectsL(aAttributes));
       
   518     return KErrNone;
       
   519     }
       
   520     
       
   521 void CCSXHXMLParseHandler_IndexFile::SetArray(RPointerArray<CCSXHHelpContentBase>* aHTMLlist)
       
   522     {
       
   523     iTOC2Array = aHTMLlist;
       
   524     }
       
   525     
       
   526 void CCSXHXMLParseHandler_IndexFile::SetGenericTOC1Object(CCSXHGenericTOC1& aParent)
       
   527     {
       
   528     iParent = &aParent;
       
   529     }
       
   530     
       
   531 void CCSXHXMLParseHandler_IndexFile::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser)
       
   532     {
       
   533     iParser = aParser;
       
   534     }
       
   535     
       
   536         
       
   537 void CCSXHXMLParseHandler_IndexFile::CreateTOC2ObjectsL(const
       
   538  RAttributeArray&  aAttributes)
       
   539     {
       
   540     TInt nElements = aAttributes.Count();
       
   541     TBuf<KMaxFileName>TagValue; 
       
   542     RAttribute AttributeInfo;
       
   543     RTagInfo TagInformation;
       
   544     TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>);      
       
   545 
       
   546     for(TInt i=0; i<nElements; i++)
       
   547         {
       
   548         AttributeInfo = aAttributes.operator[](i);             
       
   549         TagInformation = AttributeInfo.Attribute();
       
   550         
       
   551         TBuf<KMaxUnits> LocalName;
       
   552         //Read from resource file
       
   553         CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC());
       
   554                     
       
   555         if(LocalName.Compare(KTOC2NameTag) == 0)
       
   556             {
       
   557             if(iParser->CheckFeatureIDL(iFeatureIds->Des()) || 2 == nElements)
       
   558 	            {            	
       
   559 	            CnvUtfConverter::ConvertToUnicodeFromUtf8(TagValue,AttributeInfo.Value().DesC());
       
   560 	            
       
   561 	            CCSXHGenericTOC2* PXHTMLObject = CCSXHHtmlTOC2::NewL(iParent,
       
   562 	            								 TagValue,iHTMLPageName);
       
   563 
       
   564 				STATIC_CAST(CCSXHHtmlTOC2*,PXHTMLObject)->SetHtmlFilePath(iFilePath);
       
   565 				
       
   566 	            if (KErrNone != iTOC2Array->InsertInOrder(PXHTMLObject,anOrder))
       
   567 	                delete PXHTMLObject;
       
   568 	            }            
       
   569             }
       
   570         else if(LocalName.Compare(KHtmlPageTag) == 0)   
       
   571             {               
       
   572             CnvUtfConverter::ConvertToUnicodeFromUtf8(iHTMLPageName,
       
   573             AttributeInfo.Value().DesC());
       
   574             }
       
   575         else if(LocalName.Compare(KCompressedTag) == 0)
       
   576             {
       
   577             CnvUtfConverter::ConvertToUnicodeFromUtf8(iCompressString,
       
   578 			AttributeInfo.Value().DesC());
       
   579             }
       
   580         else if(LocalName.Compare(_L("FeatureID")) == 0)
       
   581         	{
       
   582         	if(iFeatureIds)
       
   583 		    	{
       
   584 		    	delete iFeatureIds;
       
   585 		    	iFeatureIds = NULL;
       
   586 		    	}
       
   587         	
       
   588         	iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length());
       
   589         	TPtr FIdValue = iFeatureIds->Des(); 
       
   590         	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());
       
   591             }        
       
   592         }        
       
   593     } 
       
   594     
       
   595 void CCSXHXMLParseHandler_IndexFile::SetPath(const TDesC&  aFilePath)
       
   596 	{
       
   597 	iFilePath.Copy(KEmptyString);
       
   598 	iFilePath.Append(aFilePath);
       
   599 	}
       
   600     
       
   601 //-------------- CCSXHXMLParseHandler_MasterKeywordFile -------------------
       
   602 
       
   603 CCSXHXMLParseHandler_MasterKywd* CCSXHXMLParseHandler_MasterKywd::NewL(CCoeEnv* aCoeEnv)
       
   604     {
       
   605     CCSXHXMLParseHandler_MasterKywd* self = new (ELeave)CCSXHXMLParseHandler_MasterKywd(aCoeEnv); 
       
   606     return self;
       
   607     }
       
   608     
       
   609 CCSXHXMLParseHandler_MasterKywd::CCSXHXMLParseHandler_MasterKywd(CCoeEnv* aCoeEnv)
       
   610 :CCSXHXMLParseHandler(aCoeEnv)
       
   611     {
       
   612         
       
   613     }    
       
   614 
       
   615 TInt  CCSXHXMLParseHandler_MasterKywd::StartElement (const TDesC8&  , const TDesC8&  
       
   616 , const TDesC8&  , const RAttributeArray&  aAttributes) 
       
   617     {
       
   618     TRAP_IGNORE(CreateTOC1ObjectsL(aAttributes));
       
   619     return KErrNone;
       
   620     }
       
   621     
       
   622 void CCSXHXMLParseHandler_MasterKywd::SetHtmlContentParserPtr(CCSXHHTMLContentParser* aParser)
       
   623     {
       
   624     iParser = aParser;
       
   625     }
       
   626 
       
   627 void CCSXHXMLParseHandler_MasterKywd::SetCurrentHtmlToc1(CCSXHHtmlTOC1* aCurrentHtmlToc1)
       
   628     {
       
   629     iCurrentHtmlToc1 = aCurrentHtmlToc1;
       
   630     }
       
   631          
       
   632 void CCSXHXMLParseHandler_MasterKywd::CreateTOC1ObjectsL(const
       
   633  RAttributeArray&  aAttributes)
       
   634     {
       
   635     TInt nElements = aAttributes.Count();
       
   636     TBuf<KMaxFileName> appUid; 
       
   637     TBuf<KMaxFileName> KeywordName; 
       
   638     RAttribute AttributeInfo;
       
   639     RTagInfo TagInformation;
       
   640 	    
       
   641     TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>);      
       
   642 
       
   643     for(TInt i=0; i<nElements; i++)
       
   644         {
       
   645         AttributeInfo = aAttributes.operator[](i);             
       
   646         TagInformation = AttributeInfo.Attribute();
       
   647         
       
   648         TBuf<KMaxUnits> LocalName;
       
   649         //Read from resource file
       
   650         CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalName,TagInformation.LocalName().DesC());
       
   651                     
       
   652         if(LocalName.Compare(KMasterSearchTag) == 0)
       
   653             {
       
   654             CnvUtfConverter::ConvertToUnicodeFromUtf8(KeywordName,AttributeInfo.Value().DesC());
       
   655             }
       
   656                     
       
   657         if(LocalName.Compare(KMasterCollectionTag) == 0)
       
   658             {
       
   659             CnvUtfConverter::ConvertToUnicodeFromUtf8(appUid,AttributeInfo.Value().DesC());
       
   660             if(2 == nElements)
       
   661             	{
       
   662 				if(iParser->GetHTMLToc1(appUid,this))      
       
   663 	            	iDataBase->InsertKeywordL(KeywordName,iCurrentHtmlToc1);           	            	
       
   664             	}
       
   665             }       
       
   666             
       
   667 		if(LocalName.Compare(_L("FeatureID")) == 0)    
       
   668 			{
       
   669         	if(iFeatureIds)
       
   670 		    	{
       
   671 		    	delete iFeatureIds;
       
   672 		    	iFeatureIds = NULL;
       
   673 		    	}
       
   674         	
       
   675         	iFeatureIds = HBufC::NewL(AttributeInfo.Value().DesC().Length());
       
   676         	TPtr FIdValue = iFeatureIds->Des(); 
       
   677         	CnvUtfConverter::ConvertToUnicodeFromUtf8(FIdValue,AttributeInfo.Value().DesC());
       
   678 
       
   679 			if(iParser->CheckFeatureIDL(iFeatureIds->Des()))
       
   680 				{
       
   681 				if(iParser->GetHTMLToc1(appUid,this))      
       
   682 	            	iDataBase->InsertKeywordL(KeywordName,iCurrentHtmlToc1);           	
       
   683 				}
       
   684 			}
       
   685         }        
       
   686     }
       
   687 
       
   688 //-------------- CCSXHXMLParseHandler_RedirectFile -------------------
       
   689 
       
   690 CCSXHXMLParseHandler_RedirectFile* CCSXHXMLParseHandler_RedirectFile::NewL( CCoeEnv *aCoeEnv, 
       
   691 		const TUid &aSourceUid, const TCoeContextName &aSourceContextName )
       
   692     {
       
   693     CCSXHXMLParseHandler_RedirectFile* self = 
       
   694     		new (ELeave)CCSXHXMLParseHandler_RedirectFile( aCoeEnv, aSourceUid, aSourceContextName );   
       
   695     return self;
       
   696     }
       
   697     
       
   698 CCSXHXMLParseHandler_RedirectFile::CCSXHXMLParseHandler_RedirectFile( CCoeEnv *aCoeEnv, 
       
   699 		const TUid &aSourceUid, const TCoeContextName &aSourceContextName )
       
   700 :CCSXHXMLParseHandler( aCoeEnv ), iSourceContextName( aSourceContextName ), iTargetUid( aSourceUid )
       
   701     {
       
   702     }
       
   703 TInt  CCSXHXMLParseHandler_RedirectFile::StartElement (const TDesC8&  , 
       
   704 		const TDesC8 &alocalName, const TDesC8&  , const RAttributeArray &aAttributes) 
       
   705     {
       
   706     if ( !iIsTargetPathFound )
       
   707     	{
       
   708         TBuf<KMaxFileName> LocalTagName; 
       
   709   
       
   710         CnvUtfConverter::ConvertToUnicodeFromUtf8(LocalTagName,alocalName);
       
   711         
       
   712         if ( LocalTagName.Compare(KFromTag) == 0 )        
       
   713 		    {
       
   714 		    iIsFromTag = ETrue;
       
   715 		    iIsToTag = EFalse;
       
   716 		    }
       
   717         else if (LocalTagName.Compare(KToTag) == 0 )        
       
   718             {
       
   719     	    iIsToTag = ETrue;
       
   720     	    iIsFromTag = EFalse;
       
   721     	    }
       
   722         else
       
   723             {
       
   724             iIsFromTag = EFalse;
       
   725             iIsToTag = EFalse;
       
   726             }
       
   727         iFromContent.Copy(KEmptyString);
       
   728     	}
       
   729         
       
   730     return KErrNone;
       
   731     }
       
   732 
       
   733 TInt CCSXHXMLParseHandler_RedirectFile::EndElement  ( const TDesC8&  ,const TDesC8& ,const TDesC8& ) 
       
   734     { 
       
   735     if ( iIsFromTag && iFromContent.Compare( iSourceContextName ) == 0 )
       
   736     	{
       
   737         iIsSourceContextNameFound = ETrue;
       
   738     	}
       
   739     else
       
   740     	{
       
   741         iIsSourceContextNameFound = EFalse;
       
   742     	}
       
   743     
       
   744     iIsFromTag = EFalse;
       
   745     iIsToTag = EFalse;
       
   746     
       
   747     return KErrNone;
       
   748     }
       
   749     
       
   750 TInt CCSXHXMLParseHandler_RedirectFile::Characters (const TDesC8&  aBuff, const TInt /*aStart*/, const TInt /*aLength*/) 
       
   751     {
       
   752     if ( iIsFromTag )
       
   753         {  
       
   754         TCoeContextName file; 
       
   755         CnvUtfConverter::ConvertToUnicodeFromUtf8(file,aBuff);
       
   756         iFromContent.Append(file);     
       
   757         }
       
   758     
       
   759     else if ( iIsSourceContextNameFound && iIsToTag )
       
   760     	{
       
   761     	TBuf<KMaxFileName> targetPath; 
       
   762     	CnvUtfConverter::ConvertToUnicodeFromUtf8(targetPath,aBuff);
       
   763     	iTargetPath.Append(targetPath); 
       
   764 	
       
   765     	iIsTargetPathFound = ETrue;	
       
   766     	}
       
   767    
       
   768     return KErrNone;
       
   769     }
       
   770 
       
   771 TUid CCSXHXMLParseHandler_RedirectFile::TargetUid()
       
   772 	{
       
   773 	TInt loc = iTargetPath.Find( KHexPrefix );
       
   774 	if ( loc != KErrNotFound )
       
   775 	    {
       
   776 	    TLex lex( iTargetPath.Mid( loc+KHexPrefixLength, KHexUidLength ) );
       
   777 	    TUint appId = 0;
       
   778 	    lex.Val( appId, EHex );
       
   779 	    		
       
   780 	    if ( appId )
       
   781 	        {
       
   782 	    	iTargetUid = TUid::Uid( (TInt)appId );		
       
   783 	        }
       
   784 	    }
       
   785 	    	
       
   786 	return iTargetUid;
       
   787 	}
       
   788 
       
   789 TBuf<KMaxFileName>& CCSXHXMLParseHandler_RedirectFile::TargetContextName()
       
   790 	{
       
   791 	TInt loc = iTargetPath.Find( KHexPrefix );
       
   792     if ( loc != KErrNotFound )
       
   793         {    	    
       
   794 		iTargetContextName = iTargetPath.Mid( loc + KOffsetFromUidToContext );
       
   795 		}
       
   796     else
       
   797         {
       
   798 		iTargetContextName = iTargetPath;
       
   799 		}
       
   800 		    	
       
   801 	return iTargetContextName;
       
   802 	}
       
   803 
       
   804 TBool CCSXHXMLParseHandler_RedirectFile::IsTargetPathFound()
       
   805 	{
       
   806 	return iIsTargetPathFound;
       
   807 	}
       
   808