src/hbcore/i18n/hbdntxmlreader.cpp
changeset 0 16d8024aca5e
child 6 c3690ec91ef8
equal deleted inserted replaced
-1:000000000000 0:16d8024aca5e
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (developer.feedback@nokia.com)
       
     6 **
       
     7 ** This file is part of the HbCore module of the UI Extensions for Mobile.
       
     8 **
       
     9 ** GNU Lesser General Public License Usage
       
    10 ** This file may be used under the terms of the GNU Lesser General Public
       
    11 ** License version 2.1 as published by the Free Software Foundation and
       
    12 ** appearing in the file LICENSE.LGPL included in the packaging of this file.
       
    13 ** Please review the following information to ensure the GNU Lesser General
       
    14 ** Public License version 2.1 requirements will be met:
       
    15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    16 **
       
    17 ** In addition, as a special exception, Nokia gives you certain additional
       
    18 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    20 **
       
    21 ** If you have questions regarding the use of this file, please contact
       
    22 ** Nokia at developer.feedback@nokia.com.
       
    23 **
       
    24 ****************************************************************************/
       
    25 
       
    26 #include <QTranslator>
       
    27 #if defined(Q_OS_SYMBIAN)
       
    28 #include <e32base.h> 
       
    29 #endif // Q_OS_SYMBIAN
       
    30 #include "hbdntxmlreader_p.h"
       
    31 
       
    32 #define DirectoryLocalizerFile ":/i18n/hbdirectorylocalizer.xml"
       
    33 #define DirectoryLocalizerTranslationsFile "/resource/hbi18n/translations/directorylocalizer_"
       
    34 
       
    35 HbDNTXmlReader::HbDNTXmlReader()
       
    36 {
       
    37 	fullPaths = NULL;
       
    38 	pathStrings = NULL;
       
    39 	
       
    40 	
       
    41 	parseDirectoryPaths = false; 
       
    42 	parsePathStrings = false;
       
    43 	elementNumber = 0;
       
    44 	validElement = false;
       
    45 	twoDone = false;
       
    46     QLocale locale = QLocale::system();
       
    47     
       
    48     trans = new QTranslator();
       
    49 	QString languageStr;
       
    50 	languageStr.append(DirectoryLocalizerTranslationsFile);
       
    51 
       
    52 	languageStr.append(locale.name());
       
    53 
       
    54 // Support for checking both Z and C drives 
       
    55 	
       
    56 #if defined(Q_OS_SYMBIAN)
       
    57 	bool succeed = false;
       
    58 	succeed = trans->load("z:" + languageStr);
       
    59 	if ( succeed == false ) {
       
    60 		trans->load("c:" + languageStr);
       
    61 	}
       
    62 #else // Q_OS_SYMBIAN
       
    63 	trans->load(languageStr);
       
    64 #endif // Q_OS_SYMBIAN
       
    65 
       
    66 	QCoreApplication::installTranslator(trans);
       
    67 	validElement = false;
       
    68 	
       
    69 	QFile xmlFile(DirectoryLocalizerFile);
       
    70 
       
    71 	pathStrings = new QMap<QString, QString>;
       
    72 	fullPaths = new QMap<QString,QString>;
       
    73 
       
    74 	if( xmlFile.exists() )
       
    75 		{
       
    76 			QXmlInputSource source( &xmlFile );
       
    77 			QXmlSimpleReader reader; 
       
    78 			reader.setContentHandler( this );  
       
    79 			reader.parse( source ) ;
       
    80 		}
       
    81 	
       
    82 }
       
    83 
       
    84 HbDNTXmlReader::~HbDNTXmlReader()
       
    85 {
       
    86     delete fullPaths;
       
    87     delete pathStrings;
       
    88 	QCoreApplication::removeTranslator(trans);
       
    89 	delete trans;
       
    90 }
       
    91 
       
    92 bool HbDNTXmlReader::startDocument()
       
    93 {
       
    94     return true;
       
    95 }
       
    96 
       
    97 bool HbDNTXmlReader::startElement( const QString & ,
       
    98 				   const QString & ,
       
    99 				   const QString & qName,
       
   100 				   const QXmlAttributes & )
       
   101 {
       
   102 	if( qName == DirectoryLocalizerPathStringsStr ) {
       
   103 		parsePathStrings = true;  // set to parse Path 
       
   104 		parseDirectoryPaths = false;
       
   105 		elements.clear();
       
   106 		elementNumber = 0;  // Set current path element number as undefined
       
   107 		twoDone = false;
       
   108 	} else if( qName == DirectoryLocalizerFullDirectoryPathsStr ) {
       
   109 		parsePathStrings = false;
       
   110 		parseDirectoryPaths = true;  // set to parse localized path
       
   111 		elements.clear();
       
   112 		elementNumber = 0;  // set current path element as undefined
       
   113 		twoDone = false;
       
   114 	} else if( qName == DirectoryLocalizerNameStr ) {
       
   115 		elementNumber = 1;  // 
       
   116 		validElement = true;
       
   117 		twoDone = false;
       
   118 	} else if( qName == DirectoryLocalizerPathStr ){
       
   119 		elementNumber = 2;
       
   120 		validElement = true;
       
   121 		twoDone = false;
       
   122 	} else if( qName == DirectoryLocalizerTranslationStr){
       
   123 		elementNumber = 3;
       
   124 		validElement = true;	
       
   125 	} else if( qName == DirectoryLocalizerRootPathStr ){
       
   126 		elementNumber = 1;
       
   127 		validElement = true;
       
   128 		twoDone = false;
       
   129 	} else if( qName == DirectoryLocalizerLocalizedPathStr ){
       
   130 		elementNumber = 2;
       
   131 		validElement = true;
       
   132 		twoDone = false;
       
   133 	} else if( qName == DirectoryLocalizerLocalizedNameStr ){
       
   134 		elementNumber = 3;
       
   135 		validElement = true;
       
   136 		twoDone = false;
       
   137 	} else
       
   138     {
       
   139         elementNumber++;
       
   140     }
       
   141 	
       
   142     return true;	
       
   143 }
       
   144 
       
   145 bool HbDNTXmlReader::characters(const QString& text)
       
   146 {
       
   147     QString t = text;
       
   148     QString x;
       
   149     QString y;
       
   150     QString localizedStr;
       
   151     QString path;
       
   152     char* charPtr(NULL); 
       
   153     QByteArray* ba(NULL);
       
   154     if(validElement && elementNumber == 3 ) {
       
   155         ba = new QByteArray(t.toAscii());
       
   156         charPtr = ba->data();
       
   157     }
       
   158     
       
   159     if( validElement ) {
       
   160 		if(parsePathStrings) {
       
   161 			switch(elementNumber) {
       
   162             case 1:  // DirectoryLocalizerNameStr     
       
   163                 t=t.toLower();
       
   164                 elements.insert(0,t);
       
   165                 break;
       
   166             case 2:  // DirectoryLocalizerPathStr  
       
   167                 t= t.replace(DirectoryLocalizerDirectorySeparatorX2,DirectoryLocalizerDirectorySeparatorX1);					
       
   168                 t=t.toLower();
       
   169                 if ( elements.count() > 1 ) {
       
   170                     elements.insert(1,t);
       
   171                 } else { 
       
   172                     elements.append(t);
       
   173                 }
       
   174                 break;
       
   175             case 3:  // DirectoryLocalizerTranslationStr 			
       
   176                 elements.insert(0,t);
       
   177                 
       
   178                 localizedStr = QCoreApplication::translate(0,charPtr);
       
   179                 delete ba;
       
   180                 
       
   181                 if( localizedStr == t ){
       
   182 					localizedStr = "";                
       
   183                 }
       
   184                 elements.append(localizedStr);
       
   185                 break;
       
   186             default:
       
   187                 elements.append(t); 
       
   188                 break;
       
   189             }
       
   190             validElement = false;    	
       
   191 		} else if(parseDirectoryPaths) {			
       
   192 			switch(elementNumber) {
       
   193             case 1: // DirectoryLocalizerRootPathStr
       
   194                 temp = t;
       
   195                 break;
       
   196             case 2: // DirectoryLocalizerLocalizedPathStr							
       
   197                 x = pathStrings->value(temp);
       
   198                 y = pathStrings->value(t);
       
   199                     
       
   200                 path.append( x );
       
   201                 path.append( y );
       
   202 
       
   203                 elements.insert(0,path);
       
   204                 
       
   205                 break;
       
   206             case 3: // DirectoryLocalizerLocalizedNameStr
       
   207                  x = pathStrings->value(t);
       
   208                  elements.insert(1, x);
       
   209                 break;
       
   210             default:			
       
   211                 break;
       
   212 			}
       
   213 			validElement = false;    				
       
   214 		}
       
   215 	}
       
   216     return true;
       
   217 }
       
   218 
       
   219 bool HbDNTXmlReader::endElement( const QString &,
       
   220         const QString &,
       
   221         const QString & qName )
       
   222 {
       
   223 	if( qName == DirectoryLocalizerPathStringsStr ) {
       
   224 		parsePathStrings = false;
       
   225 		parseDirectoryPaths = false;
       
   226 		elements.clear();
       
   227 		elementNumber = 0;
       
   228 	} else if( qName == DirectoryLocalizerFullDirectoryPathsStr ) {
       
   229 		parsePathStrings = false;
       
   230 		
       
   231 		parseDirectoryPaths = false;
       
   232 		elements.clear();
       
   233 		elementNumber = 0;
       
   234 	}
       
   235 	
       
   236 	if( parsePathStrings && elements.count() > 1 ) {
       
   237         pathStrings->insertMulti(elements.at(0), elements.at(1));
       
   238         elements.clear();		
       
   239     } else if(parseDirectoryPaths && elements.count() > 1) {
       
   240 		QString element1, element2;
       
   241 		switch(elements.count()) {				
       
   242         case 2:					
       
   243             if(!twoDone){
       
   244                 fullPaths->insertMulti(elements.at(0),elements.at(1));
       
   245                 twoDone = true;
       
   246                 elements.clear();
       
   247             }
       
   248             break;
       
   249         default:
       
   250             break;
       
   251 		}
       
   252 	}
       
   253 	return true;
       
   254 }
       
   255 
       
   256 bool HbDNTXmlReader::endDocument()
       
   257 {
       
   258     return true;
       
   259 }
       
   260 
       
   261 QMap<QString,QString> HbDNTXmlReader::getFullPaths()
       
   262 {
       
   263 	return *fullPaths;
       
   264 }
       
   265 
       
   266