/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ #include "sal/config.h" #include "export.hxx" #include #include #include #include #include #include #include #include #include #include // // class ResData(); // /*****************************************************************************/ ResData::~ResData() /*****************************************************************************/ { if ( pStringList ) { // delete existing res. of type StringList for ( size_t i = 0; i < pStringList->size(); i++ ) { ExportListEntry* test = (*pStringList)[ i ]; if( test != NULL ) delete test; } delete pStringList; } if ( pFilterList ) { // delete existing res. of type FilterList for ( size_t i = 0; i < pFilterList->size(); i++ ) { ExportListEntry* test = (*pFilterList)[ i ]; delete test; } delete pFilterList; } if ( pItemList ) { // delete existing res. of type ItemList for ( size_t i = 0; i < pItemList->size(); i++ ) { ExportListEntry* test = (*pItemList)[ i ]; delete test; } delete pItemList; } if ( pUIEntries ) { // delete existing res. of type UIEntries for ( size_t i = 0; i < pUIEntries->size(); i++ ) { ExportListEntry* test = (*pUIEntries)[ i ]; delete test; } delete pUIEntries; } } // // class Export // /*****************************************************************************/ rtl::OString Export::sLanguages; rtl::OString Export::sForcedLanguages; /*****************************************************************************/ void Export::DumpExportList(const rtl::OString& rListName, ExportList& aList) { printf( "%s\n", rListName.getStr() ); rtl::OString l; ExportListEntry* aEntry; for( unsigned int x = 0; x < aList.size() ; ++x ) { aEntry = (ExportListEntry*) aList[ x ]; Export::DumpMap( l , *aEntry ); } printf("\n"); } void Export::DumpMap(const rtl::OString& rMapName, OStringHashMap& aMap) { if( rMapName.getLength() ) printf("MapName %s\n", rMapName.getStr()); if( aMap.size() < 1 ) return; for(OStringHashMap::const_iterator idbg = aMap.begin(); idbg != aMap.end(); ++idbg) { rtl::OString a( idbg->first ); rtl::OString b( idbg->second ); printf("[%s]= %s",a.getStr(),b.getStr()); printf("\n"); } printf("\n"); return; } /*****************************************************************************/ void Export::SetLanguages( std::vector val ){ /*****************************************************************************/ aLanguages = val; isInitialized = true; } /*****************************************************************************/ std::vector Export::GetLanguages(){ /*****************************************************************************/ return aLanguages; } /*****************************************************************************/ std::vector Export::GetForcedLanguages(){ /*****************************************************************************/ return aForcedLanguages; } std::vector Export::aLanguages = std::vector(); std::vector Export::aForcedLanguages = std::vector(); /*****************************************************************************/ rtl::OString Export::QuoteHTML( rtl::OString const &rString ) /*****************************************************************************/ { rtl::OStringBuffer sReturn; for ( sal_Int32 i = 0; i < rString.getLength(); i++ ) { rtl::OString sTemp = rString.copy( i ); if ( sTemp.match( "': sReturn.append(">"); break; case '\"': sReturn.append("""); break; case '\'': sReturn.append("'"); break; case '&': if ((( i + 4 ) < rString.getLength()) && ( rString.copy( i, 5 ) == "&" )) sReturn.append(rString[i]); else sReturn.append("&"); break; default: sReturn.append(rString[i]); break; } } } return sReturn.makeStringAndClear(); } void Export::RemoveUTF8ByteOrderMarker( rtl::OString &rString ) { if( hasUTF8ByteOrderMarker( rString ) ) rString = rString.copy(3); } bool Export::hasUTF8ByteOrderMarker( const rtl::OString &rString ) { return rString.getLength() >= 3 && rString[0] == '\xEF' && rString[1] == '\xBB' && rString[2] == '\xBF' ; } /*****************************************************************************/ rtl::OString Export::UnquoteHTML( rtl::OString const &rString ) /*****************************************************************************/ { rtl::OStringBuffer sReturn; for (sal_Int32 i = 0; i != rString.getLength();) { if (rString.match("&", i)) { sReturn.append('&'); i += RTL_CONSTASCII_LENGTH("&"); } else if (rString.match("<", i)) { sReturn.append('<'); i += RTL_CONSTASCII_LENGTH("<"); } else if (rString.match(">", i)) { sReturn.append('>'); i += RTL_CONSTASCII_LENGTH(">"); } else if (rString.match(""", i)) { sReturn.append('"'); i += RTL_CONSTASCII_LENGTH("""); } else if (rString.match("'", i)) { sReturn.append('\''); i += RTL_CONSTASCII_LENGTH("'"); } else { sReturn.append(rString[i]); ++i; } } return sReturn.makeStringAndClear(); } bool Export::isSourceLanguage(const rtl::OString &rLanguage) { return !isAllowed(rLanguage); } bool Export::isAllowed(const rtl::OString &rLanguage) { return !rLanguage.equalsIgnoreAsciiCaseL(RTL_CONSTASCII_STRINGPARAM("en-US")); } bool Export::isInitialized = false; /*****************************************************************************/ void Export::InitLanguages( bool bMergeMode ){ /*****************************************************************************/ if( !isInitialized ) { rtl::OString sTmp; OStringBoolHashMap aEnvLangs; sal_Int32 nIndex = 0; do { rtl::OString aToken = sLanguages.getToken(0, ',', nIndex); sTmp = aToken.getToken(0, '=').trim(); if( bMergeMode && !isAllowed( sTmp ) ){} else if( !( (sTmp[0]=='x' || sTmp[0]=='X') && sTmp[1]=='-' ) ){ aLanguages.push_back( sTmp ); } } while ( nIndex >= 0 ); InitForcedLanguages( bMergeMode ); isInitialized = true; } } /*****************************************************************************/ void Export::InitForcedLanguages( bool bMergeMode ){ /*****************************************************************************/ rtl::OString sTmp; OStringBoolHashMap aEnvLangs; sal_Int32 nIndex = 0; do { rtl::OString aToken = sForcedLanguages.getToken(0, ',', nIndex); sTmp = aToken.getToken(0, '=').trim(); if( bMergeMode && isAllowed( sTmp ) ){} else if( !( (sTmp[0]=='x' || sTmp[0]=='X') && sTmp[1]=='-' ) ) aForcedLanguages.push_back( sTmp ); } while ( nIndex >= 0 ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */