LCOV - code coverage report
Current view: top level - libreoffice/l10ntools/source - xmlparse.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 657 0.0 %
Date: 2012-12-27 Functions: 0 59 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include "sal/config.h"
      21             : 
      22             : #include <iterator> /* std::iterator*/
      23             : 
      24             : #include <stdio.h>
      25             : #include <sal/alloca.h>
      26             : 
      27             : #include "common.hxx"
      28             : #include "xmlparse.hxx"
      29             : #include <fstream>
      30             : #include <iostream>
      31             : #include <osl/mutex.hxx>
      32             : #include <osl/thread.hxx>
      33             : #include <rtl/strbuf.hxx>
      34             : 
      35             : using namespace std;
      36             : using namespace osl;
      37             : 
      38             : //
      39             : // class XMLChildNode
      40             : //
      41             : 
      42             : /*****************************************************************************/
      43           0 : XMLChildNode::XMLChildNode( XMLParentNode *pPar )
      44             : /*****************************************************************************/
      45           0 :                 : pParent( pPar )
      46             : {
      47           0 :     if ( pParent )
      48           0 :         pParent->AddChild( this );
      49           0 : }
      50             : 
      51             : 
      52             : /*****************************************************************************/
      53           0 : XMLChildNode::XMLChildNode( const XMLChildNode& obj)
      54             : /*****************************************************************************/
      55             : :   XMLNode(obj),
      56           0 :     pParent(obj.pParent){}
      57             : 
      58             : /*****************************************************************************/
      59           0 : XMLChildNode& XMLChildNode::operator=(const XMLChildNode& obj){
      60             : /*****************************************************************************/
      61           0 :     if(this != &obj){
      62           0 :         pParent=obj.pParent;
      63             :     }
      64           0 :     return *this;
      65             : }
      66             : //
      67             : // class XMLParentNode
      68             : //
      69             : 
      70             : 
      71             : /*****************************************************************************/
      72           0 : XMLParentNode::~XMLParentNode()
      73             : /*****************************************************************************/
      74             : {
      75           0 :     if( pChildList ){
      76           0 :             RemoveAndDeleteAllChildren();
      77           0 :             delete pChildList;
      78           0 :             pChildList = NULL;
      79             :     }
      80           0 :     pChildList = NULL;
      81           0 : }
      82             : /*****************************************************************************/
      83           0 : XMLParentNode::XMLParentNode( const XMLParentNode& obj)
      84             : /*****************************************************************************/
      85           0 : : XMLChildNode( obj )
      86             : {
      87           0 :     if( obj.pChildList ){
      88           0 :         pChildList=new XMLChildNodeList();
      89           0 :         XMLChildNode* pNode = NULL;
      90           0 :         for ( size_t i = 0; i < obj.pChildList->size(); i++ ){
      91           0 :             pNode = (*obj.pChildList)[ i ];
      92           0 :             if( pNode != NULL){
      93           0 :                 switch(pNode->GetNodeType()){
      94             :                     case XML_NODE_TYPE_ELEMENT:
      95           0 :                         AddChild( new XMLElement( *static_cast<XMLElement* >(pNode) ) ); break;
      96             :                     case XML_NODE_TYPE_DATA:
      97           0 :                         AddChild( new XMLData   ( *static_cast<XMLData* >   (pNode) ) ); break;
      98             :                     case XML_NODE_TYPE_COMMENT:
      99           0 :                         AddChild( new XMLComment( *static_cast<XMLComment* >(pNode) ) ); break;
     100             :                     case XML_NODE_TYPE_DEFAULT:
     101           0 :                         AddChild( new XMLDefault( *static_cast<XMLDefault* >(pNode) ) ); break;
     102           0 :                     default:    fprintf(stdout,"XMLParentNode::XMLParentNode( const XMLParentNode& obj) strange obj");
     103             :                 }
     104             :             }
     105             :         }
     106           0 :     }else pChildList = NULL;
     107           0 : }
     108             : /*****************************************************************************/
     109           0 : XMLParentNode& XMLParentNode::operator=(const XMLParentNode& obj){
     110             : /*****************************************************************************/
     111           0 :     if(this!=&obj){
     112           0 :         XMLChildNode::operator=(obj);
     113           0 :         if( pChildList ){
     114           0 :             RemoveAndDeleteAllChildren();
     115           0 :             delete pChildList;
     116           0 :             pChildList = NULL;
     117             :         }
     118           0 :         if( obj.pChildList ){
     119           0 :             pChildList=new XMLChildNodeList();
     120           0 :             for ( size_t i = 0; i < obj.pChildList->size(); i++ )
     121           0 :                 AddChild( (*obj.pChildList)[ i ] );
     122           0 :         }else pChildList = NULL;
     123             : 
     124             :     }
     125           0 :     return *this;
     126             : }
     127             : /*****************************************************************************/
     128           0 : void XMLParentNode::AddChild( XMLChildNode *pChild )
     129             : /*****************************************************************************/
     130             : {
     131           0 :     if ( !pChildList )
     132           0 :         pChildList = new XMLChildNodeList();
     133           0 :     pChildList->push_back( pChild );
     134           0 : }
     135             : 
     136             : /*****************************************************************************/
     137           0 : void XMLParentNode::RemoveAndDeleteAllChildren(){
     138             : /*****************************************************************************/
     139           0 :     if ( pChildList ) {
     140           0 :         for ( size_t i = 0; i < pChildList->size(); i++ )
     141           0 :             delete (*pChildList)[ i ];
     142           0 :         pChildList->clear();
     143             :     }
     144           0 : }
     145             : 
     146             : //
     147             : // class XMLFile
     148             : //
     149             : 
     150             : /*****************************************************************************/
     151           0 : sal_uInt16 XMLFile::GetNodeType()
     152             : /*****************************************************************************/
     153             : {
     154           0 :     return XML_NODE_TYPE_FILE;
     155             : }
     156             : 
     157           0 : void XMLFile::Write( rtl::OString const &aFilename )
     158             : {
     159             :     std::ofstream s(
     160           0 :         aFilename.getStr(), std::ios_base::out | std::ios_base::trunc);
     161           0 :     if (!s.is_open()) {
     162             :         std::cerr
     163           0 :             << "Error: helpex cannot create file " << aFilename.getStr()
     164           0 :             << '\n';
     165           0 :         std::exit(EXIT_FAILURE);
     166             :     }
     167           0 :     Write(s);
     168           0 :     s.close();
     169           0 : }
     170             : 
     171           0 : void XMLFile::WriteString( ofstream &rStream, const rtl::OUString &sString )
     172             : {
     173           0 :     rtl::OString sText(rtl::OUStringToOString(sString, RTL_TEXTENCODING_UTF8));
     174           0 :     rStream << sText.getStr();
     175           0 : }
     176             : 
     177           0 : sal_Bool XMLFile::Write( ofstream &rStream , XMLNode *pCur )
     178             : {
     179           0 :     if ( !pCur )
     180           0 :         Write( rStream, this );
     181             :     else {
     182           0 :         switch( pCur->GetNodeType()) {
     183             :             case XML_NODE_TYPE_FILE: {
     184           0 :                 if( GetChildList())
     185           0 :                     for ( size_t i = 0; i < GetChildList()->size(); i++ )
     186           0 :                         Write( rStream, (*GetChildList())[ i ] );
     187             :             }
     188           0 :             break;
     189             :             case XML_NODE_TYPE_ELEMENT: {
     190           0 :                 XMLElement *pElement = ( XMLElement * ) pCur;
     191           0 :                 rStream  << "<";
     192           0 :                 WriteString( rStream, pElement->GetName());
     193           0 :                 if ( pElement->GetAttributeList())
     194           0 :                     for ( size_t j = 0; j < pElement->GetAttributeList()->size(); j++ ) {
     195           0 :                         rStream << " ";
     196           0 :                         rtl::OUString sData( (*pElement->GetAttributeList())[ j ]->GetName() );
     197           0 :                         XMLUtil::QuotHTML( sData );
     198           0 :                         WriteString( rStream , sData );
     199           0 :                         rStream << "=\"";
     200           0 :                         sData = (*pElement->GetAttributeList())[ j ]->GetValue();
     201           0 :                         XMLUtil::QuotHTML( sData );
     202           0 :                         WriteString( rStream , sData  );
     203           0 :                         rStream << "\"";
     204           0 :                     }
     205           0 :                 if ( !pElement->GetChildList())
     206           0 :                     rStream << "/>";
     207             :                 else {
     208           0 :                     rStream << ">";
     209           0 :                     for ( size_t k = 0; k < pElement->GetChildList()->size(); k++ )
     210           0 :                         Write( rStream, (*pElement->GetChildList())[ k ] );
     211           0 :                     rStream << "</";
     212           0 :                     WriteString( rStream, pElement->GetName());
     213           0 :                     rStream << ">";
     214             :                    }
     215             :             }
     216           0 :             break;
     217             :             case XML_NODE_TYPE_DATA: {
     218           0 :                 XMLData *pData = ( XMLData * ) pCur;
     219           0 :                 rtl::OUString sData( pData->GetData());
     220           0 :                 XMLUtil::QuotHTML( sData );
     221           0 :                 WriteString( rStream, sData );
     222             :             }
     223           0 :             break;
     224             :             case XML_NODE_TYPE_COMMENT: {
     225           0 :                 XMLComment *pComment = ( XMLComment * ) pCur;
     226           0 :                 rStream << "<!--";
     227           0 :                 WriteString( rStream, pComment->GetComment());
     228           0 :                 rStream << "-->";
     229             :             }
     230           0 :             break;
     231             :             case XML_NODE_TYPE_DEFAULT: {
     232           0 :                 XMLDefault *pDefault = ( XMLDefault * ) pCur;
     233           0 :                 WriteString( rStream, pDefault->GetDefault());
     234             :             }
     235           0 :             break;
     236             :         }
     237             :     }
     238           0 :     return sal_True;
     239             : }
     240             : 
     241             : 
     242           0 : void XMLFile::Print( XMLNode *pCur, sal_uInt16 nLevel )
     243             : {
     244             : 
     245           0 :     if ( !pCur )
     246           0 :         Print( this );
     247             :     else {
     248           0 :         switch( pCur->GetNodeType()) {
     249             :             case XML_NODE_TYPE_FILE: {
     250           0 :                 if( GetChildList())
     251           0 :                     for ( size_t i = 0; i < GetChildList()->size(); i++ )
     252           0 :                         Print( (*GetChildList())[ i ] );
     253             :             }
     254           0 :             break;
     255             :             case XML_NODE_TYPE_ELEMENT: {
     256           0 :                 XMLElement *pElement = ( XMLElement * ) pCur;
     257             : 
     258           0 :                 fprintf( stdout, "<%s", rtl::OUStringToOString(pElement->GetName(), RTL_TEXTENCODING_UTF8).getStr());
     259           0 :                 if ( pElement->GetAttributeList())
     260             :                 {
     261           0 :                     for (size_t j = 0; j < pElement->GetAttributeList()->size(); ++j)
     262             :                     {
     263           0 :                         rtl::OString aAttrName(rtl::OUStringToOString((*pElement->GetAttributeList())[j]->GetName(),
     264           0 :                             RTL_TEXTENCODING_UTF8));
     265           0 :                         if (!aAttrName.equalsIgnoreAsciiCase(XML_LANG))
     266             :                         {
     267             :                             fprintf( stdout, " %s=\"%s\"",
     268             :                                 aAttrName.getStr(),
     269           0 :                                 rtl::OUStringToOString( (*pElement->GetAttributeList())[ j ]->GetValue(),
     270           0 :                                     RTL_TEXTENCODING_UTF8).getStr());
     271             :                         }
     272           0 :                     }
     273             :                 }
     274           0 :                 if ( !pElement->GetChildList())
     275           0 :                     fprintf( stdout, "/>" );
     276             :                 else {
     277           0 :                     fprintf( stdout, ">" );
     278           0 :                     for ( size_t k = 0; k < pElement->GetChildList()->size(); k++ )
     279           0 :                         Print( (*pElement->GetChildList())[ k ], nLevel + 1 );
     280           0 :                     fprintf( stdout, "</%s>", rtl::OUStringToOString(pElement->GetName(), RTL_TEXTENCODING_UTF8).getStr());
     281             :                 }
     282             :             }
     283           0 :             break;
     284             :             case XML_NODE_TYPE_DATA: {
     285           0 :                 XMLData *pData = ( XMLData * ) pCur;
     286           0 :                 rtl::OUString sData = pData->GetData();
     287           0 :                 fprintf( stdout, "%s", rtl::OUStringToOString(sData, RTL_TEXTENCODING_UTF8).getStr());
     288             :             }
     289           0 :             break;
     290             :             case XML_NODE_TYPE_COMMENT: {
     291           0 :                 XMLComment *pComment = ( XMLComment * ) pCur;
     292           0 :                 fprintf( stdout, "<!--%s-->", rtl::OUStringToOString(pComment->GetComment(), RTL_TEXTENCODING_UTF8).getStr());
     293             :             }
     294           0 :             break;
     295             :             case XML_NODE_TYPE_DEFAULT: {
     296           0 :                 XMLDefault *pDefault = ( XMLDefault * ) pCur;
     297           0 :                 fprintf( stdout, "%s", rtl::OUStringToOString(pDefault->GetDefault(), RTL_TEXTENCODING_UTF8).getStr());
     298             :             }
     299           0 :             break;
     300             :         }
     301             :     }
     302           0 : }
     303           0 : XMLFile::~XMLFile()
     304             : {
     305           0 :     if( XMLStrings != NULL ){
     306           0 :         XMLHashMap::iterator pos = XMLStrings->begin();
     307           0 :         for( ; pos != XMLStrings->end() ; ++pos ){
     308           0 :             delete pos->second;             // Check and delete content also ?
     309             :         }
     310           0 :         delete XMLStrings;
     311           0 :         XMLStrings = NULL;
     312             :     }
     313           0 : }
     314             : /*****************************************************************************/
     315           0 : XMLFile::XMLFile( const rtl::OUString &rFileName ) // the file name, empty if created from memory stream
     316             : /*****************************************************************************/
     317             :                 : XMLParentNode( NULL ),
     318             :                   sFileName    ( rFileName ),
     319             :                   ID           ( "id" ),
     320             :                   OLDREF       ( "oldref" ),
     321             :                   XML_LANG     ( "xml-lang" ),
     322           0 :                   XMLStrings   ( NULL )
     323             : 
     324             : {
     325           0 :     nodes_localize.insert( TagMap::value_type(rtl::OString(RTL_CONSTASCII_STRINGPARAM("bookmark")) , sal_True) );
     326           0 :     nodes_localize.insert( TagMap::value_type(rtl::OString(RTL_CONSTASCII_STRINGPARAM("variable")) , sal_True) );
     327           0 :     nodes_localize.insert( TagMap::value_type(rtl::OString(RTL_CONSTASCII_STRINGPARAM("paragraph")) , sal_True) );
     328           0 :     nodes_localize.insert( TagMap::value_type(rtl::OString(RTL_CONSTASCII_STRINGPARAM("alt")) , sal_True) );
     329           0 :     nodes_localize.insert( TagMap::value_type(rtl::OString(RTL_CONSTASCII_STRINGPARAM("caption")) , sal_True) );
     330           0 :     nodes_localize.insert( TagMap::value_type(rtl::OString(RTL_CONSTASCII_STRINGPARAM("title")) , sal_True) );
     331           0 :     nodes_localize.insert( TagMap::value_type(rtl::OString(RTL_CONSTASCII_STRINGPARAM("link")) , sal_True) );
     332           0 : }
     333             : /*****************************************************************************/
     334           0 : void XMLFile::Extract( XMLFile *pCur )
     335             : /*****************************************************************************/
     336             : {
     337           0 :     if( XMLStrings != NULL ) delete XMLStrings; // Elements ?
     338             : 
     339           0 :     XMLStrings = new XMLHashMap();
     340           0 :        if ( !pCur )
     341           0 :         SearchL10NElements( this );
     342             :     else {
     343           0 :         if( pCur->GetNodeType()==XML_NODE_TYPE_FILE) {
     344           0 :             SearchL10NElements(pCur);
     345             :         }
     346             :     }
     347           0 : }
     348             : 
     349             : /*****************************************************************************/
     350           0 : void XMLFile::InsertL10NElement( XMLElement* pElement ){
     351             : /*****************************************************************************/
     352           0 :     rtl::OString tmpStr,id,oldref,language("");
     353             :     LangHashMap* elem;
     354             : 
     355           0 :     if( pElement->GetAttributeList() != NULL ){
     356           0 :         for ( size_t j = 0; j < pElement->GetAttributeList()->size(); j++ )
     357             :         {
     358           0 :             tmpStr=rtl::OUStringToOString((*pElement->GetAttributeList())[ j ]->GetName(), RTL_TEXTENCODING_UTF8);
     359           0 :             if (tmpStr == ID) { // Get the "id" Attribute
     360           0 :                 id = rtl::OUStringToOString((*pElement->GetAttributeList())[ j ]->GetValue(),RTL_TEXTENCODING_UTF8);
     361             :             }
     362           0 :             if (tmpStr == XML_LANG) { // Get the "xml-lang" Attribute
     363           0 :                 language = rtl::OUStringToOString((*pElement->GetAttributeList())[j]->GetValue(),RTL_TEXTENCODING_UTF8);
     364             :             }
     365             : 
     366             :         }
     367             :     }else{
     368           0 :         fprintf(stdout,"XMLFile::InsertL10NElement: No AttributeList found");
     369           0 :         fprintf(stdout,"++++++++++++++++++++++++++++++++++++++++++++++++++");
     370           0 :         Print( pElement , 0 );
     371           0 :         fprintf(stdout,"++++++++++++++++++++++++++++++++++++++++++++++++++");
     372             :     }
     373             : 
     374           0 :     XMLHashMap::iterator pos = XMLStrings->find( id );
     375           0 :     if( pos == XMLStrings->end() ){             // No instanze , create new one
     376           0 :         elem = new LangHashMap();
     377           0 :         (*elem)[ language ]=pElement;
     378           0 :         XMLStrings->insert( XMLHashMap::value_type( id , elem ) );
     379           0 :         order.push_back( id );
     380             :     }else{                                  // Already there
     381           0 :         elem=pos->second;
     382           0 :         if ( (*elem)[ language ] )
     383             :         {
     384           0 :             fprintf(stdout,"Error: Duplicated entry. ID = %s  LANG = %s in File %s\n", id.getStr(), language.getStr(), rtl::OUStringToOString(sFileName, RTL_TEXTENCODING_ASCII_US).getStr() );
     385           0 :             exit( -1 );
     386             :         }
     387           0 :         (*elem)[ language ]=pElement;
     388           0 :     }
     389           0 : }
     390             : 
     391           0 : XMLFile::XMLFile( const XMLFile& obj )
     392             : /*****************************************************************************/
     393             :                 : XMLParentNode( obj ),
     394             :                   sFileName    ( obj.sFileName ),
     395             :                   ID           ( "id" ),
     396             :                   OLDREF       ( "oldref" ),
     397             :                   XML_LANG     ( "xml-lang" ),
     398           0 :                   XMLStrings   ( NULL )
     399             : {
     400           0 :     if( this!=&obj )
     401             :     {
     402           0 :         nodes_localize  =obj.nodes_localize;
     403           0 :         order           =obj.order;
     404             : 
     405             :     }
     406           0 : }
     407             : /*****************************************************************************/
     408           0 : XMLFile& XMLFile::operator=(const XMLFile& obj){
     409             : /*****************************************************************************/
     410           0 :     if( this!=&obj ){
     411             : 
     412           0 :         XMLParentNode::operator=(obj);
     413             : 
     414           0 :         nodes_localize  =obj.nodes_localize;
     415           0 :         order           =obj.order;
     416             : 
     417           0 :         if( XMLStrings )    delete XMLStrings;
     418             : 
     419           0 :         if( obj.XMLStrings )
     420             :         {
     421           0 :             XMLStrings = new XMLHashMap();
     422           0 :             for( XMLHashMap::iterator pos = obj.XMLStrings->begin() ; pos != obj.XMLStrings->end() ; ++pos )
     423             :             {
     424           0 :                 LangHashMap* elem=pos->second;
     425           0 :                 LangHashMap* newelem = new LangHashMap();
     426           0 :                 for(LangHashMap::iterator pos2=elem->begin(); pos2!=elem->end();++pos2){
     427           0 :                     (*newelem)[ pos2->first ] = new XMLElement( *pos2->second );
     428             :                 }
     429           0 :                 (*XMLStrings)[ pos->first ] = newelem;
     430             :             }
     431             :         }
     432             :     }
     433           0 :     return *this;
     434             : }
     435             : 
     436             : 
     437             : /*****************************************************************************/
     438           0 : void XMLFile::SearchL10NElements( XMLParentNode *pCur , int pos)
     439             : /*****************************************************************************/
     440             : {
     441           0 :     static const rtl::OString LOCALIZE("localize");
     442           0 :     static const rtl::OString THEID("id");
     443           0 :     bool bInsert    = true;
     444           0 :     if ( !pCur )
     445           0 :         SearchL10NElements( this  );
     446             :     else {
     447           0 :         switch( pCur->GetNodeType()) {
     448             :             case XML_NODE_TYPE_FILE: {
     449             :                 XMLParentNode* pElement;
     450           0 :                 if( GetChildList()){
     451           0 :                     for ( size_t i = 0; i < GetChildList()->size(); i++ ){
     452           0 :                         pElement = (XMLParentNode*) (*GetChildList())[ i ];
     453           0 :                         if( pElement->GetNodeType() ==  XML_NODE_TYPE_ELEMENT ) SearchL10NElements( pElement , i);
     454             :                     }
     455             :                 }
     456             :             }
     457           0 :             break;
     458             :             case XML_NODE_TYPE_ELEMENT: {
     459           0 :                 XMLElement *pElement = ( XMLElement * ) pCur;
     460           0 :                 rtl::OString sName(rtl::OUStringToOString(pElement->GetName(), RTL_TEXTENCODING_ASCII_US).toAsciiLowerCase());
     461           0 :                 rtl::OString language,tmpStrVal,oldref;
     462           0 :                 if ( pElement->GetAttributeList())
     463             :                 {
     464           0 :                     for ( size_t j = 0 , cnt = pElement->GetAttributeList()->size(); j < cnt && bInsert; ++j )
     465             :                     {
     466           0 :                         const rtl::OString tmpStr = rtl::OUStringToOString((*pElement->GetAttributeList())[j]->GetName(), RTL_TEXTENCODING_UTF8);
     467           0 :                         if (tmpStr == THEID) { // Get the "id" Attribute
     468           0 :                             tmpStrVal=rtl::OUStringToOString( (*pElement->GetAttributeList())[ j ]->GetValue(),RTL_TEXTENCODING_UTF8 );
     469             :                         }
     470           0 :                         if (tmpStr == LOCALIZE) { // Get the "localize" Attribute
     471           0 :                             bInsert=false;
     472             :                         }
     473           0 :                         if (tmpStr == XML_LANG) { // Get the "xml-lang" Attribute
     474           0 :                             language=rtl::OUStringToOString( (*pElement->GetAttributeList())[ j ]->GetValue(),RTL_TEXTENCODING_UTF8 );
     475             :                         }
     476           0 :                         if (tmpStr == OLDREF) { // Get the "oldref" Attribute
     477           0 :                             oldref=rtl::OUStringToOString( (*pElement->GetAttributeList())[ j ]->GetValue(),RTL_TEXTENCODING_UTF8 );
     478             :                         }
     479           0 :                     }
     480           0 :                     pElement->SetLanguageId ( language );
     481           0 :                     pElement->SetId(tmpStrVal);
     482           0 :                     pElement->SetOldRef     ( oldref  );
     483           0 :                     pElement->SetPos( pos );
     484             :                 }
     485             : 
     486           0 :                 if ( bInsert && ( nodes_localize.find( sName ) != nodes_localize.end() ) )
     487           0 :                     InsertL10NElement(pElement);
     488           0 :                 else if ( bInsert && pElement->GetChildList() ){
     489           0 :                     for ( size_t k = 0; k < pElement->GetChildList()->size(); k++ )
     490           0 :                         SearchL10NElements( (XMLParentNode*)(*pElement->GetChildList())[ k ], k);
     491           0 :                 }
     492             :             }
     493           0 :             break;
     494             :             case XML_NODE_TYPE_DATA: {
     495             :             }
     496           0 :             break;
     497             :             case XML_NODE_TYPE_COMMENT: {
     498             :             }
     499           0 :             break;
     500             :             case XML_NODE_TYPE_DEFAULT: {
     501             :             }
     502           0 :             break;
     503             :         }
     504             :     }
     505           0 : }
     506             : 
     507             : /*****************************************************************************/
     508           0 : bool XMLFile::CheckExportStatus( XMLParentNode *pCur )
     509             : /*****************************************************************************/
     510             : {
     511             :     static bool bStatusExport = true;
     512           0 :     const rtl::OString LOCALIZE("localize");
     513           0 :     const rtl::OString STATUS(RTL_CONSTASCII_STRINGPARAM("status"));
     514           0 :     const rtl::OString PUBLISH(RTL_CONSTASCII_STRINGPARAM("PUBLISH"));
     515           0 :     const rtl::OString DEPRECATED(RTL_CONSTASCII_STRINGPARAM("DEPRECATED"));
     516           0 :     const rtl::OString TOPIC(RTL_CONSTASCII_STRINGPARAM("topic"));
     517             : 
     518           0 :     bool bInsert    = true;
     519           0 :     if ( !pCur )
     520           0 :         CheckExportStatus( this );
     521             :     else {
     522           0 :         switch( pCur->GetNodeType()) {
     523             :             case XML_NODE_TYPE_FILE: {
     524             :                 XMLParentNode* pElement;
     525           0 :                 if( GetChildList()){
     526           0 :                     for ( size_t i = 0; i < GetChildList()->size(); i++ ){
     527           0 :                         pElement = (XMLParentNode*)(*GetChildList())[ i ];
     528           0 :                         if( pElement->GetNodeType() ==  XML_NODE_TYPE_ELEMENT ) CheckExportStatus( pElement );//, i);
     529             :                     }
     530             :                 }
     531             :             }
     532           0 :             break;
     533             :             case XML_NODE_TYPE_ELEMENT: {
     534           0 :                 XMLElement *pElement = ( XMLElement * ) pCur;
     535           0 :                 rtl::OString sName(rtl::OUStringToOString(pElement->GetName(), RTL_TEXTENCODING_ASCII_US));
     536           0 :                 if (sName.equalsIgnoreAsciiCase(TOPIC))
     537             :                 {
     538           0 :                     if ( pElement->GetAttributeList())
     539             :                     {
     540           0 :                         for (size_t j = 0 , cnt = pElement->GetAttributeList()->size(); j < cnt && bInsert; ++j)
     541             :                         {
     542           0 :                             const rtl::OString tmpStr(rtl::OUStringToOString((*pElement->GetAttributeList())[j]->GetName(),
     543           0 :                                 RTL_TEXTENCODING_UTF8));
     544           0 :                             if (tmpStr.equalsIgnoreAsciiCase(STATUS))
     545             :                             {
     546           0 :                                 rtl::OString tmpStrVal(rtl::OUStringToOString( (*pElement->GetAttributeList())[j]->GetValue(),
     547           0 :                                     RTL_TEXTENCODING_UTF8));
     548           0 :                                 if (!tmpStrVal.equalsIgnoreAsciiCase(PUBLISH) &&
     549           0 :                                     !tmpStrVal.equalsIgnoreAsciiCase(DEPRECATED))
     550             :                                 {
     551           0 :                                     bStatusExport = false;
     552           0 :                                 }
     553             :                             }
     554             : 
     555           0 :                         }
     556             :                     }
     557             :                 }
     558           0 :                 else if ( pElement->GetChildList() )
     559             :                 {
     560           0 :                     for (size_t k = 0; k < pElement->GetChildList()->size(); ++k)
     561           0 :                         CheckExportStatus( (XMLParentNode*)(*pElement->GetChildList())[k] );
     562           0 :                 }
     563             :             }
     564           0 :             break;
     565             :         }
     566             :     }
     567           0 :     return bStatusExport;
     568             : }
     569             : 
     570             : /*****************************************************************************/
     571           0 : sal_uInt16 XMLElement::GetNodeType()
     572             : /*****************************************************************************/
     573             : {
     574           0 :     return XML_NODE_TYPE_ELEMENT;
     575             : }
     576             : 
     577             : /*****************************************************************************/
     578           0 : XMLElement::XMLElement(const XMLElement& obj)
     579             : /*****************************************************************************/
     580             :     :
     581             :                 XMLParentNode   ( obj ),
     582             :                 sElementName    ( obj.sElementName ),
     583             :                 pAttributes     ( NULL ),
     584             :                 project         ( obj.project ),
     585             :                 filename        ( obj.filename ),
     586             :                 id              ( obj.id ),
     587             :                 sOldRef         ( obj.sOldRef ),
     588             :                 resourceType    ( obj.resourceType ),
     589             :                 languageId      ( obj.languageId ),
     590           0 :                 nPos            ( obj.nPos )
     591             : 
     592             : {
     593           0 :     if ( obj.pAttributes ){
     594           0 :         pAttributes = new XMLAttributeList();
     595           0 :         for ( size_t i = 0; i < obj.pAttributes->size(); i++ )
     596           0 :             AddAttribute( (*obj.pAttributes)[ i ]->GetName(), (*obj.pAttributes)[ i ]->GetValue() );
     597             :     }
     598           0 : }
     599             : 
     600             : /*****************************************************************************/
     601           0 : XMLElement& XMLElement::operator=(const XMLElement& obj){
     602             : /*****************************************************************************/
     603           0 :     if( this!=&obj ){
     604           0 :         XMLParentNode::operator=(obj);
     605           0 :         sElementName    =obj.sElementName;
     606           0 :         project         =obj.project;
     607           0 :         filename        =obj.filename;
     608           0 :         id              =obj.id;
     609           0 :         sOldRef         =obj.sOldRef;
     610           0 :         resourceType    =obj.resourceType;
     611           0 :         languageId      =obj.languageId;
     612           0 :         nPos            =obj.nPos;
     613             : 
     614           0 :         if ( pAttributes ){
     615           0 :             for ( size_t i = 0; i < pAttributes->size(); i++ )
     616           0 :                 delete (*pAttributes)[ i ];
     617           0 :             delete pAttributes;
     618             :         }
     619           0 :         if ( obj.pAttributes ){
     620           0 :             pAttributes         =new XMLAttributeList();
     621           0 :             for ( size_t i = 0; i < obj.pAttributes->size(); i++ )
     622           0 :                 AddAttribute( (*obj.pAttributes)[ i ]->GetName(), (*obj.pAttributes)[ i ]->GetValue() );
     623             :         }
     624             :     }
     625           0 :     return *this;
     626             : }
     627             : 
     628             : /*****************************************************************************/
     629           0 : void XMLElement::AddAttribute( const rtl::OUString &rAttribute, const rtl::OUString &rValue )
     630             : /*****************************************************************************/
     631             : {
     632           0 :     if ( !pAttributes )
     633           0 :         pAttributes = new XMLAttributeList();
     634           0 :     pAttributes->push_back( new XMLAttribute( rAttribute, rValue ) );
     635           0 : }
     636             : 
     637             : /*****************************************************************************/
     638           0 : void XMLElement::ChangeLanguageTag( const rtl::OUString &rValue )
     639             : {
     640           0 :     SetLanguageId(rtl::OUStringToOString(rValue, RTL_TEXTENCODING_UTF8));
     641           0 :     if ( pAttributes )
     642             :     {
     643           0 :         for (size_t i = 0; i < pAttributes->size(); ++i)
     644             :         {
     645           0 :             if ( (*pAttributes)[ i ]->GetName() == "xml-lang" )
     646           0 :                 (*pAttributes)[ i ]->setValue(rValue);
     647             :         }
     648             :     }
     649           0 :     XMLChildNode* pNode  = NULL;
     650           0 :     XMLElement*   pElem  = NULL;
     651           0 :     XMLChildNodeList* pCList = GetChildList();
     652             : 
     653           0 :     if( pCList != NULL )
     654             :     {
     655           0 :         for ( size_t i = 0; i < pCList->size(); i++ )
     656             :         {
     657           0 :             pNode = (*pCList)[ i ];
     658           0 :             if( pNode != NULL && pNode->GetNodeType() == XML_NODE_TYPE_ELEMENT )
     659             :             {
     660           0 :                 pElem = static_cast< XMLElement* >(pNode);
     661           0 :                 pElem->ChangeLanguageTag( rValue );
     662           0 :                 pElem->SetLanguageId(rtl::OUStringToOString(rValue, RTL_TEXTENCODING_UTF8));
     663           0 :                 pElem  = NULL;
     664           0 :                 pNode  = NULL;
     665             :             }
     666             :         }
     667           0 :         pCList = NULL;
     668             :     }
     669           0 : }
     670             : 
     671             : /*****************************************************************************/
     672           0 : XMLElement::~XMLElement()
     673             : /*****************************************************************************/
     674             : {
     675           0 :     if ( pAttributes ) {
     676           0 :         for ( size_t i = 0; i < pAttributes->size(); i++ )
     677           0 :             delete (*pAttributes)[ i ];
     678             : 
     679           0 :         delete pAttributes;
     680           0 :         pAttributes = NULL;
     681             :     }
     682           0 : }
     683             : 
     684             : /*****************************************************************************/
     685           0 : OUString XMLElement::ToOUString(){
     686             : /*****************************************************************************/
     687           0 :     OUStringBuffer* buffer = new OUStringBuffer();
     688           0 :     Print(this,*buffer,true);
     689           0 :     OUString result=buffer->makeStringAndClear();
     690           0 :     rtl::OUString xy(result.getStr());
     691           0 :     result=OUString(xy);
     692           0 :     delete buffer;
     693           0 :     return result;
     694             : }
     695             : /*****************************************************************************/
     696           0 : void XMLElement::Print(XMLNode *pCur, OUStringBuffer& buffer , bool rootelement ){
     697             : /*****************************************************************************/
     698           0 :     static const OUString XML_LANG ( "xml-lang" );
     699             : 
     700           0 :     if(pCur!=NULL){
     701           0 :         if(rootelement){
     702           0 :             XMLElement *pElement = ( XMLElement * ) pCur;
     703           0 :             if ( pElement->GetAttributeList()){
     704           0 :                 if ( pElement->GetChildList()){
     705           0 :                     XMLChildNode* tmp=NULL;
     706           0 :                     for ( size_t k = 0; k < pElement->GetChildList()->size(); k++ ){
     707           0 :                         tmp = (*pElement->GetChildList())[ k ];
     708           0 :                         Print( tmp, buffer , false);
     709             :                     }
     710             :                 }
     711             :             }
     712             :         }
     713             :         else{
     714             : 
     715           0 :         switch( pCur->GetNodeType()) {
     716             :             case XML_NODE_TYPE_ELEMENT: {
     717           0 :                 XMLElement *pElement = ( XMLElement * ) pCur;
     718             : 
     719           0 :                 if( !pElement->GetName().equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("comment")) ){
     720           0 :                     buffer.append( OUString("\\<") );
     721           0 :                     buffer.append( pElement->GetName() );
     722           0 :                     if ( pElement->GetAttributeList()){
     723           0 :                         for ( size_t j = 0; j < pElement->GetAttributeList()->size(); j++ ){
     724             : 
     725           0 :                             OUString aAttrName( (*pElement->GetAttributeList())[ j ]->GetName() );
     726           0 :                             if( !aAttrName.equalsIgnoreAsciiCase( XML_LANG ) ) {
     727           0 :                                 buffer.append( OUString(" ") );
     728           0 :                                 buffer.append( aAttrName );
     729           0 :                                 buffer.append( OUString("=") );
     730           0 :                                 buffer.append( OUString("\\\"") );
     731           0 :                                 buffer.append( (*pElement->GetAttributeList())[ j ]->GetValue() );
     732           0 :                                 buffer.append( OUString("\\\"") );
     733             :                             }
     734           0 :                         }
     735             :                     }
     736           0 :                     if ( !pElement->GetChildList())
     737           0 :                         buffer.append( OUString("/\\>") );
     738             :                     else {
     739           0 :                         buffer.append( OUString("\\>") );
     740           0 :                         XMLChildNode* tmp=NULL;
     741           0 :                         for ( size_t k = 0; k < pElement->GetChildList()->size(); k++ ){
     742           0 :                             tmp = (*pElement->GetChildList())[ k ];
     743           0 :                             Print( tmp, buffer , false);
     744             :                         }
     745           0 :                         buffer.append( OUString("\\</") );
     746           0 :                         buffer.append( pElement->GetName() );
     747           0 :                         buffer.append( OUString("\\>") );
     748             :                     }
     749             :                 }
     750             :             }
     751           0 :             break;
     752             :             case XML_NODE_TYPE_DATA: {
     753           0 :                 XMLData *pData = ( XMLData * ) pCur;
     754           0 :                 rtl::OUString sData = pData->GetData();
     755           0 :                 buffer.append( sData );
     756             :             }
     757           0 :             break;
     758             :             case XML_NODE_TYPE_COMMENT: {
     759           0 :                 XMLComment *pComment = ( XMLComment * ) pCur;
     760           0 :                 buffer.append( OUString("<!--") );
     761           0 :                 buffer.append( pComment->GetComment() );
     762           0 :                 buffer.append( OUString("-->") );
     763             :             }
     764           0 :             break;
     765             :             case XML_NODE_TYPE_DEFAULT: {
     766           0 :                 XMLDefault *pDefault = ( XMLDefault * ) pCur;
     767           0 :                 buffer.append( pDefault->GetDefault() );
     768             :             }
     769           0 :             break;
     770             :         }
     771             :         }
     772             :     }else {
     773           0 :         fprintf(stdout,"\n#+------Error: NULL Pointer in XMLELement::Print------+#\n");
     774           0 :         return;
     775             :     }
     776             : }
     777             : 
     778             : 
     779             : //
     780             : // class XMLData
     781             : //
     782             : /*****************************************************************************/
     783           0 : XMLData::XMLData(const XMLData& obj)
     784             : /*****************************************************************************/
     785             :     : XMLChildNode( obj ),
     786             :       sData( obj.sData ) ,
     787           0 :       isNewCreated ( obj.isNewCreated ){}
     788             : 
     789             : /*****************************************************************************/
     790           0 : XMLData& XMLData::operator=(const XMLData& obj){
     791             : /*****************************************************************************/
     792           0 :     if( this!=&obj ){
     793           0 :         XMLChildNode::operator=( obj );
     794           0 :         sData           = obj.sData;
     795           0 :         isNewCreated    = obj.isNewCreated;
     796             :     }
     797           0 :     return *this;
     798             : }
     799             : /*****************************************************************************/
     800           0 : void XMLData::AddData( const rtl::OUString &rData) {
     801             : /*****************************************************************************/
     802           0 :     sData += rData;
     803           0 : }
     804             : 
     805             : /*****************************************************************************/
     806           0 : sal_uInt16 XMLData::GetNodeType()
     807             : /*****************************************************************************/
     808             : {
     809           0 :     return XML_NODE_TYPE_DATA;
     810             : }
     811             : 
     812             : //
     813             : // class XMLComment
     814             : //
     815             : 
     816             : /*****************************************************************************/
     817           0 : sal_uInt16 XMLComment::GetNodeType()
     818             : /*****************************************************************************/
     819             : {
     820           0 :     return XML_NODE_TYPE_COMMENT;
     821             : }
     822             : /*****************************************************************************/
     823           0 : XMLComment::XMLComment(const XMLComment& obj)
     824             : /*****************************************************************************/
     825             :     : XMLChildNode( obj ),
     826           0 :       sComment( obj.sComment ){}
     827             : 
     828             : /*****************************************************************************/
     829           0 : XMLComment& XMLComment::operator=(const XMLComment& obj){
     830             : /*****************************************************************************/
     831           0 :     if( this!=&obj ){
     832           0 :         XMLChildNode::operator=( obj );
     833           0 :         sComment        = obj.sComment;
     834             :     }
     835           0 :     return *this;
     836             : }
     837             : 
     838             : //
     839             : // class XMLDefault
     840             : //
     841             : 
     842             : /*****************************************************************************/
     843           0 : sal_uInt16 XMLDefault::GetNodeType()
     844             : /*****************************************************************************/
     845             : {
     846           0 :     return XML_NODE_TYPE_DEFAULT;
     847             : }
     848             : /*****************************************************************************/
     849           0 : XMLDefault::XMLDefault(const XMLDefault& obj)
     850             : /*****************************************************************************/
     851             :     : XMLChildNode( obj ),
     852           0 :       sDefault( obj.sDefault){}
     853             : 
     854             : /*****************************************************************************/
     855           0 : XMLDefault& XMLDefault::operator=(const XMLDefault& obj){
     856             : /*****************************************************************************/
     857           0 :     if( this!=&obj ){
     858           0 :         XMLChildNode::operator=( obj );
     859           0 :         sDefault        = obj.sDefault;
     860             :     }
     861           0 :     return *this;
     862             : }
     863             : 
     864             : 
     865             : //
     866             : // class SimpleXMLParser
     867             : //
     868             : 
     869             : #define XML_CHAR_TO_OUSTRING(x) OStringToOUString(OString(x), RTL_TEXTENCODING_UTF8)
     870             : #define XML_CHAR_N_TO_OUSTRING(x,n) OStringToOUString(OString(x,n), RTL_TEXTENCODING_UTF8 )
     871             : 
     872             : 
     873             : /*****************************************************************************/
     874           0 : SimpleXMLParser::SimpleXMLParser()
     875             : /*****************************************************************************/
     876           0 :                 : pXMLFile( NULL )
     877             : {
     878           0 :     aParser = XML_ParserCreate( NULL );
     879           0 :     XML_SetUserData( aParser, this );
     880           0 :     XML_SetElementHandler( aParser, (XML_StartElementHandler) StartElementHandler, (XML_EndElementHandler) EndElementHandler );
     881           0 :     XML_SetCharacterDataHandler( aParser, (XML_CharacterDataHandler) CharacterDataHandler );
     882           0 :     XML_SetCommentHandler( aParser, (XML_CommentHandler) CommentHandler );
     883           0 :     XML_SetDefaultHandler( aParser, (XML_DefaultHandler) DefaultHandler );
     884           0 : }
     885             : 
     886             : /*****************************************************************************/
     887           0 : SimpleXMLParser::~SimpleXMLParser()
     888             : /*****************************************************************************/
     889             : {
     890           0 :     XML_ParserFree( aParser );
     891           0 : }
     892             : 
     893             : /*****************************************************************************/
     894           0 : void SimpleXMLParser::StartElementHandler(
     895             :     void *userData, const XML_Char *name, const XML_Char **atts )
     896             : /*****************************************************************************/
     897             : {
     898           0 :     (( SimpleXMLParser * ) userData )->StartElement( name, atts );
     899           0 : }
     900             : 
     901             : 
     902             : /*****************************************************************************/
     903           0 : void SimpleXMLParser::EndElementHandler(
     904             :     void *userData, const XML_Char *name )
     905             : /*****************************************************************************/
     906             : {
     907           0 :     (( SimpleXMLParser * ) userData )->EndElement( name );
     908           0 : }
     909             : 
     910             : /*****************************************************************************/
     911           0 : void SimpleXMLParser::CharacterDataHandler(
     912             :     void *userData, const XML_Char *s, int len )
     913             : /*****************************************************************************/
     914             : {
     915           0 :     (( SimpleXMLParser * ) userData )->CharacterData( s, len );
     916           0 : }
     917             : 
     918             : /*****************************************************************************/
     919           0 : void SimpleXMLParser::CommentHandler(
     920             :     void *userData, const XML_Char *data )
     921             : /*****************************************************************************/
     922             : {
     923           0 :     (( SimpleXMLParser * ) userData )->Comment( data );
     924           0 : }
     925             : 
     926             : /*****************************************************************************/
     927           0 : void SimpleXMLParser::DefaultHandler(
     928             :     void *userData, const XML_Char *s, int len )
     929             : /*****************************************************************************/
     930             : {
     931           0 :     (( SimpleXMLParser * ) userData )->Default( s, len );
     932           0 : }
     933             : 
     934             : /*****************************************************************************/
     935           0 : void SimpleXMLParser::StartElement(
     936             :     const XML_Char *name, const XML_Char **atts )
     937             : /*****************************************************************************/
     938             : {
     939           0 :     rtl::OUString sElementName = rtl::OUString( XML_CHAR_TO_OUSTRING( name ));
     940           0 :     XMLElement *pElement = new XMLElement( sElementName, ( XMLParentNode * ) pCurNode );
     941           0 :     pCurNode = pElement;
     942           0 :     pCurData = NULL;
     943             : 
     944           0 :     int i = 0;
     945           0 :     while( atts[i] ) {
     946             :         pElement->AddAttribute(
     947             :             rtl::OUString( XML_CHAR_TO_OUSTRING( atts[ i ] )),
     948           0 :             rtl::OUString( XML_CHAR_TO_OUSTRING( atts[ i + 1 ] )));
     949           0 :         i += 2;
     950           0 :     }
     951           0 : }
     952             : 
     953             : /*****************************************************************************/
     954           0 : void SimpleXMLParser::EndElement( const XML_Char *name )
     955             : /*****************************************************************************/
     956             : {
     957             :     // This variable is not used at all, but the the sax C interface can't be changed
     958             :     // To prevent warnings this dummy assignment is used
     959             :     // +++
     960             :     (void) name;
     961             : 
     962           0 :     pCurNode = pCurNode->GetParent();
     963           0 :     pCurData = NULL;
     964           0 : }
     965             : 
     966             : /*****************************************************************************/
     967           0 : void SimpleXMLParser::CharacterData(
     968             :     const XML_Char *s, int len )
     969             : /*****************************************************************************/
     970             : {
     971           0 :     if ( !pCurData ){
     972           0 :         rtl::OUString x = XML_CHAR_N_TO_OUSTRING( s, len );
     973           0 :         XMLUtil::UnQuotHTML(x);
     974           0 :         pCurData = new XMLData( x , pCurNode );
     975             :     }else{
     976           0 :         rtl::OUString x = XML_CHAR_N_TO_OUSTRING( s, len );
     977           0 :         XMLUtil::UnQuotHTML(x);
     978           0 :         pCurData->AddData( x );
     979             : 
     980             :     }
     981           0 : }
     982             : 
     983             : /*****************************************************************************/
     984           0 : void SimpleXMLParser::Comment(
     985             :     const XML_Char *data )
     986             : /*****************************************************************************/
     987             : {
     988           0 :     pCurData = NULL;
     989           0 :     new XMLComment( rtl::OUString( XML_CHAR_TO_OUSTRING( data )), pCurNode );
     990           0 : }
     991             : 
     992             : /*****************************************************************************/
     993           0 : void SimpleXMLParser::Default(
     994             :     const XML_Char *s, int len )
     995             : /*****************************************************************************/
     996             : {
     997           0 :     pCurData = NULL;
     998             :     new XMLDefault(
     999           0 :         rtl::OUString( XML_CHAR_N_TO_OUSTRING( s, len )), pCurNode );
    1000           0 : }
    1001             : 
    1002             : /*****************************************************************************/
    1003           0 : XMLFile *SimpleXMLParser::Execute( const rtl::OUString &rFileName, XMLFile* pXMLFileIn )
    1004             : /*****************************************************************************/
    1005             : {
    1006           0 :     aErrorInformation.eCode = XML_ERROR_NONE;
    1007           0 :     aErrorInformation.nLine = 0;
    1008           0 :     aErrorInformation.nColumn = 0;
    1009           0 :     aErrorInformation.sMessage = rtl::OUString( "ERROR: Unable to open file ");
    1010           0 :     aErrorInformation.sMessage += rFileName;
    1011             : 
    1012           0 :     rtl::OUString aFileURL(common::pathnameToAbsoluteUrl(rFileName));
    1013             : 
    1014             :     oslFileHandle h;
    1015           0 :     if (osl_openFile(aFileURL.pData, &h, osl_File_OpenFlag_Read)
    1016             :         != osl_File_E_None)
    1017             :     {
    1018           0 :         return 0;
    1019             :     }
    1020             : 
    1021             :     sal_uInt64 s;
    1022           0 :     oslFileError e = osl_getFileSize(h, &s);
    1023           0 :     void * p = NULL;
    1024           0 :     if (e == osl_File_E_None) {
    1025           0 :         e = osl_mapFile(h, &p, s, 0, 0);
    1026             :     }
    1027           0 :     if (e != osl_File_E_None) {
    1028           0 :         osl_closeFile(h);
    1029           0 :         return 0;
    1030             :     }
    1031             : 
    1032           0 :     pXMLFile = pXMLFileIn;
    1033           0 :     pXMLFile->SetName( rFileName );
    1034             : 
    1035           0 :     pCurNode = pXMLFile;
    1036           0 :     pCurData = NULL;
    1037             : 
    1038           0 :     aErrorInformation.eCode = XML_ERROR_NONE;
    1039           0 :     aErrorInformation.nLine = 0;
    1040           0 :     aErrorInformation.nColumn = 0;
    1041           0 :     if ( !pXMLFile->GetName().isEmpty()) {
    1042           0 :         aErrorInformation.sMessage = rtl::OUString( "File ");
    1043           0 :         aErrorInformation.sMessage += pXMLFile->GetName();
    1044           0 :         aErrorInformation.sMessage += rtl::OUString( " parsed successfully");
    1045             :     }
    1046             :     else
    1047           0 :         aErrorInformation.sMessage = rtl::OUString( "XML-File parsed successfully");
    1048             : 
    1049           0 :     if (!XML_Parse(aParser, reinterpret_cast< char * >(p), s, true))
    1050             :     {
    1051           0 :         aErrorInformation.eCode = XML_GetErrorCode( aParser );
    1052           0 :         aErrorInformation.nLine = XML_GetErrorLineNumber( aParser );
    1053           0 :         aErrorInformation.nColumn = XML_GetErrorColumnNumber( aParser );
    1054             : 
    1055           0 :         aErrorInformation.sMessage = rtl::OUString( "ERROR: ");
    1056           0 :         if ( !pXMLFile->GetName().isEmpty())
    1057           0 :             aErrorInformation.sMessage += pXMLFile->GetName();
    1058             :         else
    1059           0 :             aErrorInformation.sMessage += rtl::OUString( "XML-File (");
    1060             :         aErrorInformation.sMessage += rtl::OUString::valueOf(
    1061           0 :             sal::static_int_cast< sal_Int64 >(aErrorInformation.nLine));
    1062           0 :         aErrorInformation.sMessage += rtl::OUString( ",");
    1063             :         aErrorInformation.sMessage += rtl::OUString::valueOf(
    1064           0 :             sal::static_int_cast< sal_Int64 >(aErrorInformation.nColumn));
    1065           0 :         aErrorInformation.sMessage += rtl::OUString( "): ");
    1066             : 
    1067           0 :         switch (aErrorInformation.eCode) {
    1068             :         case XML_ERROR_NO_MEMORY:
    1069           0 :             aErrorInformation.sMessage += rtl::OUString( "No memory");
    1070           0 :             break;
    1071             :         case XML_ERROR_SYNTAX:
    1072           0 :             aErrorInformation.sMessage += rtl::OUString( "Syntax");
    1073           0 :             break;
    1074             :         case XML_ERROR_NO_ELEMENTS:
    1075           0 :             aErrorInformation.sMessage += rtl::OUString( "No elements");
    1076           0 :             break;
    1077             :         case XML_ERROR_INVALID_TOKEN:
    1078           0 :             aErrorInformation.sMessage += rtl::OUString( "Invalid token");
    1079           0 :             break;
    1080             :         case XML_ERROR_UNCLOSED_TOKEN:
    1081           0 :             aErrorInformation.sMessage += rtl::OUString( "Unclosed token");
    1082           0 :             break;
    1083             :         case XML_ERROR_PARTIAL_CHAR:
    1084           0 :             aErrorInformation.sMessage += rtl::OUString( "Partial char");
    1085           0 :             break;
    1086             :         case XML_ERROR_TAG_MISMATCH:
    1087           0 :             aErrorInformation.sMessage += rtl::OUString( "Tag mismatch");
    1088           0 :             break;
    1089             :         case XML_ERROR_DUPLICATE_ATTRIBUTE:
    1090           0 :             aErrorInformation.sMessage += rtl::OUString( "Dublicat attribute");
    1091           0 :             break;
    1092             :         case XML_ERROR_JUNK_AFTER_DOC_ELEMENT:
    1093           0 :             aErrorInformation.sMessage += rtl::OUString( "Junk after doc element");
    1094           0 :             break;
    1095             :         case XML_ERROR_PARAM_ENTITY_REF:
    1096           0 :             aErrorInformation.sMessage += rtl::OUString( "Param entity ref");
    1097           0 :             break;
    1098             :         case XML_ERROR_UNDEFINED_ENTITY:
    1099           0 :             aErrorInformation.sMessage += rtl::OUString( "Undefined entity");
    1100           0 :             break;
    1101             :         case XML_ERROR_RECURSIVE_ENTITY_REF:
    1102           0 :             aErrorInformation.sMessage += rtl::OUString( "Recursive entity ref");
    1103           0 :             break;
    1104             :         case XML_ERROR_ASYNC_ENTITY:
    1105           0 :             aErrorInformation.sMessage += rtl::OUString( "Async_entity");
    1106           0 :             break;
    1107             :         case XML_ERROR_BAD_CHAR_REF:
    1108           0 :             aErrorInformation.sMessage += rtl::OUString( "Bad char ref");
    1109           0 :             break;
    1110             :         case XML_ERROR_BINARY_ENTITY_REF:
    1111           0 :             aErrorInformation.sMessage += rtl::OUString( "Binary entity");
    1112           0 :             break;
    1113             :         case XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF:
    1114           0 :             aErrorInformation.sMessage += rtl::OUString( "Attribute external entity ref");
    1115           0 :             break;
    1116             :         case XML_ERROR_MISPLACED_XML_PI:
    1117           0 :             aErrorInformation.sMessage += rtl::OUString( "Misplaced xml pi");
    1118           0 :             break;
    1119             :         case XML_ERROR_UNKNOWN_ENCODING:
    1120           0 :             aErrorInformation.sMessage += rtl::OUString( "Unknown encoding");
    1121           0 :             break;
    1122             :         case XML_ERROR_INCORRECT_ENCODING:
    1123           0 :             aErrorInformation.sMessage += rtl::OUString( "Incorrect encoding");
    1124           0 :             break;
    1125             :         case XML_ERROR_UNCLOSED_CDATA_SECTION:
    1126           0 :             aErrorInformation.sMessage += rtl::OUString( "Unclosed cdata section");
    1127           0 :             break;
    1128             :         case XML_ERROR_EXTERNAL_ENTITY_HANDLING:
    1129           0 :             aErrorInformation.sMessage += rtl::OUString( "External entity handling");
    1130           0 :             break;
    1131             :         case XML_ERROR_NOT_STANDALONE:
    1132           0 :             aErrorInformation.sMessage += rtl::OUString( "Not standalone");
    1133           0 :             break;
    1134             :         case XML_ERROR_NONE:
    1135           0 :             break;
    1136             :         default:
    1137           0 :             break;
    1138             :         }
    1139           0 :         delete pXMLFile;
    1140           0 :         pXMLFile = NULL;
    1141             :     }
    1142             : 
    1143           0 :     osl_unmapMappedFile(h, p, s);
    1144           0 :     osl_closeFile(h);
    1145             : 
    1146           0 :     return pXMLFile;
    1147             : }
    1148             : 
    1149             : /*****************************************************************************/
    1150           0 : void XMLUtil::QuotHTML( rtl::OUString &rString )
    1151             : /*****************************************************************************/
    1152             : {
    1153           0 :     OUStringBuffer sReturn;
    1154           0 :     for (sal_Int32 i = 0; i < rString.getLength(); ++i) {
    1155           0 :         switch (rString[i]) {
    1156             :         case '\\':
    1157           0 :             if (i < rString.getLength()) {
    1158           0 :                 switch (rString[i + 1]) {
    1159             :                 case '"':
    1160             :                 case '<':
    1161             :                 case '>':
    1162             :                 case '\\':
    1163           0 :                     ++i;
    1164           0 :                     break;
    1165             :                 }
    1166             :             }
    1167             :             // fall through
    1168             :         default:
    1169           0 :             sReturn.append(rString[i]);
    1170           0 :             break;
    1171             : 
    1172             :         case '<':
    1173           0 :             sReturn.appendAscii(RTL_CONSTASCII_STRINGPARAM("&lt;"));
    1174           0 :             break;
    1175             : 
    1176             :         case '>':
    1177           0 :             sReturn.appendAscii(RTL_CONSTASCII_STRINGPARAM("&gt;"));
    1178           0 :             break;
    1179             : 
    1180             :         case '"':
    1181           0 :             sReturn.appendAscii(RTL_CONSTASCII_STRINGPARAM("&quot;"));
    1182           0 :             break;
    1183             : 
    1184             :         case '&':
    1185           0 :             if (rString.matchAsciiL(RTL_CONSTASCII_STRINGPARAM("&amp;"), i))
    1186           0 :                 sReturn.append('&');
    1187             :             else
    1188           0 :                 sReturn.appendAscii(RTL_CONSTASCII_STRINGPARAM("&amp;"));
    1189           0 :             break;
    1190             :         }
    1191             :     }
    1192           0 :     rString = sReturn.makeStringAndClear();
    1193           0 : }
    1194             : 
    1195           0 : void XMLUtil::UnQuotHTML( rtl::OUString &rString ){
    1196           0 :     rtl::OStringBuffer sReturn;
    1197           0 :     rtl::OString sString(rtl::OUStringToOString(rString, RTL_TEXTENCODING_UTF8));
    1198           0 :     for (sal_Int32 i = 0; i != sString.getLength();) {
    1199           0 :         if (sString[i] == '\\') {
    1200           0 :             sReturn.append(RTL_CONSTASCII_STRINGPARAM("\\\\"));
    1201           0 :             ++i;
    1202           0 :         } else if (sString.match("&amp;", i)) {
    1203           0 :             sReturn.append('&');
    1204           0 :             i += RTL_CONSTASCII_LENGTH("&amp;");
    1205           0 :         } else if (sString.match("&lt;", i)) {
    1206           0 :             sReturn.append('<');
    1207           0 :             i += RTL_CONSTASCII_LENGTH("&lt;");
    1208           0 :         } else if (sString.match("&gt;", i)) {
    1209           0 :             sReturn.append('>');
    1210           0 :             i += RTL_CONSTASCII_LENGTH("&gt;");
    1211           0 :         } else if (sString.match("&quot;", i)) {
    1212           0 :             sReturn.append('"');
    1213           0 :             i += RTL_CONSTASCII_LENGTH("&quot;");
    1214           0 :         } else if (sString.match("&apos;", i)) {
    1215           0 :             sReturn.append('\'');
    1216           0 :             i += RTL_CONSTASCII_LENGTH("&apos;");
    1217             :         } else {
    1218           0 :             sReturn.append(sString[i]);
    1219           0 :             ++i;
    1220             :         }
    1221             :     }
    1222           0 :     rString = rtl::OStringToOUString(sReturn.makeStringAndClear(), RTL_TEXTENCODING_UTF8);
    1223           0 : }
    1224             : 
    1225             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10