Kaydet (Commit) 8e26b478 authored tarafından Zolnai Tamás's avatar Zolnai Tamás

Refactor l10ntools

Delete unused functions.
Make Export class more encapsulated.
Move to local that functions which are used only in one file.
Common contans method which are used by all executables.
Helper contains methods belong to xml parsing.

Change-Id: I28773a2c7eea90da7df7f32720fd38de2cb661ac
üst 239fb4cb
......@@ -43,7 +43,8 @@ $(eval $(call gb_StaticLibrary_use_externals,transex,\
))
$(eval $(call gb_StaticLibrary_add_exception_objects,transex,\
l10ntools/source/export2 \
l10ntools/source/helper \
l10ntools/source/common \
l10ntools/source/merge \
l10ntools/source/po \
))
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/// Methods used by all of executables
#ifndef INCLUDED_L10NTOOLS_SOURCE_COMMON_HXX
#define INCLUDED_L10NTOOLS_SOURCE_COMMON_HXX
#include "sal/config.h"
#include <iostream>
#include <rtl/string.hxx>
#include "po.hxx"
namespace common {
//result type of handleArguments()
struct HandledArgs
{
OString m_sInputFile;
OString m_sOutputFile;
OString m_sMergeSrc;
OString m_sLanguage;
bool m_bMergeMode;
HandledArgs()
: m_sInputFile( OString() )
, m_sOutputFile( OString() )
, m_sMergeSrc( OString() )
, m_sLanguage( OString() )
, m_bMergeMode( false )
{}
};
bool handleArguments(int argc, char * argv[], HandledArgs& o_aHandledArgs);
void writeUsage(const OString& rName, const OString& rFileType);
void writePoEntry(
const OString& rExecutable, PoOfstream& rPoStream, const OString& rSourceFile,
const OString& rResType, const OString& rGroupId, const OString& rLocalId,
const OString& rHelpText, const OString& rText, const PoEntry::TYPE eType = PoEntry::TTEXT );
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -109,6 +109,8 @@ public:
class ResData
{
public:
ResData(const rtl::OString &rPF, const rtl::OString &rGId);
ResData(const rtl::OString &rPF, const rtl::OString &rGId , const rtl::OString &rFilename);
~ResData();
sal_Bool SetId(const rtl::OString &rId, sal_uInt16 nLevel);
......@@ -153,67 +155,6 @@ public:
ExportList *pPairedList;
rtl::OString sPForm;
ResData(const rtl::OString &rPF, const rtl::OString &rGId)
:
nWidth( 0 ),
nChildIndex( 0 ),
nIdLevel( ID_LEVEL_NULL ),
bChild( sal_False ),
bChildWithText( sal_False ),
bText( sal_False ),
bHelpText( sal_False ),
bQuickHelpText( sal_False ),
bTitle( sal_False ),
bList( sal_False ),
bRestMerged( sal_False ),
sGId( rGId ),
nTextRefId( REFID_NONE ),
nHelpTextRefId( REFID_NONE ),
nQuickHelpTextRefId( REFID_NONE ),
nTitleRefId( REFID_NONE ),
sTextTyp( "Text" ),
pStringList( NULL ),
pUIEntries( NULL ),
pItemList( NULL ),
pFilterList( NULL ),
pPairedList( NULL ),
sPForm( rPF )
{
sGId = sGId.replaceAll("\r", rtl::OString());
sPForm = sPForm.replaceAll("\r", rtl::OString());
}
ResData(const rtl::OString &rPF, const rtl::OString &rGId , const rtl::OString &rFilename)
:
nWidth( 0 ),
nChildIndex( 0 ),
nIdLevel( ID_LEVEL_NULL ),
bChild( sal_False ),
bChildWithText( sal_False ),
bText( sal_False ),
bHelpText( sal_False ),
bQuickHelpText( sal_False ),
bTitle( sal_False ),
bList( sal_False ),
bRestMerged( sal_False ),
sGId( rGId ),
sFilename( rFilename ),
nTextRefId( REFID_NONE ),
nHelpTextRefId( REFID_NONE ),
nQuickHelpTextRefId( REFID_NONE ),
nTitleRefId( REFID_NONE ),
sTextTyp( "Text" ),
pStringList( NULL ),
pUIEntries( NULL ),
pItemList( NULL ),
pFilterList( NULL ),
pPairedList( NULL ),
sPForm( rPF )
{
sGId = sGId.replaceAll("\r", rtl::OString());
sPForm = sPForm.replaceAll("\r", rtl::OString());
}
};
......@@ -244,23 +185,6 @@ typedef ::std::vector< ResData* > ResStack;
class WordTransformer;
class ParserQueue;
//result type of handleArguments()
struct HandledArgs
{
OString m_sInputFile;
OString m_sOutputFile;
OString m_sMergeSrc;
OString m_sLanguage;
bool m_bMergeMode;
HandledArgs()
: m_sInputFile( OString() )
, m_sOutputFile( OString() )
, m_sMergeSrc( OString() )
, m_sLanguage( OString() )
, m_bMergeMode( false )
{}
};
class Export
{
private:
......@@ -292,40 +216,11 @@ private:
sal_Bool bReadOver;
sal_Bool bDontWriteOutput;
rtl::OString sLastTextTyp;
static bool isInitialized;
bool isInitialized;
rtl::OString sFilename;
rtl::OString sLanguages;
public:
ParserQueue* pParseQueue; // public ?
static rtl::OString sLanguages; // public ?
static bool handleArguments(int argc, char * argv[], HandledArgs& o_aHandledArgs);
static void writeUsage(const OString& rName, const OString& rFileType);
static void writePoEntry(const OString& rExecutable, PoOfstream& rPoStream, const OString& rSourceFile,
const OString& rResType, const OString& rGroupId, const OString& rLocalId,
const OString& rHelpText, const OString& rText,
const PoEntry::TYPE eType = PoEntry::TTEXT);
static void InitLanguages( bool bMergeMode = false );
static void InitForcedLanguages( bool bMergeMode = false );
static std::vector<rtl::OString> GetLanguages();
static void SetLanguages( std::vector<rtl::OString> val );
static void RemoveUTF8ByteOrderMarker( rtl::OString &rString );
static bool hasUTF8ByteOrderMarker( const rtl::OString &rString );
static rtl::OString QuoteHTML( rtl::OString const &rString );
static rtl::OString UnquoteHTML( rtl::OString const &rString );
static bool isSourceLanguage(const rtl::OString &rLanguage);
static bool isAllowed(const rtl::OString &rLanguage);
static void Languages( std::vector<rtl::OString>::const_iterator& begin , std::vector<rtl::OString>::const_iterator& end );
private:
static std::vector<rtl::OString> aLanguages;
static std::vector<rtl::OString> aForcedLanguages;
std::vector<rtl::OString> aLanguages;
sal_Bool WriteData( ResData *pResData, sal_Bool bCreateNew = sal_False );// called befor dest. cur ResData
sal_Bool WriteExportList( ResData *pResData, ExportList *pExportList,
......@@ -352,17 +247,20 @@ private:
void WriteToMerged(const rtl::OString &rText , bool bSDFContent);
void SetChildWithText();
void InitLanguages( bool bMergeMode = false );
void CutComment( rtl::OString &rText );
public:
Export(const rtl::OString &rOutput);
Export(const rtl::OString &rMergeSource, const rtl::OString &rOutput);
Export(const OString &rOutput, const OString &rLanguage);
Export(const OString &rMergeSource, const OString &rOutput, const OString &rLanguage);
~Export();
void Init();
int Execute( int nToken, const char * pToken ); // called from lexer
void SetError() { bError = sal_True; }
sal_Bool GetError() { return bError; }
ParserQueue* pParseQueue; // public!!
};
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/// Helper methods to work with xml files
#ifndef INCLUDED_L10NTOOLS_SOURCE_HELPER_HXX
#define INCLUDED_L10NTOOLS_SOURCE_HELPER_HXX
#include "sal/config.h"
#include "sal/types.h"
#include <cassert>
#include <libxml/parser.h>
#include <rtl/string.hxx>
#include <rtl/strbuf.hxx>
namespace helper {
OString QuotHTML(const rtl::OString &rString);
bool isWellFormedXML( OString const & text );
//Convert xmlChar* to OString
OString xmlStrToOString( const xmlChar* pString );
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -17,7 +17,6 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "export.hxx"
#include "xmlparse.hxx"
#include <rtl/ustring.hxx>
#include <rtl/ustrbuf.hxx>
......
......@@ -22,8 +22,8 @@
#include <iosfwd>
#include <vector>
#include "common.hxx"
#include "export.hxx"
#include "po.hxx"
typedef std::vector< rtl::OString* > LngLineList;
......
......@@ -20,7 +20,6 @@
#include "sal/config.h"
#include <fstream>
#include "po.hxx"
//
// XRMResParser
......
......@@ -47,10 +47,10 @@ extern "C" {
FILE * init(int argc, char ** argv) {
HandledArgs aArgs;
if ( !Export::handleArguments(argc, argv, aArgs) )
common::HandledArgs aArgs;
if ( !common::handleArguments(argc, argv, aArgs) )
{
Export::writeUsage("cfgex","*.xcu");
common::writeUsage("cfgex","*.xcu");
std::exit(EXIT_FAILURE);
}
global::inputPathname = aArgs.m_sInputFile;
......@@ -83,6 +83,88 @@ void workOnTokenSet(int nTyp, char * pTokenText) {
}
namespace
{
static OString lcl_QuoteHTML( const OString& rString )
{
rtl::OStringBuffer sReturn;
for ( sal_Int32 i = 0; i < rString.getLength(); i++ ) {
rtl::OString sTemp = rString.copy( i );
if ( sTemp.match( "<Arg n=" ) ) {
while ( i < rString.getLength() && rString[i] != '>' ) {
sReturn.append(rString[i]);
i++;
}
if ( rString[i] == '>' ) {
sReturn.append('>');
i++;
}
}
if ( i < rString.getLength()) {
switch ( rString[i]) {
case '<':
sReturn.append("&lt;");
break;
case '>':
sReturn.append("&gt;");
break;
case '\"':
sReturn.append("&quot;");
break;
case '\'':
sReturn.append("&apos;");
break;
case '&':
if ((( i + 4 ) < rString.getLength()) &&
( rString.copy( i, 5 ) == "&amp;" ))
sReturn.append(rString[i]);
else
sReturn.append("&amp;");
break;
default:
sReturn.append(rString[i]);
break;
}
}
}
return sReturn.makeStringAndClear();
}
static OString lcl_UnquoteHTML( const OString& rString )
{
rtl::OStringBuffer sReturn;
for (sal_Int32 i = 0; i != rString.getLength();) {
if (rString.match("&amp;", i)) {
sReturn.append('&');
i += RTL_CONSTASCII_LENGTH("&amp;");
} else if (rString.match("&lt;", i)) {
sReturn.append('<');
i += RTL_CONSTASCII_LENGTH("&lt;");
} else if (rString.match("&gt;", i)) {
sReturn.append('>');
i += RTL_CONSTASCII_LENGTH("&gt;");
} else if (rString.match("&quot;", i)) {
sReturn.append('"');
i += RTL_CONSTASCII_LENGTH("&quot;");
} else if (rString.match("&apos;", i)) {
sReturn.append('\'');
i += RTL_CONSTASCII_LENGTH("&apos;");
} else {
sReturn.append(rString[i]);
++i;
}
}
return sReturn.makeStringAndClear();
}
} // anonymous namespace
//
// class CfgStackData
//
......@@ -407,9 +489,9 @@ void CfgExport::WorkOnResourceEnd()
if ( sText.isEmpty())
sText = sFallback;
sText = Export::UnquoteHTML( sText );
sText = lcl_UnquoteHTML( sText );
Export::writePoEntry(
common::writePoEntry(
"Cfgex", pOutputStream, sPath, pStackData->sResTyp,
sGroupId, sLocalId, sXComment, sText);
}
......@@ -422,7 +504,7 @@ void CfgExport::WorkOnText(
const rtl::OString &rIsoLang
)
{
if( rIsoLang.getLength() ) rText = Export::UnquoteHTML( rText );
if( rIsoLang.getLength() ) rText = lcl_UnquoteHTML( rText );
}
......@@ -499,10 +581,10 @@ void CfgMerge::WorkOnText(rtl::OString &rText, const rtl::OString& rLangIndex)
rtl::OString sContent;
pEntrys->GetText( sContent, STRING_TYP_TEXT, rLangIndex );
if ( Export::isAllowed( rLangIndex ) &&
if ( !rLangIndex.equalsIgnoreAsciiCase("en-US") &&
( sContent != "-" ) && !sContent.isEmpty())
{
rText = Export::QuoteHTML( rText );
rText = lcl_QuoteHTML( rText );
}
}
}
......@@ -534,7 +616,7 @@ void CfgMerge::WorkOnResourceEnd()
( sContent != "-" ) && !sContent.isEmpty())
{
rtl::OString sText = Export::QuoteHTML( sContent);
rtl::OString sText = lcl_QuoteHTML( sContent);
rtl::OString sAdditionalLine( "\t" );
......
......@@ -5,90 +5,21 @@
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "sal/config.h"
#include "export.hxx"
#include <stdio.h>
#include <osl/time.h>
#include <osl/process.h>
#include <rtl/strbuf.hxx>
#include <rtl/ustring.hxx>
#include <sal/macros.h>
#include <iostream>
#include <iomanip>
#include <time.h>
#include <stdlib.h>
#include "common.hxx"
#include "po.cxx"
//flags for handleArguments()
#define STATE_NON 0x0001
#define STATE_INPUT 0x0002
#define STATE_OUTPUT 0x0003
#define STATE_MERGESRC 0x0006
#define STATE_LANGUAGES 0x0007
#define STATE_MERGESRC 0x0005
#define STATE_LANGUAGES 0x0006
//
// class ResData();
//
namespace common {
/*****************************************************************************/
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;
/*****************************************************************************/
bool Export::handleArguments(
bool handleArguments(
int argc, char * argv[], HandledArgs& o_aHandledArgs)
{
o_aHandledArgs = HandledArgs();
......@@ -156,7 +87,7 @@ bool Export::handleArguments(
}
}
void Export::writeUsage(const OString& rName, const OString& rFileType)
void writeUsage(const OString& rName, const OString& rFileType)
{
std::cout
<< " Syntax: " << rName.getStr()
......@@ -168,7 +99,7 @@ void Export::writeUsage(const OString& rName, const OString& rFileType)
<< " (de, en-US, ...) or all\n";
}
void Export::writePoEntry(
void writePoEntry(
const OString& rExecutable, PoOfstream& rPoStream, const OString& rSourceFile,
const OString& rResType, const OString& rGroupId, const OString& rLocalId,
const OString& rHelpText, const OString& rText, const PoEntry::TYPE eType )
......@@ -217,148 +148,6 @@ void Export::writePoEntry(
}
}
/*****************************************************************************/
void Export::SetLanguages( std::vector<rtl::OString> val ){
/*****************************************************************************/
aLanguages = val;
isInitialized = true;
}
/*****************************************************************************/
std::vector<rtl::OString> Export::GetLanguages(){
/*****************************************************************************/
return aLanguages;
}
std::vector<rtl::OString> Export::aLanguages = std::vector<rtl::OString>();
std::vector<rtl::OString> Export::aForcedLanguages = std::vector<rtl::OString>();
/*****************************************************************************/
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( "<Arg n=" ) ) {
while ( i < rString.getLength() && rString[i] != '>' ) {
sReturn.append(rString[i]);
i++;
}
if ( rString[i] == '>' ) {
sReturn.append('>');
i++;
}
}
if ( i < rString.getLength()) {
switch ( rString[i]) {
case '<':
sReturn.append("&lt;");
break;
case '>':
sReturn.append("&gt;");
break;
case '\"':
sReturn.append("&quot;");
break;
case '\'':
sReturn.append("&apos;");
break;
case '&':
if ((( i + 4 ) < rString.getLength()) &&
( rString.copy( i, 5 ) == "&amp;" ))
sReturn.append(rString[i]);
else
sReturn.append("&amp;");
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("&amp;", i)) {
sReturn.append('&');
i += RTL_CONSTASCII_LENGTH("&amp;");
} else if (rString.match("&lt;", i)) {
sReturn.append('<');
i += RTL_CONSTASCII_LENGTH("&lt;");
} else if (rString.match("&gt;", i)) {
sReturn.append('>');
i += RTL_CONSTASCII_LENGTH("&gt;");
} else if (rString.match("&quot;", i)) {
sReturn.append('"');
i += RTL_CONSTASCII_LENGTH("&quot;");
} else if (rString.match("&apos;", i)) {
sReturn.append('\'');
i += RTL_CONSTASCII_LENGTH("&apos;");
} 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 );
isInitialized = true;
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* Version: MPL 1.1 / GPLv3+ / LGPLv3+
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License or as specified alternatively below. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* Major Contributor(s):
* [ Copyright (C) 2012 Red Hat, Inc., Stephan Bergmann <sbergman@redhat.com>
* (initial developer) ]
*
* All Rights Reserved.
*
* For minor contributions see the git repository.
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 3 or later (the "GPLv3+"), or
* the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
* in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
* instead of those above.
*/
#ifndef INCLUDED_L10NTOOLS_SOURCE_COMMON_HXX
#define INCLUDED_L10NTOOLS_SOURCE_COMMON_HXX
#include "sal/config.h"
#include <cstdlib>
#include <iostream>
#include "osl/file.hxx"
#include "osl/process.h"
#include "osl/thread.h"
#include "rtl/string.h"
#include "rtl/string.hxx"
#include "rtl/textcvt.h"
#include "rtl/uri.hxx"
#include "rtl/ustring.h"
#include "rtl/ustring.hxx"
namespace common {
inline rtl::OUString pathnameToAbsoluteUrl(rtl::OUString const & pathname) {
rtl::OUString url;
if (osl::FileBase::getFileURLFromSystemPath(pathname, url)
!= osl::FileBase::E_None)
{
std::cerr << "Error: Cannot convert input pathname to URL\n";
std::exit(EXIT_FAILURE);
}
rtl::OUString cwd;
if (osl_getProcessWorkingDir(&cwd.pData) != osl_Process_E_None) {
std::cerr << "Error: Cannot determine cwd\n";
std::exit(EXIT_FAILURE);
}
if (osl::FileBase::getAbsoluteFileURL(cwd, url, url)
!= osl::FileBase::E_None)
{
std::cerr << "Error: Cannot convert input URL to absolute URL\n";
std::exit(EXIT_FAILURE);
}
return url;
}
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -27,7 +27,6 @@
#include <stdlib.h>
#include "common.hxx"
#include "export.hxx"
#include "helper.hxx"
#include "tokens.h"
#include <iostream>
#include <rtl/strbuf.hxx>
......@@ -45,20 +44,19 @@ OString inputPathname;
boost::scoped_ptr< Export > exporter;
}
}
extern "C" {
FILE * init(int argc, char ** argv) {
HandledArgs aArgs;
if ( !Export::handleArguments(argc, argv, aArgs) )
common::HandledArgs aArgs;
if ( !common::handleArguments(argc, argv, aArgs) )
{
Export::writeUsage("transex3","*.src/*.hrc");
common::writeUsage("transex3","*.src/*.hrc");
std::exit(EXIT_FAILURE);
}
Export::sLanguages = aArgs.m_sLanguage;
Export::InitLanguages();
global::inputPathname = aArgs.m_sInputFile;
FILE * pFile = std::fopen(global::inputPathname.getStr(), "r");
......@@ -71,9 +69,9 @@ FILE * init(int argc, char ** argv) {
if (aArgs.m_bMergeMode) {
global::exporter.reset(
new Export(aArgs.m_sMergeSrc.getStr(), aArgs.m_sOutputFile.getStr()));
new Export(aArgs.m_sMergeSrc, aArgs.m_sOutputFile, aArgs.m_sLanguage));
} else {
global::exporter.reset(new Export(aArgs.m_sOutputFile.getStr()));
global::exporter.reset(new Export(aArgs.m_sOutputFile, aArgs.m_sLanguage));
}
global::exporter->Init();
......@@ -159,7 +157,25 @@ sal_Bool ResData::SetId( const rtl::OString& rId, sal_uInt16 nLevel )
// class Export
//
Export::Export(const rtl::OString &rOutput)
namespace
{
static sal_Int32 lcl_countOccurrences(const OString& text, char c)
{
sal_Int32 n = 0;
for (sal_Int32 i = 0;; ++i) {
i = text.indexOf(c, i);
if (i == -1) {
break;
}
++n;
}
return n;
}
}
Export::Export(const OString &rOutput, const OString &rLanguage)
:
pWordTransformer( NULL ),
bDefine( sal_False ),
......@@ -173,11 +189,12 @@ Export::Export(const rtl::OString &rOutput)
bError( sal_False ),
bReadOver( sal_False ),
bDontWriteOutput( sal_False ),
sFilename( global::inputPathname )
isInitialized( false ),
sFilename( global::inputPathname ),
sLanguages( rLanguage ),
pParseQueue( new ParserQueue( *this ) )
{
pParseQueue = new ParserQueue( *this );
if( !isInitialized ) InitLanguages();
InitLanguages();
// used when export is enabled
// open output stream
......@@ -188,7 +205,9 @@ Export::Export(const rtl::OString &rOutput)
}
}
Export::Export(const rtl::OString &rMergeSource, const rtl::OString &rOutput)
Export::Export(
const OString &rMergeSource, const OString &rOutput,
const OString &rLanguage )
:
pWordTransformer( NULL ),
bDefine( sal_False ),
......@@ -203,10 +222,12 @@ Export::Export(const rtl::OString &rMergeSource, const rtl::OString &rOutput)
bError( sal_False ),
bReadOver( sal_False ),
bDontWriteOutput( sal_False ),
sFilename( global::inputPathname )
isInitialized( false ),
sFilename( global::inputPathname ),
sLanguages( rLanguage ),
pParseQueue( new ParserQueue( *this ) )
{
pParseQueue = new ParserQueue( *this );
if( !isInitialized ) InitLanguages( bMergeMode );
InitLanguages( bMergeMode );
// used when merge is enabled
// open output stream
......@@ -544,8 +565,8 @@ int Export::Execute( int nToken, const char * pToken )
nListLevel = 0;
}
if (sToken.indexOf( '{' ) != -1
&& (helper::countOccurrences(sToken, '{')
> helper::countOccurrences(sToken, '}')))
&& (lcl_countOccurrences(sToken, '{')
> lcl_countOccurrences(sToken, '}')))
{
Parse( LEVELUP, "" );
}
......@@ -642,7 +663,7 @@ int Export::Execute( int nToken, const char * pToken )
SetChildWithText();
sal_Int32 n = 0;
rtl::OString sEntry(sToken.getToken(1, '"', n));
if ( helper::countOccurrences(sToken, '"') > 2 )
if ( lcl_countOccurrences(sToken, '"') > 2 )
sEntry += "\"";
if ( sEntry == "\\\"" )
sEntry = "\"";
......@@ -686,7 +707,7 @@ int Export::Execute( int nToken, const char * pToken )
sKey.equalsL(RTL_CONSTASCII_STRINGPARAM("UINAME")))
{
SetChildWithText();
if ( Export::isSourceLanguage( sLangIndex ) )
if ( sLangIndex.equalsIgnoreAsciiCase("en-US") )
pResData->SetId( sText, ID_LEVEL_TEXT );
pResData->bText = sal_True;
......@@ -935,16 +956,16 @@ sal_Bool Export::WriteData( ResData *pResData, sal_Bool bCreateNew )
if (sXText.isEmpty())
sXText = "-";
writePoEntry(
common::writePoEntry(
"Transex3", *aOutput.mPo, global::inputPathname,
pResData->sResTyp, sGID, sLID, sXHText, sXText);
if( !sXQHText.isEmpty() )
writePoEntry(
common::writePoEntry(
"Transex3", *aOutput.mPo, global::inputPathname, pResData->sResTyp,
sGID, sLID, OString(), sXQHText, PoEntry::TQUICKHELPTEXT );
if( !sXTitle.isEmpty() )
writePoEntry(
common::writePoEntry(
"Transex3", *aOutput.mPo, global::inputPathname, pResData->sResTyp,
sGID, sLID, OString(), sXTitle, PoEntry::TTITLE );
......@@ -1051,7 +1072,7 @@ sal_Bool Export::WriteExportList(ResData *pResData, ExportList *pExportList,
if( sText == "\\\"" )
sText = "\"";
}
writePoEntry(
common::writePoEntry(
"Transex3", *aOutput.mPo, global::inputPathname,
rTyp, sGID, sLID, OString(), sText);
}
......@@ -1150,7 +1171,7 @@ void Export::InsertListEntry(const rtl::OString &rText, const rtl::OString &rLin
}else
(*pCurEntry)[ m_sListLang ] = rText;
if ( Export::isSourceLanguage( m_sListLang ) ) {
if ( m_sListLang.equalsIgnoreAsciiCase("en-US") ) {
(*pCurEntry)[ SOURCE_LANGUAGE ] = rLine;
pList->NewSourceLanguageListEntry();
......@@ -1204,7 +1225,7 @@ rtl::OString Export::GetText(const rtl::OString &rSource, int nToken)
replaceAll("\\0x7F", "-=<[0x7F]>=-");
sal_uInt16 nState = TXT_STATE_TEXT;
for (sal_Int32 i = 1; i <= helper::countOccurrences(sTmp, '"'); ++i)
for (sal_Int32 i = 1; i <= lcl_countOccurrences(sTmp, '"'); ++i)
{
rtl::OString sToken(sTmp.getToken(i, '"'));
if (!sToken.isEmpty()) {
......@@ -1501,7 +1522,10 @@ sal_Bool Export::PrepareTextToMerge(rtl::OString &rText, sal_uInt16 nTyp,
// Init Languages
if( Export::sLanguages.equalsIgnoreAsciiCase("ALL") )
SetLanguages( pMergeDataFile->GetLanguages() );
{
aLanguages = pMergeDataFile->GetLanguages();
isInitialized = true;
}
else if( !isInitialized )InitLanguages();
}
......@@ -1518,13 +1542,13 @@ sal_Bool Export::PrepareTextToMerge(rtl::OString &rText, sal_uInt16 nTyp,
rtl::OString sContent;
pEntrys->GetTransex3Text(sContent, nTyp, rLangIndex);
if (sContent.isEmpty() && (!Export::isSourceLanguage(rLangIndex)))
if (sContent.isEmpty() && !rLangIndex.equalsIgnoreAsciiCase("en-US"))
{
rText = sOrigText;
return sal_False; // no data found
}
if (Export::isSourceLanguage(rLangIndex))
if (rLangIndex.equalsIgnoreAsciiCase("en-US"))
return sal_False;
rtl::OString sPostFix( rText.copy( ++nEnd ));
......@@ -1565,7 +1589,7 @@ void Export::ResData2Output( PFormEntrys *pEntry, sal_uInt16 nType, const rtl::O
sOutput += rTextType;
if ( ! Export::isSourceLanguage( sCur ) ) {
if ( !sCur.equalsIgnoreAsciiCase("en-US") ) {
sOutput += "[ ";
sOutput += sCur;
sOutput += " ] ";
......@@ -1602,7 +1626,10 @@ void Export::MergeRest( ResData *pResData, sal_uInt16 nMode )
// Init Languages
if (Export::sLanguages.equalsIgnoreAsciiCase("ALL"))
SetLanguages( pMergeDataFile->GetLanguages() );
{
aLanguages = pMergeDataFile->GetLanguages();
isInitialized = true;
}
else if( !isInitialized )InitLanguages();
}
......@@ -1898,6 +1925,29 @@ void Export::SetChildWithText()
}
}
void Export::InitLanguages( bool bMerge ){
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( bMerge && sTmp.equalsIgnoreAsciiCase("en-US") ){}
else if( !( (sTmp[0]=='x' || sTmp[0]=='X') && sTmp[1]=='-' ) ){
aLanguages.push_back( sTmp );
}
}
while ( nIndex >= 0 );
isInitialized = true;
}
}
void ParserQueue::Push( const QueueEntry& aEntry )
{
sal_Int32 nLen = aEntry.sLine.getLength();
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* Version: MPL 1.1 / GPLv3+ / LGPLv3+
* This file is part of the LibreOffice project.
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License or as specified alternatively below. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* Major Contributor(s):
* [ Copyright (C) 2012 Red Hat, Inc., Stephan Bergmann <sbergman@redhat.com>
* (initial developer) ]
*
* All Rights Reserved.
*
* For minor contributions see the git repository.
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 3 or later (the "GPLv3+"), or
* the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
* in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
* instead of those above.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#ifndef INCLUDED_L10NTOOLS_SOURCE_HELPER_HXX
#define INCLUDED_L10NTOOLS_SOURCE_HELPER_HXX
#include "sal/config.h"
#include <algorithm>
#include <cassert>
#include <libxml/parser.h>
#include "rtl/string.hxx"
#include "rtl/ustring.hxx"
#include "rtl/strbuf.hxx"
#include "sal/types.h"
#include "helper.hxx"
namespace helper {
// cf. comphelper::string::isdigitAsciiString:
inline bool isAllAsciiDigits(rtl::OString const & text) {
for (sal_Int32 i = 0; i != text.getLength(); ++i) {
if (text[i] < '0' || text[i] > '9') {
return false;
}
}
return true;
}
// cf. comphelper::string::isupperAsciiString:
inline bool isAllAsciiUpperCase(rtl::OString const & text) {
for (sal_Int32 i = 0; i != text.getLength(); ++i) {
if (text[i] < 'A' || text[i] > 'Z') {
return false;
}
}
return true;
}
// cf. comphelper::string::islowerAsciiString:
inline bool isAllAsciiLowerCase(rtl::OString const & text) {
for (sal_Int32 i = 0; i != text.getLength(); ++i) {
if (text[i] < 'a' || text[i] > 'z') {
return false;
}
}
return true;
}
inline sal_Int32 countOccurrences(rtl::OString const & text, char c) {
sal_Int32 n = 0;
for (sal_Int32 i = 0;; ++i) {
i = text.indexOf(c, i);
if (i == -1) {
break;
}
++n;
}
return n;
}
inline sal_Int32 indexOfAnyAsciiL(
rtl::OUString const & text, char const * chars, sal_Int32 charsLen,
sal_Int32 index = 0)
{
for (; index != text.getLength(); ++index) {
sal_Unicode c = text[index];
if (c <= 0x7F
&& (rtl_str_indexOfChar_WithLength(
chars, charsLen, static_cast< char >(c))
!= -1))
{
return index;
}
}
return -1;
}
rtl::OString QuotHTML(const rtl::OString &rString)
{
rtl::OStringBuffer sReturn;
......@@ -137,17 +45,17 @@ rtl::OString QuotHTML(const rtl::OString &rString)
break;
case '&':
if (rString.matchL(RTL_CONSTASCII_STRINGPARAM("&amp;"), i))
if (rString.match("&amp;", i))
sReturn.append('&');
else
sReturn.append(RTL_CONSTASCII_STRINGPARAM("&amp;"));
sReturn.append("&amp;");
break;
}
}
return sReturn.makeStringAndClear();
}
inline bool isWellFormedXML( OString const & text )
bool isWellFormedXML( OString const & text )
{
xmlDocPtr doc;
OString content;
......@@ -165,17 +73,16 @@ inline bool isWellFormedXML( OString const & text )
return result;
}
template< typename T > inline T abbreviate(
T const & text, sal_Int32 start, sal_Int32 length)
//Convert xmlChar* to OString
OString xmlStrToOString( const xmlChar* pString )
{
start = std::max(sal_Int32(0), start);
assert(start <= text.getLength());
return text.copy(start, std::min(text.getLength() - start, length));
xmlChar* pTemp = xmlStrdup( pString );
OString sResult =
static_cast<OString>(reinterpret_cast<sal_Char*>( pTemp ));
xmlFree( pTemp );
return sResult;
}
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -30,6 +30,7 @@
#include "sal/main.h"
#include "helpmerge.hxx"
#include "common.hxx"
#ifndef TESTDRIVER
......@@ -60,8 +61,8 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
}
}
HandledArgs aArgs;
if ( !Export::handleArguments( argc, argv, aArgs) )
common::HandledArgs aArgs;
if ( !common::handleArguments( argc, argv, aArgs) )
{
WriteUsage();
return 1;
......
......@@ -40,6 +40,7 @@
#include <direct.h>
#endif
#include "export.hxx"
#include "common.hxx"
#include "helper.hxx"
#include "po.hxx"
......@@ -135,7 +136,7 @@ bool HelpParser::CreatePO(
replaceAll("\n",OString()).
replaceAll("\t",OString()).trim());
Export::writePoEntry(
common::writePoEntry(
"Helpex", aPoOutput, sHelpFile, rGsi1,
posm->first, pXMLElement->GetOldref(), OString(), data);
......
......@@ -27,10 +27,10 @@
SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
HandledArgs aArgs;
if ( !Export::handleArguments(argc, argv, aArgs) )
common::HandledArgs aArgs;
if ( !common::handleArguments(argc, argv, aArgs) )
{
Export::writeUsage("ulfex","*.ulf");
common::writeUsage("ulfex","*.ulf");
return 1;
}
......
......@@ -24,7 +24,7 @@
#include <iterator>
#include <string>
#include "common.hxx"
#include "po.hxx"
#include "lngmerge.hxx"
namespace {
......@@ -33,6 +33,15 @@ rtl::OString getBracketedContent(rtl::OString text) {
return text.getToken(1, '[').getToken(0, ']');
}
static void lcl_RemoveUTF8ByteOrderMarker( OString &rString )
{
if( rString.getLength() >= 3 && rString[0] == '\xEF' &&
rString[1] == '\xBB' && rString[2] == '\xBF' )
{
rString = rString.copy(3);
}
}
}
//
......@@ -59,7 +68,7 @@ LngParser::LngParser(const rtl::OString &rLngFile,
if( bFirstLine )
{
// Always remove UTF8 BOM from the first line
Export::RemoveUTF8ByteOrderMarker( sLine );
lcl_RemoveUTF8ByteOrderMarker( sLine );
bFirstLine = false;
}
......@@ -129,7 +138,7 @@ void LngParser::WritePO(PoOfstream &aPOStream,
if ( sAct.isEmpty() && !sCur.isEmpty() )
sAct = rText_inout[ rtl::OString("en-US") ];
Export::writePoEntry(
common::writePoEntry(
"Ulfex", aPOStream, rActFileName, "LngText",
rID, OString(), OString(), sAct);
}
......
......@@ -59,6 +59,108 @@ namespace
}
}
//
// class ResData
//
ResData::ResData(const rtl::OString &rPF, const rtl::OString &rGId)
:
nWidth( 0 ),
nChildIndex( 0 ),
nIdLevel( ID_LEVEL_NULL ),
bChild( sal_False ),
bChildWithText( sal_False ),
bText( sal_False ),
bHelpText( sal_False ),
bQuickHelpText( sal_False ),
bTitle( sal_False ),
bList( sal_False ),
bRestMerged( sal_False ),
sGId( rGId ),
nTextRefId( REFID_NONE ),
nHelpTextRefId( REFID_NONE ),
nQuickHelpTextRefId( REFID_NONE ),
nTitleRefId( REFID_NONE ),
sTextTyp( "Text" ),
pStringList( NULL ),
pUIEntries( NULL ),
pItemList( NULL ),
pFilterList( NULL ),
pPairedList( NULL ),
sPForm( rPF )
{
sGId = sGId.replaceAll("\r", rtl::OString());
sPForm = sPForm.replaceAll("\r", rtl::OString());
}
ResData::ResData(const rtl::OString &rPF, const rtl::OString &rGId , const rtl::OString &rFilename)
:
nWidth( 0 ),
nChildIndex( 0 ),
nIdLevel( ID_LEVEL_NULL ),
bChild( sal_False ),
bChildWithText( sal_False ),
bText( sal_False ),
bHelpText( sal_False ),
bQuickHelpText( sal_False ),
bTitle( sal_False ),
bList( sal_False ),
bRestMerged( sal_False ),
sGId( rGId ),
sFilename( rFilename ),
nTextRefId( REFID_NONE ),
nHelpTextRefId( REFID_NONE ),
nQuickHelpTextRefId( REFID_NONE ),
nTitleRefId( REFID_NONE ),
sTextTyp( "Text" ),
pStringList( NULL ),
pUIEntries( NULL ),
pItemList( NULL ),
pFilterList( NULL ),
pPairedList( NULL ),
sPForm( rPF )
{
sGId = sGId.replaceAll("\r", rtl::OString());
sPForm = sPForm.replaceAll("\r", rtl::OString());
}
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 PFormEntrys
//
......
......@@ -9,15 +9,15 @@
#include "sal/main.h"
#include "export.hxx"
#include "common.hxx"
#include "propmerge.hxx"
SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
{
HandledArgs aArgs;
if( !Export::handleArguments(argc, argv, aArgs) )
common::HandledArgs aArgs;
if( !common::handleArguments(argc, argv, aArgs) )
{
Export::writeUsage("propex","*.properties");
common::writeUsage("propex","*.properties");
return 1;
}
......
......@@ -144,7 +144,7 @@ void PropParser::Extract( const OString& rPOFile )
OString sID = sLine.copy( 0, nEqualSign ).trim();
OString sText = lcl_ConvertToUTF8( sLine.copy( nEqualSign + 1 ).trim() );
Export::writePoEntry(
common::writePoEntry(
"Propex", aPOStream, m_sSource, "property",
sID, OString(), OString(), sText);
}
......
......@@ -10,15 +10,15 @@
#include <iostream>
#include "sal/main.h"
#include "export.hxx"
#include "common.hxx"
#include "stringmerge.hxx"
SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
{
HandledArgs aArgs;
if( !Export::handleArguments(argc, argv, aArgs) )
common::HandledArgs aArgs;
if( !common::handleArguments(argc, argv, aArgs) )
{
Export::writeUsage("stringex","string.xml");
common::writeUsage("stringex","string.xml");
return 1;
}
......
......@@ -18,24 +18,11 @@
#include <libxml/xmlstring.h>
#include "export.hxx"
#include "helper.hxx"
#include "common.hxx"
#include "po.hxx"
#include "stringmerge.hxx"
namespace
{
//Convert xmlChar* to OString
static OString lcl_xmlStrToOString( const xmlChar* pString )
{
xmlChar* pTemp = xmlStrdup( pString );
OString sResult =
static_cast<OString>(reinterpret_cast<sal_Char*>( pTemp ));
xmlFree( pTemp );
return sResult;
}
}
//Parse strings.xml file
StringParser::StringParser(
const OString& rInputFile, const OString& rLang )
......@@ -84,10 +71,10 @@ void StringParser::Extract( const OString& rPOFile )
xmlChar* pID = xmlGetProp(pCurrent, (const xmlChar*)("name"));
xmlChar* pText = xmlNodeGetContent(pCurrent);
Export::writePoEntry(
common::writePoEntry(
"Stringex", aPOStream, m_pSource->name, "string",
lcl_xmlStrToOString( pID ), OString(), OString(),
lcl_xmlStrToOString( pText ));
helper::xmlStrToOString( pID ), OString(), OString(),
helper::xmlStrToOString( pText ));
xmlFree( pID );
xmlFree( pText );
......@@ -134,7 +121,7 @@ void StringParser::Merge(
{
xmlChar* pID = xmlGetProp(pCurrent, (const xmlChar*)("name"));
ResData aResData(
"", lcl_xmlStrToOString( pID ),
"", helper::xmlStrToOString( pID ),
static_cast<OString>(m_pSource->name) );
xmlFree( pID );
aResData.sResTyp = "string";
......
......@@ -18,22 +18,14 @@
#include <libxml/xmlstring.h>
#include "export.hxx"
#include "helper.hxx"
#include "common.hxx"
#include "po.hxx"
#include "treemerge.hxx"
namespace
{
//Convert xmlChar* to OString
static OString lcl_xmlStrToOString( const xmlChar* pString )
{
xmlChar* pTemp = xmlStrdup( pString );
OString sResult =
static_cast<OString>(reinterpret_cast<sal_Char*>( pTemp ));
xmlFree( pTemp );
return sResult;
}
//Extract strings from nodes on all level recursively
static void lcl_ExtractLevel(
const xmlDocPtr pSource, const xmlNodePtr pRoot,
......@@ -52,9 +44,9 @@ namespace
xmlChar* pText =
xmlGetProp(pCurrent, (const xmlChar*)("title"));
Export::writePoEntry(
"Treex", rPOStream, pSource->name, lcl_xmlStrToOString( pNodeName ),
lcl_xmlStrToOString( pID ), OString(), OString(), lcl_xmlStrToOString( pText ));
common::writePoEntry(
"Treex", rPOStream, pSource->name, helper::xmlStrToOString( pNodeName ),
helper::xmlStrToOString( pID ), OString(), OString(), helper::xmlStrToOString( pText ));
xmlFree( pID );
xmlFree( pText );
......@@ -73,7 +65,7 @@ namespace
xmlNodePtr pReturn = pCurrent;
xmlChar* pID = xmlGetProp(pReturn, (const xmlChar*)("id"));
const OString sID =
lcl_xmlStrToOString( pID );
helper::xmlStrToOString( pID );
xmlFree( pID );
const sal_Int32 nFirstSlash = sID.indexOf("/");
......@@ -122,7 +114,7 @@ namespace
xmlChar* sTitle =
xmlNodeListGetString(pXhpFile, pXhpNode->children, 1);
OString sNewTitle =
lcl_xmlStrToOString( sTitle ).
helper::xmlStrToOString( sTitle ).
replaceAll("$[officename]","%PRODUCTNAME").
replaceAll("$[officeversion]","%PRODUCTVERSION");
xmlNodeSetContent(
......@@ -165,10 +157,10 @@ namespace
{
xmlChar* pID = xmlGetProp(pCurrent, (const xmlChar*)("id"));
ResData aResData(
"", lcl_xmlStrToOString( pID ),
"", helper::xmlStrToOString( pID ),
static_cast<OString>(io_pSource->name) );
xmlFree( pID );
aResData.sResTyp = lcl_xmlStrToOString( pNodeName );
aResData.sResTyp = helper::xmlStrToOString( pNodeName );
PFormEntrys* pEntrys =
pMergeDataFile->GetPFormEntrys( &aResData );
if( pEntrys )
......
......@@ -11,7 +11,7 @@
#include <cstring>
#include "sal/main.h"
#include "export.hxx"
#include "common.hxx"
#include "treemerge.hxx"
void WriteUsage()
......@@ -45,8 +45,8 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
break;
}
}
HandledArgs aArgs;
if( !Export::handleArguments(argc, argv, aArgs) )
common::HandledArgs aArgs;
if( !common::handleArguments(argc, argv, aArgs) )
{
WriteUsage();
return 1;
......
......@@ -21,6 +21,7 @@
#include <stdio.h>
#include "common.hxx"
#include "helper.hxx"
#include "export.hxx"
#include "tokens.h"
#include "po.hxx"
......@@ -31,19 +32,6 @@
rtl::OString sInputFileName;
rtl::OString sOutputFile;
namespace
{
//Convert xmlChar* to OString
static OString lcl_xmlStrToOString( const xmlChar* pString )
{
xmlChar* pTemp = xmlStrdup( pString );
OString sResult =
static_cast<OString>(reinterpret_cast<sal_Char*>( pTemp ));
xmlFree( pTemp );
return sResult;
}
}
int extractTranslations()
{
PoOfstream aPOStream( sOutputFile, PoOfstream::APP);
......@@ -73,11 +61,11 @@ int extractTranslations()
for(xmlAttrPtr attribute = nodeLevel2->properties; attribute != NULL; attribute = attribute->next)
{
xmlChar *content = xmlNodeListGetString(res, attribute->children, 1);
vIDs.push_back(lcl_xmlStrToOString(content));
vIDs.push_back(helper::xmlStrToOString(content));
xmlFree(content);
}
OString sText = lcl_xmlStrToOString(xmlNodeGetContent(nodeLevel2));
Export::writePoEntry(
OString sText = helper::xmlStrToOString(xmlNodeGetContent(nodeLevel2));
common::writePoEntry(
"Uiex", aPOStream, sInputFileName, vIDs[0],
(vIDs.size()>=2) ? vIDs[1] : OString(),
(vIDs.size()>=3) ? vIDs[2] : OString(),
......@@ -99,50 +87,6 @@ int extractTranslations()
namespace
{
rtl::OString QuotHTML(const rtl::OString &rString)
{
rtl::OStringBuffer sReturn;
for (sal_Int32 i = 0; i < rString.getLength(); ++i) {
switch (rString[i]) {
case '\\':
if (i < rString.getLength()) {
switch (rString[i + 1]) {
case '"':
case '<':
case '>':
case '\\':
++i;
break;
}
}
// fall through
default:
sReturn.append(rString[i]);
break;
case '<':
sReturn.append("&lt;");
break;
case '>':
sReturn.append("&gt;");
break;
case '"':
sReturn.append("&quot;");
break;
case '&':
if (rString.matchL(RTL_CONSTASCII_STRINGPARAM("&amp;"), i))
sReturn.append('&');
else
sReturn.append(RTL_CONSTASCII_STRINGPARAM("&amp;"));
break;
}
}
return sReturn.makeStringAndClear();
}
bool lcl_MergeLang(
const MergeDataHashMap &rMap,
const rtl::OString &rLanguage,
......@@ -172,7 +116,7 @@ namespace
aDestination << " <e "
<< "g=\"" << aI->second->sGID.getStr() << "\" "
<< "i=\"" << aI->second->sLID.getStr() << "\">"
<< QuotHTML(sOut).getStr() << "</e>\n";
<< helper::QuotHTML(sOut).getStr() << "</e>\n";
}
aDestination << "</t>";
......@@ -240,10 +184,10 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
{
int nRetValue = 0;
HandledArgs aArgs;
if ( !Export::handleArguments(argc, argv, aArgs) )
common::HandledArgs aArgs;
if ( !common::handleArguments(argc, argv, aArgs) )
{
Export::writeUsage("uiex","*.ui");
common::writeUsage("uiex","*.ui");
return 1;
}
......
......@@ -16,7 +16,6 @@
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "sal/config.h"
#include <iterator> /* std::iterator*/
......@@ -24,12 +23,14 @@
#include <stdio.h>
#include <sal/alloca.h>
#include "helper.hxx"
#include "common.hxx"
#include "xmlparse.hxx"
#include <fstream>
#include <iostream>
#include <osl/mutex.hxx>
#include <osl/thread.hxx>
#include <osl/process.h>
#include <rtl/strbuf.hxx>
using namespace std;
......@@ -868,6 +869,32 @@ XMLDefault& XMLDefault::operator=(const XMLDefault& obj){
#define XML_CHAR_TO_OUSTRING(x) OStringToOUString(OString(x), RTL_TEXTENCODING_UTF8)
#define XML_CHAR_N_TO_OUSTRING(x,n) OStringToOUString(OString(x,n), RTL_TEXTENCODING_UTF8 )
namespace
{
static OUString lcl_pathnameToAbsoluteUrl(const OUString& rPathname) {
OUString sUrl;
if (osl::FileBase::getFileURLFromSystemPath(rPathname, sUrl)
!= osl::FileBase::E_None)
{
std::cerr << "Error: Cannot convert input pathname to URL\n";
std::exit(EXIT_FAILURE);
}
OUString sCwd;
if (osl_getProcessWorkingDir(&sCwd.pData) != osl_Process_E_None) {
std::cerr << "Error: Cannot determine cwd\n";
std::exit(EXIT_FAILURE);
}
if (osl::FileBase::getAbsoluteFileURL(sCwd, sUrl, sUrl)
!= osl::FileBase::E_None)
{
std::cerr << "Error: Cannot convert input URL to absolute URL\n";
std::exit(EXIT_FAILURE);
}
return sUrl;
}
}
/*****************************************************************************/
SimpleXMLParser::SimpleXMLParser()
......@@ -1008,7 +1035,7 @@ XMLFile *SimpleXMLParser::Execute( const rtl::OUString &rFileName, XMLFile* pXML
aErrorInformation.sMessage = rtl::OUString( "ERROR: Unable to open file ");
aErrorInformation.sMessage += rFileName;
rtl::OUString aFileURL(common::pathnameToAbsoluteUrl(rFileName));
rtl::OUString aFileURL(lcl_pathnameToAbsoluteUrl(rFileName));
oslFileHandle h;
if (osl_openFile(aFileURL.pData, &h, osl_File_OpenFlag_Read)
......@@ -1145,50 +1172,11 @@ XMLFile *SimpleXMLParser::Execute( const rtl::OUString &rFileName, XMLFile* pXML
return pXMLFile;
}
/*****************************************************************************/
void XMLUtil::QuotHTML( rtl::OUString &rString )
/*****************************************************************************/
{
OUStringBuffer sReturn;
for (sal_Int32 i = 0; i < rString.getLength(); ++i) {
switch (rString[i]) {
case '\\':
if (i < rString.getLength()) {
switch (rString[i + 1]) {
case '"':
case '<':
case '>':
case '\\':
++i;
break;
}
}
// fall through
default:
sReturn.append(rString[i]);
break;
case '<':
sReturn.appendAscii(RTL_CONSTASCII_STRINGPARAM("&lt;"));
break;
case '>':
sReturn.appendAscii(RTL_CONSTASCII_STRINGPARAM("&gt;"));
break;
case '"':
sReturn.appendAscii(RTL_CONSTASCII_STRINGPARAM("&quot;"));
break;
case '&':
if (rString.matchAsciiL(RTL_CONSTASCII_STRINGPARAM("&amp;"), i))
sReturn.append('&');
else
sReturn.appendAscii(RTL_CONSTASCII_STRINGPARAM("&amp;"));
break;
}
}
rString = sReturn.makeStringAndClear();
void XMLUtil::QuotHTML( OUString &rString )
{
const OString sString(OUStringToOString(rString, RTL_TEXTENCODING_UTF8));
rString = OStringToOUString(helper::QuotHTML( sString ), RTL_TEXTENCODING_UTF8);
}
void XMLUtil::UnQuotHTML( rtl::OUString &rString ){
......
......@@ -25,6 +25,7 @@
#include "common.hxx"
#include "export.hxx"
#include "po.hxx"
#include "xrmmerge.hxx"
#include "tokens.h"
#include "helper.hxx"
......@@ -59,8 +60,8 @@ extern char *GetOutputFile( int argc, char* argv[])
bDisplayName = sal_False;
bExtensionDescription = sal_False;
HandledArgs aArgs;
if ( Export::handleArguments(argc, argv, aArgs) )
common::HandledArgs aArgs;
if ( common::handleArguments(argc, argv, aArgs) )
{
// command line is valid
bMergeMode = aArgs.m_bMergeMode;
......@@ -75,7 +76,7 @@ extern char *GetOutputFile( int argc, char* argv[])
else
{
// command line is not valid
Export::writeUsage("xrmex","*.xrm/*.xml");
common::writeUsage("xrmex","*.xrm/*.xml");
return NULL;
}
}
......@@ -421,7 +422,7 @@ void XRMResExport::EndOfText(
pResData->sText[sCur].replaceAll("\x0A", rtl::OString()));
if( !sAct.isEmpty() )
Export::writePoEntry(
common::writePoEntry(
"Xrmex", pOutputStream, sPath, sResourceType,
pResData->sGId, OString(), OString(), sAct );
}
......@@ -565,7 +566,7 @@ void XRMResMerge::WorkOnText(
PFormEntrys *pEntrys = pMergeDataFile->GetPFormEntrys( pResData );
if ( pEntrys ) {
rtl::OString sContent;
if ( Export::isAllowed( sLang ) &&
if ( !sLang.equalsIgnoreAsciiCase("en-US") &&
( pEntrys->GetText(
sContent, STRING_TYP_TEXT, sLang )) &&
( sContent != "-" ) && !sContent.isEmpty() &&
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment