summaryrefslogtreecommitdiff
path: root/l10ntools
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2012-02-09 15:22:47 +0100
committerStephan Bergmann <sbergman@redhat.com>2012-02-09 15:26:03 +0100
commitf07a22ff6fb6c4bb131eacc9c3298b076361cee5 (patch)
treeca771ffd243124ca291cd38debe4e436ccbced9b /l10ntools
parentf02f97bcdf7b6789e42f04600fb30daf3e0bfd37 (diff)
gsicheck now only depends on sal
Diffstat (limited to 'l10ntools')
-rw-r--r--l10ntools/inc/tagtest.hxx38
-rw-r--r--l10ntools/source/gsicheck.cxx307
-rw-r--r--l10ntools/source/helper.hxx47
-rw-r--r--l10ntools/source/makefile.mk2
-rw-r--r--l10ntools/source/tagtest.cxx93
5 files changed, 269 insertions, 218 deletions
diff --git a/l10ntools/inc/tagtest.hxx b/l10ntools/inc/tagtest.hxx
index b77e260d3a4f..b546be2bab1e 100644
--- a/l10ntools/inc/tagtest.hxx
+++ b/l10ntools/inc/tagtest.hxx
@@ -34,9 +34,9 @@
class GSILine;
-typedef sal_uInt16 TokenId;
+typedef sal_Int32 TokenId;
-#define TOK_INVALIDPOS sal_uInt16( 0xFFFF )
+#define TOK_INVALIDPOS (-1)
class ParserMessage;
typedef ::std::vector< ParserMessage* > Impl_ParserMessageList;
@@ -64,12 +64,12 @@ public:
rtl::OUString aTokenString;
TokenId nId;
- sal_uInt16 nPos; // Position in String
+ sal_Int32 nPos; // Position in String
TokenInfo():bClosed(sal_False),bCloseTag(sal_False),bIsBroken(sal_False),bHasBeenFixed(sal_False),bDone(sal_False),nId( 0 ){;}
-explicit TokenInfo( TokenId pnId, sal_uInt16 nP ):bClosed(sal_False),bCloseTag(sal_False),bIsBroken(sal_False),bHasBeenFixed(sal_False),bDone(sal_False),nId( pnId ),nPos(nP){;}
- explicit TokenInfo( TokenId pnId, sal_uInt16 nP, rtl::OUString const & paStr ):bClosed(sal_False),bCloseTag(sal_False),bIsBroken(sal_False),bHasBeenFixed(sal_False),bDone(sal_False),aTokenString( paStr ),nId( pnId ),nPos(nP) {;}
- explicit TokenInfo( TokenId pnId, sal_uInt16 nP, rtl::OUString const & paStr, ParserMessageList &rErrorList );
+explicit TokenInfo( TokenId pnId, sal_Int32 nP ):bClosed(sal_False),bCloseTag(sal_False),bIsBroken(sal_False),bHasBeenFixed(sal_False),bDone(sal_False),nId( pnId ),nPos(nP){;}
+ explicit TokenInfo( TokenId pnId, sal_Int32 nP, rtl::OUString const & paStr ):bClosed(sal_False),bCloseTag(sal_False),bIsBroken(sal_False),bHasBeenFixed(sal_False),bDone(sal_False),aTokenString( paStr ),nId( pnId ),nPos(nP) {;}
+ explicit TokenInfo( TokenId pnId, sal_Int32 nP, rtl::OUString const & paStr, ParserMessageList &rErrorList );
rtl::OUString GetTagName() const;
@@ -107,8 +107,8 @@ private:
public:
~ParserMessageList() { clear(); }
- void AddError( sal_uInt16 nErrorNr, const rtl::OString& rErrorText, const TokenInfo &rTag );
- void AddWarning( sal_uInt16 nErrorNr, const rtl::OString& rErrorText, const TokenInfo &rTag );
+ void AddError( sal_Int32 nErrorNr, const rtl::OString& rErrorText, const TokenInfo &rTag );
+ void AddWarning( sal_Int32 nErrorNr, const rtl::OString& rErrorText, const TokenInfo &rTag );
sal_Bool HasErrors();
bool empty() const { return maList.empty(); }
@@ -242,19 +242,19 @@ public:
class ParserMessage
{
- sal_uInt16 nErrorNr;
+ sal_Int32 nErrorNr;
rtl::OString aErrorText;
- sal_uInt16 nTagBegin,nTagLength;
+ sal_Int32 nTagBegin,nTagLength;
protected:
- ParserMessage( sal_uInt16 PnErrorNr, const rtl::OString &rPaErrorText, const TokenInfo &rTag );
+ ParserMessage( sal_Int32 PnErrorNr, const rtl::OString &rPaErrorText, const TokenInfo &rTag );
public:
- sal_uInt16 GetErrorNr() { return nErrorNr; }
+ sal_Int32 GetErrorNr() { return nErrorNr; }
rtl::OString GetErrorText() { return aErrorText; }
- sal_uInt16 GetTagBegin() { return nTagBegin; }
- sal_uInt16 GetTagLength() { return nTagLength; }
+ sal_Int32 GetTagBegin() { return nTagBegin; }
+ sal_Int32 GetTagLength() { return nTagLength; }
virtual ~ParserMessage() {}
virtual sal_Bool IsError() =0;
@@ -264,7 +264,7 @@ public:
class ParserError : public ParserMessage
{
public:
- ParserError( sal_uInt16 PnErrorNr, const rtl::OString &rPaErrorText, const TokenInfo &rTag );
+ ParserError( sal_Int32 PnErrorNr, const rtl::OString &rPaErrorText, const TokenInfo &rTag );
virtual sal_Bool IsError() {return sal_True;}
virtual rtl::OString Prefix() {return rtl::OString(RTL_CONSTASCII_STRINGPARAM("Error:")); }
@@ -273,7 +273,7 @@ public:
class ParserWarning : public ParserMessage
{
public:
- ParserWarning( sal_uInt16 PnErrorNr, const rtl::OString &rPaErrorText, const TokenInfo &rTag );
+ ParserWarning( sal_Int32 PnErrorNr, const rtl::OString &rPaErrorText, const TokenInfo &rTag );
virtual sal_Bool IsError() {return sal_False;}
virtual rtl::OString Prefix() {return rtl::OString(RTL_CONSTASCII_STRINGPARAM("Warning:")); }
@@ -282,14 +282,14 @@ public:
class SimpleParser
{
private:
- sal_uInt16 nPos;
+ sal_Int32 nPos;
rtl::OUString aSource;
rtl::OUString aLastToken;
TokenList aTokenList;
TokenInfo aNextTag; // to store closetag in case of combined tags like <br/>
- rtl::OUString GetNextTokenString( ParserMessageList &rErrorList, sal_uInt16 &rTokeStartPos );
+ rtl::OUString GetNextTokenString( ParserMessageList &rErrorList, sal_Int32 &rTokeStartPos );
public:
SimpleParser();
@@ -303,7 +303,7 @@ class TokenParser
{
sal_Bool match( const TokenInfo &aCurrentToken, const TokenId &aExpectedToken );
sal_Bool match( const TokenInfo &aCurrentToken, const TokenInfo &aExpectedToken );
- void ParseError( sal_uInt16 nErrNr, const rtl::OString &rErrMsg, const TokenInfo &rTag );
+ void ParseError( sal_Int32 nErrNr, const rtl::OString &rErrMsg, const TokenInfo &rTag );
void Paragraph();
void PfCase();
void PfCaseBegin();
diff --git a/l10ntools/source/gsicheck.cxx b/l10ntools/source/gsicheck.cxx
index 9fec6bf425e0..9405a9176896 100644
--- a/l10ntools/source/gsicheck.cxx
+++ b/l10ntools/source/gsicheck.cxx
@@ -28,23 +28,46 @@
#include "sal/config.h"
+#include <algorithm>
+#include <cassert>
#include <cstddef>
#include <fstream>
#include <string>
#include <stdio.h>
-#include <tools/fsys.hxx>
#include <rtl/strbuf.hxx>
-#include <comphelper/string.hxx>
#include "helper.hxx"
#include "tagtest.hxx"
#include "gsicheck.hxx"
-using comphelper::string::getToken;
-using comphelper::string::getTokenCount;
+namespace {
-#define MAX_GID_LID_LEN 250
+sal_Int32 const MAX_GID_LID_LEN = 250;
+
+rtl::OString copyUpTo(
+ rtl::OString const & text, sal_Int32 start, sal_Int32 maximumLength)
+{
+ assert(start >= 0 && start <= text.getLength());
+ return text.copy(start, std::min(text.getLength() - start, maximumLength));
+}
+
+rtl::OString addSuffix(
+ rtl::OString const & pathname, rtl::OString const & suffix)
+{
+ sal_Int32 n = pathname.lastIndexOf('.');
+ if (n == -1) {
+ fprintf(
+ stderr,
+ ("Error: pathname \"%s\" does not contain dot to add suffix in"
+ " front of\n"),
+ pathname.getStr());
+ exit(EXIT_FAILURE);
+ }
+ return pathname.replaceAt(n, 0, suffix);
+}
+
+}
/*****************************************************************************/
void PrintMessage( rtl::OString const & aType, rtl::OString const & aMsg, rtl::OString const & aPrefix,
@@ -69,30 +92,20 @@ void PrintError( rtl::OString const & aMsg, rtl::OString const & aPrefix,
PrintMessage( "Error:", aMsg, aPrefix, aContext, bPrintContext, nLine, aUniqueId );
}
-sal_Bool LanguageOK( rtl::OString const & aLang )
+bool LanguageOK( rtl::OString const & aLang )
{
- if (aLang.isEmpty())
- return sal_False;
-
- using comphelper::string::isdigitAsciiString;
- using comphelper::string::isupperAsciiString;
- using comphelper::string::islowerAsciiString;
-
- if (isdigitAsciiString(aLang))
- return sal_True;
-
- if ( getTokenCount(aLang, '-') == 1 )
- return islowerAsciiString(aLang);
- else if ( getTokenCount(aLang, '-') == 2 )
- {
- rtl::OString aTok0( getToken(aLang, 0, '-') );
- rtl::OString aTok1( getToken(aLang, 1, '-') );
- return !aTok0.isEmpty() && islowerAsciiString(aTok0)
- && !aTok1.isEmpty() && isupperAsciiString(aTok1)
- && !aTok1.equalsIgnoreAsciiCase( aTok0 );
+ sal_Int32 n = 0;
+ rtl::OString t0(aLang.getToken(0, '-', n));
+ if (n == -1) {
+ return !t0.isEmpty()
+ && (helper::isAllAsciiDigits(t0)
+ || helper::isAllAsciiLowerCase(t0));
}
-
- return sal_False;
+ rtl::OString t1(aLang.getToken(0, '-', n));
+ return n == -1
+ && !t0.isEmpty() && helper::isAllAsciiLowerCase(t0)
+ && !t1.isEmpty() && helper::isAllAsciiUpperCase(t1)
+ && !t0.equalsIgnoreAsciiCase(t1);
}
class LazyStream: public std::ofstream
@@ -144,51 +157,67 @@ GSILine::GSILine( const rtl::OString &rLine, std::size_t nLine )
, bFixed ( sal_False )
, data_( rLine )
{
- if ( getTokenCount(rLine, '\t') == 15 )
- {
- aFormat = FORMAT_SDF;
- aUniqId = getToken(rLine, 0, '\t');
- aUniqId += "/";
- aUniqId += getToken(rLine, 1, '\t');
- aUniqId += "/";
- aUniqId += getToken(rLine, 3, '\t');
- aUniqId += "/";
- aUniqId += getToken(rLine, 4, '\t');
- aUniqId += "/";
- aUniqId += getToken(rLine, 5, '\t');
- aUniqId += "/";
- aUniqId += getToken(rLine, 6, '\t');
- aUniqId += "/";
- aUniqId += getToken(rLine, 7, '\t');
- aLineType = "";
- aLangId = getToken(rLine, 9, '\t');
- aText = getToken(rLine, 10, '\t');
- aQuickHelpText = getToken(rLine, 12, '\t');
- aTitle = getToken(rLine, 13, '\t');
-
- // do some more format checks here
- if (!comphelper::string::isdigitAsciiString(getToken(rLine, 8, '\t')))
- {
- PrintError( "The length field does not contain a number!", "Line format", getToken(rLine, 8, '\t'), sal_True, GetLineNumber(), GetUniqId() );
- NotOK();
- }
- if ( !LanguageOK( aLangId ) )
- {
- PrintError( "The Language is invalid!", "Line format", aLangId, sal_True, GetLineNumber(), GetUniqId() );
- NotOK();
- }
- // limit GID and LID to MAX_GID_LID_LEN chars each for database conformity, see #137575#
- if ( getToken(rLine, 4, '\t').getLength() > MAX_GID_LID_LEN || getToken(rLine, 5, '\t').getLength() > MAX_GID_LID_LEN )
- {
- PrintError(rtl::OStringBuffer(RTL_CONSTASCII_STRINGPARAM("GID and LID may only be "))
- .append(static_cast<sal_Int32>(MAX_GID_LID_LEN))
- .append(RTL_CONSTASCII_STRINGPARAM(" chars long each!" )).getStr(),
- "Line format", aLangId, sal_True, GetLineNumber(), GetUniqId());
- NotOK();
- }
+ if (rLine.isEmpty()) {
+ NotOK();
+ return;
}
- else
+
+ aFormat = FORMAT_SDF;
+ sal_Int32 n = 0;
+ aUniqId = rLine.getToken(0, '\t', n); // token 0
+ aUniqId += "/";
+ aUniqId += rLine.getToken(0, '\t', n); // token 1
+ aUniqId += "/";
+ aUniqId += rLine.getToken(1, '\t', n); // token 3
+ aUniqId += "/";
+ rtl::OString gid(rLine.getToken(0, '\t', n)); // token 4
+ aUniqId += gid;
+ aUniqId += "/";
+ rtl::OString lid(rLine.getToken(0, '\t', n)); // token 5
+ aUniqId += lid;
+ aUniqId += "/";
+ aUniqId += rLine.getToken(0, '\t', n); // token 6
+ aUniqId += "/";
+ aUniqId += rLine.getToken(0, '\t', n); // token 7
+ rtl::OString length(rLine.getToken(0, '\t', n)); // token 8
+ aLineType = rtl::OString();
+ aLangId = rLine.getToken(0, '\t', n); // token 9
+ aText = rLine.getToken(0, '\t', n); // token 10
+ aQuickHelpText = rLine.getToken(1, '\t', n); // token 12
+ aTitle = rLine.getToken(0, '\t', n); // token 13
+ if (n == -1) {
+ NotOK();
+ return;
+ }
+ rLine.getToken(0, '\t', n); // token 14
+ if (n != -1) {
+ NotOK();
+ return;
+ }
+
+ // do some more format checks here
+ if (!helper::isAllAsciiDigits(length)) {
+ PrintError(
+ "The length field does not contain a number!", "Line format",
+ length, true, GetLineNumber(), GetUniqId());
+ NotOK();
+ }
+ if (!LanguageOK(aLangId)) {
+ PrintError(
+ "The Language is invalid!", "Line format", aLangId, true,
+ GetLineNumber(), GetUniqId());
+ NotOK();
+ }
+ // Limit GID and LID to MAX_GID_LID_LEN chars each for database conformity,
+ // see #137575#:
+ if (gid.getLength() > MAX_GID_LID_LEN || lid.getLength() > MAX_GID_LID_LEN)
{
+ PrintError(
+ (rtl::OString(
+ RTL_CONSTASCII_STRINGPARAM("GID and LID may only be "))
+ + rtl::OString::valueOf(MAX_GID_LID_LEN)
+ + rtl::OString(RTL_CONSTASCII_STRINGPARAM(" chars long each"))),
+ "Line format", aLangId, true, GetLineNumber(), GetUniqId());
NotOK();
}
}
@@ -204,30 +233,31 @@ void GSILine::NotOK()
void GSILine::ReassembleLine()
/*****************************************************************************/
{
- if ( GetLineFormat() == FORMAT_SDF )
- {
- rtl::OStringBuffer aReassemble;
- for (sal_Int32 i = 0; i < 10; ++i)
- {
- aReassemble.append( helper::getToken( data_, i, '\t' ) );
- aReassemble.append( "\t" );
- }
- aReassemble.append( aText );
- aReassemble.append( "\t" );
- aReassemble.append( helper::getToken( data_, 11, '\t' ) ); // should be empty but there are some places in sc. Not reflected to sources!!
- aReassemble.append( "\t" );
- aReassemble.append( aQuickHelpText );
- aReassemble.append( "\t" );
- aReassemble.append( aTitle );
- for (sal_Int32 i = 14; i < 15; ++i)
- {
- aReassemble.append( "\t" );
- aReassemble.append( helper::getToken( data_, i, '\t' ) );
- }
- data_ = aReassemble.makeStringAndClear();
+ if (GetLineFormat() != FORMAT_SDF) {
+ PrintError(
+ "Cannot reassemble line of unknown type (internal Error).",
+ "Line format", rtl::OString(), false, GetLineNumber(),
+ GetUniqId());
+ return;
}
- else
- PrintError( "Cannot reassemble line of unknown type (internal Error).", "Line format", "", sal_False, GetLineNumber(), GetUniqId() );
+ rtl::OStringBuffer b;
+ sal_Int32 n = 0;
+ for (sal_Int32 i = 0; i != 10; ++i) {
+ b.append(data_.getToken(0, '\t', n)); // token 0--9
+ b.append('\t');
+ }
+ b.append(aText);
+ b.append('\t');
+ b.append(data_.getToken(1, '\t', n));
+ // token 11; should be empty but there are some places in sc not
+ // reflected to sources
+ b.append('\t');
+ b.append(aQuickHelpText);
+ b.append('\t');
+ b.append(aTitle);
+ b.append('\t');
+ b.append(data_.getToken(2, '\t', n)); // token 14
+ data_ = b.makeStringAndClear();
}
//
@@ -328,12 +358,11 @@ void GSIBlock::PrintList( ParserMessageList *pList, rtl::OString const & aPrefix
rtl::OString aContext;
if ( bPrintContext )
{
- if ( pMsg->GetTagBegin() == STRING_NOTFOUND )
+ if ( pMsg->GetTagBegin() == -1 )
aContext = pLine->GetText().copy( 0, 300 );
else
aContext = pLine->data_.copy( pMsg->GetTagBegin()-150, 300 );
- aContext = comphelper::string::stripEnd(aContext, ' ');
- aContext = comphelper::string::stripStart(aContext, ' ');
+ aContext = helper::trimAscii(aContext);
}
PrintMessage( pMsg->Prefix(), pMsg->GetErrorText(), aPrefix, aContext, pLine->GetLineNumber(), pLine->GetUniqId() );
@@ -346,12 +375,17 @@ sal_Bool GSIBlock::IsUTF8( const rtl::OString &aTestee, sal_Bool bFixTags, sal_I
{
rtl::OUString aUTF8Tester(
rtl::OStringToOUString(aTestee, RTL_TEXTENCODING_UTF8));
- nErrorPos = rtl::OUStringToOString(aUTF8Tester, RTL_TEXTENCODING_UTF8).
- indexOf(aTestee);
- if (nErrorPos != -1)
+ rtl::OString aTestee2(
+ rtl::OUStringToOString(aUTF8Tester, RTL_TEXTENCODING_UTF8));
+ sal_Int32 i = 0;
+ while (i != std::min(aTestee.getLength(), aTestee2.getLength())
+ && aTestee[i] == aTestee2[i])
{
- aUTF8Tester = rtl::OUString(
- aTestee.getStr(), nErrorPos, RTL_TEXTENCODING_UTF8);
+ ++i;
+ }
+ if (i != aTestee.getLength() || i != aTestee2.getLength())
+ {
+ aUTF8Tester = rtl::OUString(aTestee.getStr(), i, RTL_TEXTENCODING_UTF8);
nErrorPos = aUTF8Tester.getLength();
aErrorMsg = "UTF8 Encoding seems to be broken";
return sal_False;
@@ -388,7 +422,7 @@ sal_Bool GSIBlock::TestUTF8( GSILine* pTestee, sal_Bool bFixTags )
sal_Bool bHasBeenFixed = sal_False;
if ( !IsUTF8( pTestee->GetText(), bFixTags, nErrorPos, aErrorMsg, bHasBeenFixed, aFixed ) )
{
- rtl::OString aContext( pTestee->GetText().copy( nErrorPos, 20 ) );
+ rtl::OString aContext(copyUpTo(pTestee->GetText(), nErrorPos, 20));
PrintError(rtl::OStringBuffer(aErrorMsg).append(RTL_CONSTASCII_STRINGPARAM(" in Text at Position "))
.append(nErrorPos).getStr(),
"Text format", aContext, pTestee->GetLineNumber(), pTestee->GetUniqId());
@@ -401,7 +435,8 @@ sal_Bool GSIBlock::TestUTF8( GSILine* pTestee, sal_Bool bFixTags )
}
if ( !IsUTF8( pTestee->GetQuickHelpText(), bFixTags, nErrorPos, aErrorMsg, bHasBeenFixed, aFixed ) )
{
- rtl::OString aContext( pTestee->GetQuickHelpText().copy( nErrorPos, 20 ) );
+ rtl::OString aContext(
+ copyUpTo(pTestee->GetQuickHelpText(), nErrorPos, 20));
PrintError(rtl::OStringBuffer(aErrorMsg).append(RTL_CONSTASCII_STRINGPARAM(" in QuickHelpText at Position "))
.append(nErrorPos).getStr(),
"Text format", aContext, pTestee->GetLineNumber(), pTestee->GetUniqId());
@@ -667,15 +702,15 @@ int _cdecl main( int argc, char *argv[] )
sal_Bool bWriteFixed = sal_False;
sal_Bool bFixTags = sal_False;
sal_Bool bAllowSuspicious = sal_False;
- rtl::OUString aErrorFilename;
- rtl::OUString aCorrectFilename;
- rtl::OUString aFixedFilename;
+ rtl::OString aErrorFilename;
+ rtl::OString aCorrectFilename;
+ rtl::OString aFixedFilename;
sal_Bool bFileHasError = sal_False;
rtl::OString aSourceLang( "en-US" ); // English is default
rtl::OString aFilename;
rtl::OString aReferenceFilename;
sal_Bool bReferenceFile = sal_False;
- for ( sal_uInt16 i = 1 ; i < argc ; i++ )
+ for ( int i = 1 ; i < argc ; i++ )
{
if ( *argv[ i ] == '-' )
{
@@ -690,10 +725,7 @@ int _cdecl main( int argc, char *argv[] )
if ( (*(argv[ i ]+3)) == 'f' )
if ( (i+1) < argc )
{
- aErrorFilename = rtl::OUString(
- argv[i + 1],
- rtl_str_getLength(argv[i + 1]),
- RTL_TEXTENCODING_ASCII_US);
+ aErrorFilename = argv[i + 1];
bWriteError = sal_True;
i++;
}
@@ -709,10 +741,7 @@ int _cdecl main( int argc, char *argv[] )
if ( (*(argv[ i ]+3)) == 'f' )
if ( (i+1) < argc )
{
- aCorrectFilename = rtl::OUString(
- argv[i + 1],
- rtl_str_getLength(argv[i + 1]),
- RTL_TEXTENCODING_ASCII_US);
+ aCorrectFilename = argv[i + 1];
bWriteCorrect = sal_True;
i++;
}
@@ -727,10 +756,7 @@ int _cdecl main( int argc, char *argv[] )
if ( (*(argv[ i ]+3)) == 'f' )
if ( (i+1) < argc )
{
- aFixedFilename = rtl::OUString(
- argv[i + 1],
- rtl_str_getLength(argv[i + 1]),
- RTL_TEXTENCODING_ASCII_US);
+ aFixedFilename = argv[i + 1];
bWriteFixed = sal_True;
bFixTags = sal_True;
i++;
@@ -837,12 +863,6 @@ int _cdecl main( int argc, char *argv[] )
- DirEntry aSource = DirEntry( rtl::OStringToOUString( aFilename, RTL_TEXTENCODING_ASCII_US ));
- if ( !aSource.Exists()) {
- fprintf( stderr, "\nERROR: GSI-File %s not found!\n\n", aFilename.getStr() );
- exit ( 2 );
- }
-
std::ifstream aGSI(aFilename.getStr());
if (!aGSI.is_open()) {
fprintf( stderr, "\nERROR: Could not open GSI-File %s!\n\n", aFilename.getStr() );
@@ -852,12 +872,6 @@ int _cdecl main( int argc, char *argv[] )
std::ifstream aReferenceGSI;
if ( bReferenceFile )
{
- DirEntry aReferenceSource = DirEntry( rtl::OStringToOUString( aReferenceFilename, RTL_TEXTENCODING_ASCII_US ));
- if ( !aReferenceSource.Exists()) {
- fprintf( stderr, "\nERROR: GSI-File %s not found!\n\n", aFilename.getStr() );
- exit ( 2 );
- }
-
aReferenceGSI.open(aReferenceFilename.getStr());
if (!aReferenceGSI.is_open()) {
fprintf( stderr, "\nERROR: Could not open Input-File %s!\n\n", aFilename.getStr() );
@@ -866,19 +880,14 @@ int _cdecl main( int argc, char *argv[] )
}
LazyStream aOkOut;
- rtl::OUString aBaseName(aSource.GetBase());
if ( bWriteCorrect )
{
if (aCorrectFilename.isEmpty())
{
- rtl::OUString sTmpBase(aBaseName);
- sTmpBase += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_ok"));
- aSource.SetBase( sTmpBase );
- aCorrectFilename = aSource.GetFull();
+ aCorrectFilename = addSuffix(
+ aFilename, rtl::OString(RTL_CONSTASCII_STRINGPARAM("_ok")));
}
- aOkOut.SetFileName(
- rtl::OUStringToOString(
- aCorrectFilename, osl_getThreadTextEncoding()));
+ aOkOut.SetFileName(aCorrectFilename);
}
LazyStream aErrOut;
@@ -886,14 +895,10 @@ int _cdecl main( int argc, char *argv[] )
{
if (aErrorFilename.isEmpty())
{
- rtl::OUString sTmpBase(aBaseName);
- sTmpBase += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_err"));
- aSource.SetBase( sTmpBase );
- aErrorFilename = aSource.GetFull();
+ aErrorFilename = addSuffix(
+ aFilename, rtl::OString(RTL_CONSTASCII_STRINGPARAM("_err")));
}
- aErrOut.SetFileName(
- rtl::OUStringToOString(
- aErrorFilename, osl_getThreadTextEncoding()));
+ aErrOut.SetFileName(aErrorFilename);
}
LazyStream aFixOut;
@@ -901,14 +906,10 @@ int _cdecl main( int argc, char *argv[] )
{
if (aFixedFilename.isEmpty())
{
- rtl::OUString sTmpBase(aBaseName);
- sTmpBase += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_fix"));
- aSource.SetBase( sTmpBase );
- aFixedFilename = aSource.GetFull();
+ aFixedFilename = addSuffix(
+ aFilename, rtl::OString(RTL_CONSTASCII_STRINGPARAM("_fix")));
}
- aFixOut.SetFileName(
- rtl::OUStringToOString(
- aFixedFilename, osl_getThreadTextEncoding()));
+ aFixOut.SetFileName(aFixedFilename);
}
diff --git a/l10ntools/source/helper.hxx b/l10ntools/source/helper.hxx
index 27ee642dfd92..edd2d0fa3be1 100644
--- a/l10ntools/source/helper.hxx
+++ b/l10ntools/source/helper.hxx
@@ -35,15 +35,62 @@
#include <cassert>
#include "rtl/string.hxx"
+#include "rtl/ustring.hxx"
#include "sal/types.h"
namespace helper {
+inline bool isAsciiWhitespace(char c) {
+ return (c >= 0x09 && c <= 0x0D) || c == ' '; // HT, LF, VT, FF, CR
+}
+
+// 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 bool endsWith(rtl::OString const & text, rtl::OString const & search) {
return text.getLength() >= search.getLength()
&& text.match(search, text.getLength() - search.getLength());
}
+inline rtl::OString trimAscii(rtl::OString const & text) {
+ sal_Int32 i1 = 0;
+ while (i1 != text.getLength() && isAsciiWhitespace(text[i1])) {
+ ++i1;
+ }
+ sal_Int32 i2 = text.getLength();
+ while (i2 != i1 && isAsciiWhitespace(text[i2 - 1])) {
+ --i2;
+ }
+ return text.copy(i1, i2 - i1);
+}
+
inline sal_Int32 searchAndReplace(
rtl::OString * text, rtl::OString const & search,
rtl::OString const & replace)
diff --git a/l10ntools/source/makefile.mk b/l10ntools/source/makefile.mk
index 69110078bdca..597b614b0675 100644
--- a/l10ntools/source/makefile.mk
+++ b/l10ntools/source/makefile.mk
@@ -107,8 +107,6 @@ APP5TARGET= gsicheck
APP5OBJS= $(OBJ)$/gsicheck.obj $(OBJ)$/tagtest.obj
APP5RPATH= NONE
APP5STDLIBS+= \
- $(TOOLSLIB) \
- $(COMPHELPERLIB) \
$(SALLIB)
# extractor and merger for *.cfg
diff --git a/l10ntools/source/tagtest.cxx b/l10ntools/source/tagtest.cxx
index 5d7f1ab29334..8238308c5b35 100644
--- a/l10ntools/source/tagtest.cxx
+++ b/l10ntools/source/tagtest.cxx
@@ -26,8 +26,13 @@
*
************************************************************************/
-#include <tools/string.hxx>
-#include <rtl/strbuf.hxx>
+#include "sal/config.h"
+
+#include "rtl/strbuf.hxx"
+#include "rtl/string.hxx"
+#include "rtl/ustrbuf.hxx"
+#include "rtl/ustring.hxx"
+
#include "tagtest.hxx"
#if OSL_DEBUG_LEVEL > 1
@@ -43,7 +48,7 @@
-TokenInfo::TokenInfo( TokenId pnId, sal_uInt16 nP, rtl::OUString const & paStr, ParserMessageList &rErrorList )
+TokenInfo::TokenInfo( TokenId pnId, sal_Int32 nP, rtl::OUString const & paStr, ParserMessageList &rErrorList )
: bClosed(sal_False)
, bCloseTag(sal_False)
, bIsBroken(sal_False)
@@ -94,8 +99,8 @@ void TokenInfo::SplitTag( ParserMessageList &rErrorList )
sal_Int32 nLastPos = 2; // skip initial \<
sal_Int32 nCheckPos = nLastPos;
static char const aDelims[] = " \\=>/";
- String aPortion;
- String aValue; // store the value of a property
+ rtl::OUString aPortion;
+ rtl::OUString aValue; // store the value of a property
rtl::OString aName; // store the name of a property/tag
sal_Bool bCheckName = sal_False;
sal_Bool bCheckEmpty = sal_False;
@@ -132,7 +137,7 @@ void TokenInfo::SplitTag( ParserMessageList &rErrorList )
break;
case '/':
{
- if ( aPortion.Len() == 0 )
+ if (aPortion.isEmpty())
{
aState = TC_CLOSETAG;
}
@@ -194,7 +199,7 @@ void TokenInfo::SplitTag( ParserMessageList &rErrorList )
break;
case '\"': aState = TC_INSIDE_STRING;
bCheckEmpty = sal_True;
- aValue.Erase();
+ aValue = rtl::OUString();
break;
default: aState = TC_ERROR;
}
@@ -206,7 +211,7 @@ void TokenInfo::SplitTag( ParserMessageList &rErrorList )
{
case '\"': aState = TC_INSIDE_STRING;
bCheckEmpty = sal_True;
- aValue.Erase();
+ aValue = rtl::OUString();
break;
default: aState = TC_ERROR;
}
@@ -241,7 +246,7 @@ void TokenInfo::SplitTag( ParserMessageList &rErrorList )
{
aState = TC_INSIDE_STRING;
aValue += aPortion;
- aValue += cDelim;
+ aValue += rtl::OUString(cDelim);
}
}
break;
@@ -329,7 +334,7 @@ void TokenInfo::SplitTag( ParserMessageList &rErrorList )
if ( bCheckName )
{
- if ( aPortion.Len() == 0 )
+ if (aPortion.isEmpty())
{
rErrorList.AddError( 25, "Tag/Property name missing ", *this );
bIsBroken = sal_True;
@@ -363,7 +368,7 @@ void TokenInfo::SplitTag( ParserMessageList &rErrorList )
if ( bCheckEmpty )
{
- if ( aPortion.Len() )
+ if (!aPortion.isEmpty())
{
rErrorList.AddError( 25, rtl::OStringBuffer(RTL_CONSTASCII_STRINGPARAM("Found displaced characters '")).append(rtl::OUStringToOString(aPortion, RTL_TEXTENCODING_UTF8)).append(RTL_CONSTASCII_STRINGPARAM("' in Tag ")).makeStringAndClear(), *this );
bIsBroken = sal_True;
@@ -528,34 +533,34 @@ rtl::OUString TokenInfo::GetTagName() const
rtl::OUString TokenInfo::MakeTag() const
{
- String aRet;
- aRet.AppendAscii("\\<");
+ rtl::OUStringBuffer aRet;
+ aRet.appendAscii("\\<");
if ( bCloseTag )
- aRet.AppendAscii("/");
- aRet.Append( GetTagName() );
+ aRet.appendAscii("/");
+ aRet.append( GetTagName() );
StringHashMap::const_iterator iProp;
for( iProp = aProperties.begin() ; iProp != aProperties.end(); ++iProp )
{
- aRet.AppendAscii(" ");
- aRet.Append( String( iProp->first, RTL_TEXTENCODING_UTF8 ) );
- aRet.AppendAscii("=\\\"");
- aRet.Append( iProp->second );
- aRet.AppendAscii("\\\"");
+ aRet.appendAscii(" ");
+ aRet.append( rtl::OStringToOUString( iProp->first, RTL_TEXTENCODING_UTF8 ) );
+ aRet.appendAscii("=\\\"");
+ aRet.append( iProp->second );
+ aRet.appendAscii("\\\"");
}
if ( bClosed )
- aRet.AppendAscii("/");
- aRet.AppendAscii("\\>");
- return aRet;
+ aRet.appendAscii("/");
+ aRet.appendAscii("\\>");
+ return aRet.makeStringAndClear();
}
-void ParserMessageList::AddError( sal_uInt16 nErrorNr, const rtl::OString& rErrorText, const TokenInfo &rTag )
+void ParserMessageList::AddError( sal_Int32 nErrorNr, const rtl::OString& rErrorText, const TokenInfo &rTag )
{
maList.push_back( new ParserError( nErrorNr, rErrorText, rTag ) );
}
-void ParserMessageList::AddWarning( sal_uInt16 nErrorNr, const rtl::OString& rErrorText, const TokenInfo &rTag )
+void ParserMessageList::AddWarning( sal_Int32 nErrorNr, const rtl::OString& rErrorText, const TokenInfo &rTag )
{
maList.push_back( new ParserWarning( nErrorNr, rErrorText, rTag ) );
}
@@ -677,7 +682,7 @@ void SimpleParser::Parse( rtl::OUString const & PaSource )
TokenInfo SimpleParser::GetNextToken( ParserMessageList &rErrorList )
{
TokenInfo aResult;
- sal_uInt16 nTokenStartPos = 0;
+ sal_Int32 nTokenStartPos = 0;
if ( aNextTag.nId != TAG_NOMORETAGS )
{
aResult = aNextTag;
@@ -733,12 +738,12 @@ TokenInfo SimpleParser::GetNextToken( ParserMessageList &rErrorList )
while (aLastToken[nNonBlankEndPos] == ' ')
nNonBlankEndPos--;
if (aLastToken[nNonBlankEndPos] == '/')
- aNextTag = TokenInfo( TAG_COMMONEND, nTokenStartPos, String::CreateFromAscii("\\</").Append(aResult.GetTagName()).AppendAscii("\\>"), rErrorList );
+ aNextTag = TokenInfo( TAG_COMMONEND, nTokenStartPos, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\\</")) + aResult.GetTagName() + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\\>")), rErrorList );
}
}
else
{
- sal_uInt16 i = 0;
+ sal_Int32 i = 0;
while ( aKnownTags[i].nTag != TAG_UNKNOWN_TAG &&
aLastToken != aKnownTags[i].GetName() )
i++;
@@ -752,7 +757,7 @@ TokenInfo SimpleParser::GetNextToken( ParserMessageList &rErrorList )
return aResult;
}
-rtl::OUString SimpleParser::GetNextTokenString( ParserMessageList &rErrorList, sal_uInt16 &rTagStartPos )
+rtl::OUString SimpleParser::GetNextTokenString( ParserMessageList &rErrorList, sal_Int32 &rTagStartPos )
{
sal_Int32 nStyle2StartPos = aSource.indexOfAsciiL(
RTL_CONSTASCII_STRINGPARAM("$["), nPos );
@@ -765,7 +770,7 @@ rtl::OUString SimpleParser::GetNextTokenString( ParserMessageList &rErrorList, s
rTagStartPos = 0;
if (nStyle2StartPos == -1 && nStyle3StartPos == -1)
- return String(); // no more tokens
+ return rtl::OUString(); // no more tokens
if ( nStyle4StartPos < nStyle2StartPos && nStyle4StartPos <= nStyle3StartPos ) // <= to make sure \\ is always handled first
{ // Skip quoted Backslash
@@ -820,7 +825,7 @@ rtl::OUString SimpleParser::GetLexem( TokenInfo const &aToken )
return aToken.aTokenString;
else
{
- sal_uInt16 i = 0;
+ sal_Int32 i = 0;
while ( aKnownTags[i].nTag != TAG_UNKNOWN_TAG &&
aKnownTags[i].nTag != aToken.nId )
i++;
@@ -1349,7 +1354,7 @@ sal_Bool TokenParser::match( const TokenInfo &aCurrentToken, const TokenInfo &rE
return sal_False;
}
-void TokenParser::ParseError( sal_uInt16 nErrNr, const rtl::OString &rErrMsg, const TokenInfo &rTag )
+void TokenParser::ParseError( sal_Int32 nErrNr, const rtl::OString &rErrMsg, const TokenInfo &rTag )
{
pErrorList->AddError( nErrNr, rErrMsg, rTag);
@@ -1358,12 +1363,12 @@ void TokenParser::ParseError( sal_uInt16 nErrNr, const rtl::OString &rErrMsg, co
}
-ParserMessage::ParserMessage( sal_uInt16 PnErrorNr, const rtl::OString &rPaErrorText, const TokenInfo &rTag )
+ParserMessage::ParserMessage( sal_Int32 PnErrorNr, const rtl::OString &rPaErrorText, const TokenInfo &rTag )
: nErrorNr( PnErrorNr )
, nTagBegin( 0 )
, nTagLength( 0 )
{
- String aLexem( SimpleParser::GetLexem( rTag ) );
+ rtl::OUString aLexem( SimpleParser::GetLexem( rTag ) );
rtl::OStringBuffer aErrorBuffer(rPaErrorText);
aErrorBuffer.append(RTL_CONSTASCII_STRINGPARAM(": "));
aErrorBuffer.append(rtl::OUStringToOString(aLexem, RTL_TEXTENCODING_UTF8));
@@ -1376,14 +1381,14 @@ ParserMessage::ParserMessage( sal_uInt16 PnErrorNr, const rtl::OString &rPaError
}
aErrorText = aErrorBuffer.makeStringAndClear();
nTagBegin = rTag.nPos;
- nTagLength = aLexem.Len();
+ nTagLength = aLexem.getLength();
}
-ParserError::ParserError( sal_uInt16 ErrorNr, const rtl::OString &rErrorText, const TokenInfo &rTag )
+ParserError::ParserError( sal_Int32 ErrorNr, const rtl::OString &rErrorText, const TokenInfo &rTag )
: ParserMessage( ErrorNr, rErrorText, rTag )
{}
-ParserWarning::ParserWarning( sal_uInt16 ErrorNr, const rtl::OString &rErrorText, const TokenInfo &rTag )
+ParserWarning::ParserWarning( sal_Int32 ErrorNr, const rtl::OString &rErrorText, const TokenInfo &rTag )
: ParserMessage( ErrorNr, rErrorText, rTag )
{}
@@ -1409,12 +1414,12 @@ sal_Bool LingTest::IsTagMandatory( TokenInfo const &aToken, TokenId &aMetaTokens
else if ( TAG_COMMONSTART == aTokenId
|| TAG_COMMONEND == aTokenId )
{
- String aTagName = aToken.GetTagName();
- return !(aTagName.EqualsIgnoreCaseAscii( "comment" )
- || aTagName.EqualsIgnoreCaseAscii( "bookmark_value" )
- || aTagName.EqualsIgnoreCaseAscii( "emph" )
- || aTagName.EqualsIgnoreCaseAscii( "item" )
- || aTagName.EqualsIgnoreCaseAscii( "br" ) );
+ rtl::OUString aTagName = aToken.GetTagName();
+ return !(aTagName.equalsIgnoreAsciiCaseAscii( "comment" )
+ || aTagName.equalsIgnoreAsciiCaseAscii( "bookmark_value" )
+ || aTagName.equalsIgnoreAsciiCaseAscii( "emph" )
+ || aTagName.equalsIgnoreAsciiCaseAscii( "item" )
+ || aTagName.equalsIgnoreAsciiCaseAscii( "br" ) );
}
return sal_False;
}
@@ -1474,7 +1479,7 @@ void LingTest::CheckTags( TokenList &aReference, TokenList &aTestee, sal_Bool bF
if ( bFixTags )
{
// we fix only if its a really simple case
- sal_uInt16 nTagCount = 0;
+ sal_Int32 nTagCount = 0;
for ( i=0 ; i < aReference.size() ; i++ )
if ( !aReference[ i ].IsDone() )
nTagCount++;