summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndras Timar <atimar@suse.com>2012-09-28 13:57:36 +0200
committerAndras Timar <atimar@suse.com>2012-09-28 14:01:34 +0200
commit8b97644bab0e9106b798a5b8969aa796e558ef3f (patch)
tree190b3bbe2fbf2699674af90114f06f7cdb809cb7
parente05baffff1446b1d65f0cb84130b060241065da8 (diff)
Revert "fdo#52246 let helpex use gsicheck's tag checker"
This reverts commit e3b927787f3643f9e584cc80c974d5f907a94858. There will be a better solution in feature/killsdf soon. Conflicts: l10ntools/inc/gsicheck.hxx l10ntools/source/gsicheck.cxx l10ntools/source/gsimain.cxx Change-Id: I5d12f4ee069d7024345d78c45fb1587cb006c922
-rw-r--r--l10ntools/Executable_gsicheck.mk6
-rw-r--r--l10ntools/StaticLibrary_transex.mk2
-rw-r--r--l10ntools/inc/export.hxx23
-rw-r--r--l10ntools/inc/gsicheck.hxx34
-rw-r--r--l10ntools/source/gsicheck.cxx454
-rw-r--r--l10ntools/source/gsimain.cxx456
-rw-r--r--l10ntools/source/helpmerge.cxx10
-rw-r--r--l10ntools/source/merge.cxx9
8 files changed, 443 insertions, 551 deletions
diff --git a/l10ntools/Executable_gsicheck.mk b/l10ntools/Executable_gsicheck.mk
index fceb61a1554e..917c00fc5866 100644
--- a/l10ntools/Executable_gsicheck.mk
+++ b/l10ntools/Executable_gsicheck.mk
@@ -34,12 +34,10 @@ $(eval $(call gb_Executable_set_include,gsicheck,\
$(eval $(call gb_Executable_use_libraries,gsicheck,\
sal \
))
-$(eval $(call gb_Executable_use_static_libraries,gsicheck,\
- transex \
-))
$(eval $(call gb_Executable_add_exception_objects,gsicheck,\
- l10ntools/source/gsimain \
+ l10ntools/source/gsicheck \
+ l10ntools/source/tagtest \
))
# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/l10ntools/StaticLibrary_transex.mk b/l10ntools/StaticLibrary_transex.mk
index f9dd1650d591..e8c84b7d3662 100644
--- a/l10ntools/StaticLibrary_transex.mk
+++ b/l10ntools/StaticLibrary_transex.mk
@@ -37,8 +37,6 @@ $(eval $(call gb_StaticLibrary_add_exception_objects,transex,\
l10ntools/source/merge \
l10ntools/source/file \
l10ntools/source/directory \
- l10ntools/source/tagtest \
- l10ntools/source/gsicheck \
))
# vim: set noet sw=4 ts=4:
diff --git a/l10ntools/inc/export.hxx b/l10ntools/inc/export.hxx
index d11d06f0e4e1..be243600d6a6 100644
--- a/l10ntools/inc/export.hxx
+++ b/l10ntools/inc/export.hxx
@@ -71,9 +71,6 @@ typedef boost::unordered_map<rtl::OString, PFormEntrys*, rtl::OStringHash>
typedef boost::unordered_map<rtl::OString, MergeData*, rtl::OStringHash>
MergeDataHashMap;
-typedef boost::unordered_map<rtl::OString, size_t, rtl::OStringHash>
- LineNumberHashMap;
-
#define SOURCE_LANGUAGE rtl::OString(RTL_CONSTASCII_STRINGPARAM("en-US"))
#define X_COMMENT rtl::OString(RTL_CONSTASCII_STRINGPARAM("x-comment"))
#define LIST_REFID "LIST_REFID"
@@ -377,36 +374,23 @@ private:
OStringBoolHashMap bQuickHelpTextFirst;
OStringHashMap sTitle;
OStringBoolHashMap bTitleFirst;
- OStringHashMap sSDFLine;
- LineNumberHashMap nLine;
public:
PFormEntrys( const rtl::OString &rPForm ) : data_( rPForm ) {};
void InsertEntry(const rtl::OString &rId, const rtl::OString &rText,
- const rtl::OString &rQuickHelpText, const rtl::OString &rTitle,
- const rtl::OString &rSDFLine, const std::size_t nLineIn)
+ const rtl::OString &rQuickHelpText, const rtl::OString &rTitle)
{
+
sText[ rId ] = rText;
bTextFirst[ rId ] = true;
sQuickHelpText[ rId ] = rQuickHelpText;
bQuickHelpTextFirst[ rId ] = true;
sTitle[ rId ] = rTitle;
bTitleFirst[ rId ] = true;
- sSDFLine[ rId ] = rSDFLine;
- nLine[ rId ] = nLineIn;
}
sal_Bool GetText( rtl::OString &rReturn, sal_uInt16 nTyp, const rtl::OString &nLangIndex, sal_Bool bDel = sal_False );
sal_Bool GetTransex3Text( rtl::OString &rReturn, sal_uInt16 nTyp, const rtl::OString &nLangIndex, sal_Bool bDel = sal_False );
- rtl::OString & GetSDF(const rtl::OString &nLangIndex)
- {
- return sSDFLine[nLangIndex];
- }
-
- std::size_t GetNLine(const rtl::OString &nLangIndex)
- {
- return nLine[nLangIndex];
- }
};
//
@@ -459,8 +443,7 @@ class MergeDataFile
const rtl::OString &rLID, const rtl::OString &rPFO,
const rtl::OString &nLang, const rtl::OString &rTEXT,
const rtl::OString &rQHTEXT, const rtl::OString &rTITLE,
- const rtl::OString &sFilename, bool bCaseSensitive,
- const rtl::OString &rSDF, std::size_t nLine);
+ const rtl::OString &sFilename, bool bCaseSensitive);
public:
explicit MergeDataFile(const rtl::OString &rFileName,
const rtl::OString& rFile, bool bCaseSensitive);
diff --git a/l10ntools/inc/gsicheck.hxx b/l10ntools/inc/gsicheck.hxx
index a33796c0073a..467925e46767 100644
--- a/l10ntools/inc/gsicheck.hxx
+++ b/l10ntools/inc/gsicheck.hxx
@@ -33,7 +33,6 @@
#include <cstddef>
#include <vector>
-#include <fstream>
#include "tagtest.hxx"
@@ -132,39 +131,6 @@ public:
void WriteFixed( LazyStream &aFixOut );
};
-sal_Bool check(rtl::OString s,std::size_t nLine);
-
-void PrintMessage( rtl::OString const & aType, rtl::OString const & aMsg, rtl::OString const & aPrefix,
- rtl::OString const & aContext, sal_Bool bPrintContext, std::size_t nLine, rtl::OString aUniqueId = rtl::OString() );
-
-void PrintError( rtl::OString const & aMsg, rtl::OString const & aPrefix,
- rtl::OString const & aContext, sal_Bool bPrintContext, std::size_t nLine, rtl::OString const & aUniqueId = rtl::OString() );
-
-bool LanguageOK( rtl::OString const & aLang );
-
-class LazyStream: public std::ofstream
-{
-
-private:
- rtl::OString aFileName;
- bool bOpened;
-
-public:
- LazyStream()
- : aFileName()
- , bOpened(false)
- {};
-
- void SetFileName( const rtl::OString& rFileName )
- {
- aFileName = rFileName;
- };
-
- void LazyOpen();
-};
-
-sal_Int32 const MAX_GID_LID_LEN = 250;
-
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/l10ntools/source/gsicheck.cxx b/l10ntools/source/gsicheck.cxx
index 082f9ef94087..1abc00d17ac9 100644
--- a/l10ntools/source/gsicheck.cxx
+++ b/l10ntools/source/gsicheck.cxx
@@ -42,6 +42,8 @@
#include "tagtest.hxx"
#include "gsicheck.hxx"
+sal_Int32 const MAX_GID_LID_LEN = 250;
+
namespace {
rtl::OString copyUpTo(
@@ -51,11 +53,26 @@ rtl::OString copyUpTo(
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,
- rtl::OString const & aContext, sal_Bool bPrintContext, std::size_t nLine, rtl::OString aUniqueId )
+ rtl::OString const & aContext, sal_Bool bPrintContext, std::size_t nLine, rtl::OString aUniqueId = rtl::OString() )
/*****************************************************************************/
{
fprintf( stdout, "%s %s, Line %u", aType.getStr(), aPrefix.getStr(), static_cast<unsigned>( nLine ) );
@@ -70,7 +87,7 @@ void PrintMessage( rtl::OString const & aType, rtl::OString const & aMsg, rtl::O
/*****************************************************************************/
void PrintError( rtl::OString const & aMsg, rtl::OString const & aPrefix,
- rtl::OString const & aContext, sal_Bool bPrintContext, std::size_t nLine, rtl::OString const & aUniqueId )
+ rtl::OString const & aContext, sal_Bool bPrintContext, std::size_t nLine, rtl::OString const & aUniqueId = rtl::OString() )
/*****************************************************************************/
{
PrintMessage( "Error:", aMsg, aPrefix, aContext, bPrintContext, nLine, aUniqueId );
@@ -92,6 +109,27 @@ bool LanguageOK( rtl::OString const & aLang )
&& !t0.equalsIgnoreAsciiCase(t1);
}
+class LazyStream: public std::ofstream
+{
+
+private:
+ rtl::OString aFileName;
+ bool bOpened;
+
+public:
+ LazyStream()
+ : aFileName()
+ , bOpened(false)
+ {};
+
+ void SetFileName( const rtl::OString& rFileName )
+ {
+ aFileName = rFileName;
+ };
+
+ void LazyOpen();
+};
+
void LazyStream::LazyOpen()
{
if ( !bOpened )
@@ -603,39 +641,411 @@ void GSIBlock::WriteFixed( LazyStream &aFixOut )
}
}
-sal_Bool check(rtl::OString s, std::size_t nLine)
+
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+
+/*****************************************************************************/
+void Help()
+/*****************************************************************************/
{
+ fprintf( stdout, "\n" );
+ fprintf( stdout, "gsicheck checks the syntax of tags in SDF-Files\n" );
+ fprintf( stdout, " checks for inconsistencies and malicious UTF8 encoding\n" );
+ fprintf( stdout, " checks tags in Online Help\n" );
+ fprintf( stdout, " relax GID/LID length to %s\n",
+ rtl::OString::valueOf(static_cast<sal_Int32>(MAX_GID_LID_LEN)).getStr() );
+ fprintf( stdout, "\n" );
+ fprintf( stdout, "Syntax: gsicheck [ -c ] [-f] [ -we ] [ -wef ErrorFilename ] [ -wc ]\n" );
+ fprintf( stdout, " [ -wcf CorrectFilename ] [ -s | -t ] [ -l LanguageID ]\n" );
+ fprintf( stdout, " [ -r ReferenceFile ] filename\n" );
+ fprintf( stdout, "\n" );
+ fprintf( stdout, "-c Add context to error message (Print the line containing the error)\n" );
+ fprintf( stdout, "-f try to fix errors. See also -wf -wff \n" );
+ fprintf( stdout, "-wf Write File containing all fixed parts\n" );
+ fprintf( stdout, "-wff Same as above but give own filename\n" );
+ fprintf( stdout, "-we Write File containing all errors\n" );
+ fprintf( stdout, "-wef Same as above but give own filename\n" );
+ fprintf( stdout, "-wc Write File containing all correct parts\n" );
+ fprintf( stdout, "-wcf Same as above but give own filename\n" );
+ fprintf( stdout, "-s Check only source language. Should be used before handing out to vendor.\n" );
+ fprintf( stdout, "-t Check only Translation language(s). Should be used before merging.\n" );
+ fprintf( stdout, "-e disable encoding checks. E.g.: double questionmark \'??\' which may be the\n" );
+ fprintf( stdout, " result of false conversions\n" );
+ fprintf( stdout, "-l ISO language code of the source language.\n" );
+ fprintf( stdout, " Default is en-US. Use \"\" (empty string) or 'none'\n" );
+ fprintf( stdout, " to disable source language dependent checks\n" );
+ fprintf( stdout, "-r Reference filename to check that source language entries\n" );
+ fprintf( stdout, " have not been changed\n" );
+ fprintf( stdout, "\n" );
+}
+
+SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
+ sal_Bool bError = sal_False;
+ sal_Bool bPrintContext = sal_False;
+ sal_Bool bCheckSourceLang = sal_False;
+ sal_Bool bCheckTranslationLang = sal_False;
+ sal_Bool bWriteError = sal_False;
+ sal_Bool bWriteCorrect = sal_False;
+ sal_Bool bWriteFixed = sal_False;
+ sal_Bool bFixTags = sal_False;
+ sal_Bool bAllowSuspicious = sal_False;
+ rtl::OString aErrorFilename;
+ rtl::OString aCorrectFilename;
+ rtl::OString aFixedFilename;
sal_Bool bFileHasError = sal_False;
- GSILine* pGSILine = NULL;
- GSIBlock *pBlock = NULL;
- pGSILine = new GSILine(s, nLine );
+ rtl::OString aSourceLang( "en-US" ); // English is default
+ rtl::OString aFilename;
+ rtl::OString aReferenceFilename;
+ sal_Bool bReferenceFile = sal_False;
+ for ( int i = 1 ; i < argc ; i++ )
+ {
+ if ( *argv[ i ] == '-' )
+ {
+ switch (*(argv[ i ]+1))
+ {
+ case 'c':bPrintContext = sal_True;
+ break;
+ case 'w':
+ {
+ if ( (*(argv[ i ]+2)) == 'e' )
+ {
+ if ( (*(argv[ i ]+3)) == 'f' )
+ if ( (i+1) < argc )
+ {
+ aErrorFilename = argv[i + 1];
+ bWriteError = sal_True;
+ i++;
+ }
+ else
+ {
+ fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] );
+ bError = sal_True;
+ }
+ else
+ bWriteError = sal_True;
+ }
+ else if ( (*(argv[ i ]+2)) == 'c' )
+ if ( (*(argv[ i ]+3)) == 'f' )
+ if ( (i+1) < argc )
+ {
+ aCorrectFilename = argv[i + 1];
+ bWriteCorrect = sal_True;
+ i++;
+ }
+ else
+ {
+ fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] );
+ bError = sal_True;
+ }
+ else
+ bWriteCorrect = sal_True;
+ else if ( (*(argv[ i ]+2)) == 'f' )
+ if ( (*(argv[ i ]+3)) == 'f' )
+ if ( (i+1) < argc )
+ {
+ aFixedFilename = argv[i + 1];
+ bWriteFixed = sal_True;
+ bFixTags = sal_True;
+ i++;
+ }
+ else
+ {
+ fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] );
+ bError = sal_True;
+ }
+ else
+ {
+ bWriteFixed = sal_True;
+ bFixTags = sal_True;
+ }
+ else
+ {
+ fprintf( stderr, "\nERROR: Unknown Switch %s!\n\n", argv[ i ] );
+ bError = sal_True;
+ }
+ }
+ break;
+ case 's':bCheckSourceLang = sal_True;
+ break;
+ case 't':bCheckTranslationLang = sal_True;
+ break;
+ case 'l':
+ {
+ if ( (i+1) < argc )
+ {
+ aSourceLang = argv[ i+1 ];
+ if ( aSourceLang.equalsIgnoreAsciiCaseL(RTL_CONSTASCII_STRINGPARAM("none")) )
+ aSourceLang = rtl::OString();
+ i++;
+ }
+ else
+ {
+ fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] );
+ bError = sal_True;
+ }
+ }
+ break;
+ case 'r':
+ {
+ if ( (i+1) < argc )
+ {
+ aReferenceFilename = argv[ i+1 ];
+ bReferenceFile = sal_True;
+ i++;
+ }
+ else
+ {
+ fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] );
+ bError = sal_True;
+ }
+ }
+ break;
+ case 'f':
+ {
+ bFixTags = sal_True;
+ }
+ break;
+ case 'e':
+ {
+ bAllowSuspicious = sal_True;
+ }
+ break;
+ default:
+ fprintf( stderr, "\nERROR: Unknown Switch %s!\n\n", argv[ i ] );
+ bError = sal_True;
+ }
+ }
+ else
+ {
+ if (aFilename.isEmpty())
+ aFilename = argv[i];
+ else
+ {
+ fprintf( stderr, "\nERROR: Only one filename may be specified!\n\n");
+ bError = sal_True;
+ }
+ }
+ }
+
+
+ if (aFilename.isEmpty() || bError)
+ {
+ Help();
+ exit ( 0 );
+ }
+
+ if ( !aSourceLang.isEmpty() && !LanguageOK( aSourceLang ) )
+ {
+ fprintf( stderr, "\nERROR: The Language '%s' is invalid!\n\n", aSourceLang.getStr() );
+ Help();
+ exit ( 1 );
+ }
- if ( !pGSILine->data_.isEmpty() )
+ if ( bCheckSourceLang && bCheckTranslationLang )
{
- if ( FORMAT_UNKNOWN == pGSILine->GetLineFormat() )
+ fprintf( stderr, "\nERROR: The Options -s and -t are mutually exclusive.\nUse only one of them.\n\n" );
+ Help();
+ exit ( 1 );
+ }
+
+
+
+ std::ifstream aGSI(aFilename.getStr());
+ if (!aGSI.is_open()) {
+ fprintf( stderr, "\nERROR: Could not open GSI-File %s!\n\n", aFilename.getStr() );
+ exit ( 3 );
+ }
+
+ std::ifstream aReferenceGSI;
+ if ( bReferenceFile )
+ {
+ aReferenceGSI.open(aReferenceFilename.getStr());
+ if (!aReferenceGSI.is_open()) {
+ fprintf( stderr, "\nERROR: Could not open Input-File %s!\n\n", aFilename.getStr() );
+ exit ( 3 );
+ }
+ }
+
+ LazyStream aOkOut;
+ if ( bWriteCorrect )
+ {
+ if (aCorrectFilename.isEmpty())
{
- PrintError( "Format of line is unknown. Ignoring!", "Line format", pGSILine->data_.copy( 0,40 ), sal_True, pGSILine->GetLineNumber() );
- bFileHasError = sal_True;
- pGSILine->NotOK();
+ aCorrectFilename = addSuffix(
+ aFilename, rtl::OString(RTL_CONSTASCII_STRINGPARAM("_ok")));
}
- else if ( !(pGSILine->GetLineType().equalsIgnoreAsciiCaseL(RTL_CONSTASCII_STRINGPARAM("res-comment"))) )
+ aOkOut.SetFileName(aCorrectFilename);
+ }
+
+ LazyStream aErrOut;
+ if ( bWriteError )
+ {
+ if (aErrorFilename.isEmpty())
+ {
+ aErrorFilename = addSuffix(
+ aFilename, rtl::OString(RTL_CONSTASCII_STRINGPARAM("_err")));
+ }
+ aErrOut.SetFileName(aErrorFilename);
+ }
+
+ LazyStream aFixOut;
+ if ( bWriteFixed )
+ {
+ if (aFixedFilename.isEmpty())
+ {
+ aFixedFilename = addSuffix(
+ aFilename, rtl::OString(RTL_CONSTASCII_STRINGPARAM("_fix")));
+ }
+ aFixOut.SetFileName(aFixedFilename);
+ }
+
+
+ GSILine* pReferenceLine = NULL;
+ std::size_t nReferenceLine = 0;
+
+ GSILine* pGSILine = NULL;
+ rtl::OString aOldId("No Valid ID"); // just set to something which can never be an ID
+ GSIBlock *pBlock = NULL;
+ std::size_t nLine = 0;
+
+ while (!aGSI.eof())
+ {
+ std::string s;
+ std::getline(aGSI, s);
+ nLine++;
+ pGSILine = new GSILine(rtl::OString(s.data(), s.length()), nLine );
+ sal_Bool bDelete = sal_True;
+
+
+ if ( !pGSILine->data_.isEmpty() )
{
- pBlock = new GSIBlock( sal_True, sal_False, sal_False, sal_False, sal_False );
- pBlock->InsertLine( pGSILine, rtl::OString() );
- bFileHasError |= pBlock->CheckSyntax( nLine, sal_False, sal_False );
- if (pBlock!=NULL)
+ if ( FORMAT_UNKNOWN == pGSILine->GetLineFormat() )
{
- delete pBlock;
- pBlock=NULL;
- pGSILine=NULL;
+ PrintError( "Format of line is unknown. Ignoring!", "Line format", pGSILine->data_.copy( 0,40 ), bPrintContext, pGSILine->GetLineNumber() );
+ pGSILine->NotOK();
+ if ( bWriteError )
+ {
+ bFileHasError = sal_True;
+ aErrOut.LazyOpen();
+ aErrOut << pGSILine->data_.getStr();
+ }
+ }
+ else if ( pGSILine->GetLineType().equalsIgnoreAsciiCaseL(RTL_CONSTASCII_STRINGPARAM("res-comment")) )
+ { // ignore comment lines, but write them to Correct Items File
+ if ( bWriteCorrect )
+ {
+ aOkOut.LazyOpen();
+ aOkOut << pGSILine->data_.getStr() << '\n';
+ }
+ }
+ else
+ {
+ rtl::OString aId = pGSILine->GetUniqId();
+ if ( aId != aOldId )
+ {
+ if ( pBlock )
+ {
+ bFileHasError |= pBlock->CheckSyntax( nLine, !aSourceLang.isEmpty(), bFixTags );
+
+ if ( bWriteError )
+ pBlock->WriteError( aErrOut, !aSourceLang.isEmpty() );
+ if ( bWriteCorrect )
+ pBlock->WriteCorrect( aOkOut, !aSourceLang.isEmpty() );
+ if ( bWriteFixed )
+ pBlock->WriteFixed( aFixOut );
+
+ delete pBlock;
+ }
+ pBlock = new GSIBlock( bPrintContext, bCheckSourceLang, bCheckTranslationLang, bReferenceFile, bAllowSuspicious );
+
+ aOldId = aId;
+
+
+ // find corresponding line in reference file
+ if ( bReferenceFile )
+ {
+ sal_Bool bContinueSearching = sal_True;
+ while ( ( !aReferenceGSI.eof() || pReferenceLine ) && bContinueSearching )
+ {
+ if ( !pReferenceLine )
+ {
+ std::string s2;
+ std::getline(aReferenceGSI, s2);
+ nReferenceLine++;
+ pReferenceLine = new GSILine(
+ rtl::OString(s2.data(), s2.length()),
+ nReferenceLine);
+ }
+ if ( pReferenceLine->GetLineFormat() != FORMAT_UNKNOWN )
+ {
+ if ( pReferenceLine->GetUniqId() == aId && pReferenceLine->GetLanguageId() == aSourceLang )
+ {
+ pBlock->SetReferenceLine( pReferenceLine );
+ pReferenceLine = NULL;
+ }
+ else if ( pReferenceLine->GetUniqId() > aId )
+ {
+ bContinueSearching = sal_False;
+ }
+ else
+ {
+ if ( pReferenceLine->GetUniqId() < aId && pReferenceLine->GetLanguageId() == aSourceLang )
+ PrintError( "No Entry in source file found. Entry has been removed from source file", "File format", "", bPrintContext, pGSILine->GetLineNumber(), pReferenceLine->GetUniqId() );
+ delete pReferenceLine;
+ pReferenceLine = NULL;
+ }
+ }
+ else
+ {
+ delete pReferenceLine;
+ pReferenceLine = NULL;
+ }
+
+ }
+ }
+
+ }
+
+ pBlock->InsertLine( pGSILine, aSourceLang );
+ bDelete = sal_False;
}
}
+ if ( bDelete )
+ delete pGSILine;
+
}
- delete pGSILine;
+ if ( pBlock )
+ {
+ bFileHasError |= pBlock->CheckSyntax( nLine, !aSourceLang.isEmpty(), bFixTags );
+
+ if ( bWriteError )
+ pBlock->WriteError( aErrOut, !aSourceLang.isEmpty() );
+ if ( bWriteCorrect )
+ pBlock->WriteCorrect( aOkOut, !aSourceLang.isEmpty() );
+ if ( bWriteFixed )
+ pBlock->WriteFixed( aFixOut );
+
+ delete pBlock;
+ }
+ aGSI.close();
+
+ if ( bWriteError )
+ aErrOut.close();
+ if ( bWriteCorrect )
+ aOkOut.close();
+ if ( bWriteFixed )
+ aFixOut.close();
+
if ( bFileHasError )
- return false;
+ return 55;
else
- return true;
+ return 0;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/l10ntools/source/gsimain.cxx b/l10ntools/source/gsimain.cxx
deleted file mode 100644
index 7558731ee4c3..000000000000
--- a/l10ntools/source/gsimain.cxx
+++ /dev/null
@@ -1,456 +0,0 @@
-/* -*- 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
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "sal/config.h"
-
-#include <algorithm>
-#include <cassert>
-#include <cstddef>
-#include <fstream>
-#include <string>
-
-#include <stdio.h>
-
-#include <rtl/strbuf.hxx>
-#include "sal/main.h"
-#include "helper.hxx"
-#include "tagtest.hxx"
-#include "gsicheck.hxx"
-
-namespace {
-
-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 Help()
-{
- fprintf( stdout, "\n" );
- fprintf( stdout, "gsicheck checks the syntax of tags in SDF-Files\n" );
- fprintf( stdout, " checks for inconsistencies and malicious UTF8 encoding\n" );
- fprintf( stdout, " checks tags in Online Help\n" );
- fprintf( stdout, " relax GID/LID length to %s\n",
- rtl::OString::valueOf(static_cast<sal_Int32>(MAX_GID_LID_LEN)).getStr() );
- fprintf( stdout, "\n" );
- fprintf( stdout, "Syntax: gsicheck [ -c ] [-f] [ -we ] [ -wef ErrorFilename ] [ -wc ]\n" );
- fprintf( stdout, " [ -wcf CorrectFilename ] [ -s | -t ] [ -l LanguageID ]\n" );
- fprintf( stdout, " [ -r ReferenceFile ] filename\n" );
- fprintf( stdout, "\n" );
- fprintf( stdout, "-c Add context to error message (Print the line containing the error)\n" );
- fprintf( stdout, "-f try to fix errors. See also -wf -wff \n" );
- fprintf( stdout, "-wf Write File containing all fixed parts\n" );
- fprintf( stdout, "-wff Same as above but give own filename\n" );
- fprintf( stdout, "-we Write File containing all errors\n" );
- fprintf( stdout, "-wef Same as above but give own filename\n" );
- fprintf( stdout, "-wc Write File containing all correct parts\n" );
- fprintf( stdout, "-wcf Same as above but give own filename\n" );
- fprintf( stdout, "-s Check only source language. Should be used before handing out to vendor.\n" );
- fprintf( stdout, "-t Check only Translation language(s). Should be used before merging.\n" );
- fprintf( stdout, "-e disable encoding checks. E.g.: double questionmark \'??\' which may be the\n" );
- fprintf( stdout, " result of false conversions\n" );
- fprintf( stdout, "-l ISO language code of the source language.\n" );
- fprintf( stdout, " Default is en-US. Use \"\" (empty string) or 'none'\n" );
- fprintf( stdout, " to disable source language dependent checks\n" );
- fprintf( stdout, "-r Reference filename to check that source language entries\n" );
- fprintf( stdout, " have not been changed\n" );
- fprintf( stdout, "\n" );
-}
-
-SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
- sal_Bool bError = sal_False;
- sal_Bool bPrintContext = sal_False;
- sal_Bool bCheckSourceLang = sal_False;
- sal_Bool bCheckTranslationLang = sal_False;
- sal_Bool bWriteError = sal_False;
- sal_Bool bWriteCorrect = sal_False;
- sal_Bool bWriteFixed = sal_False;
- sal_Bool bFixTags = sal_False;
- sal_Bool bAllowSuspicious = sal_False;
- 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 ( int i = 1 ; i < argc ; i++ )
- {
- if ( *argv[ i ] == '-' )
- {
- switch (*(argv[ i ]+1))
- {
- case 'c':bPrintContext = sal_True;
- break;
- case 'w':
- {
- if ( (*(argv[ i ]+2)) == 'e' )
- {
- if ( (*(argv[ i ]+3)) == 'f' )
- if ( (i+1) < argc )
- {
- aErrorFilename = argv[i + 1];
- bWriteError = sal_True;
- i++;
- }
- else
- {
- fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] );
- bError = sal_True;
- }
- else
- bWriteError = sal_True;
- }
- else if ( (*(argv[ i ]+2)) == 'c' )
- if ( (*(argv[ i ]+3)) == 'f' )
- if ( (i+1) < argc )
- {
- aCorrectFilename = argv[i + 1];
- bWriteCorrect = sal_True;
- i++;
- }
- else
- {
- fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] );
- bError = sal_True;
- }
- else
- bWriteCorrect = sal_True;
- else if ( (*(argv[ i ]+2)) == 'f' )
- if ( (*(argv[ i ]+3)) == 'f' )
- if ( (i+1) < argc )
- {
- aFixedFilename = argv[i + 1];
- bWriteFixed = sal_True;
- bFixTags = sal_True;
- i++;
- }
- else
- {
- fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] );
- bError = sal_True;
- }
- else
- {
- bWriteFixed = sal_True;
- bFixTags = sal_True;
- }
- else
- {
- fprintf( stderr, "\nERROR: Unknown Switch %s!\n\n", argv[ i ] );
- bError = sal_True;
- }
- }
- break;
- case 's':bCheckSourceLang = sal_True;
- break;
- case 't':bCheckTranslationLang = sal_True;
- break;
- case 'l':
- {
- if ( (i+1) < argc )
- {
- aSourceLang = argv[ i+1 ];
- if ( aSourceLang.equalsIgnoreAsciiCaseL(RTL_CONSTASCII_STRINGPARAM("none")) )
- aSourceLang = rtl::OString();
- i++;
- }
- else
- {
- fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] );
- bError = sal_True;
- }
- }
- break;
- case 'r':
- {
- if ( (i+1) < argc )
- {
- aReferenceFilename = argv[ i+1 ];
- bReferenceFile = sal_True;
- i++;
- }
- else
- {
- fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] );
- bError = sal_True;
- }
- }
- break;
- case 'f':
- {
- bFixTags = sal_True;
- }
- break;
- case 'e':
- {
- bAllowSuspicious = sal_True;
- }
- break;
- default:
- fprintf( stderr, "\nERROR: Unknown Switch %s!\n\n", argv[ i ] );
- bError = sal_True;
- }
- }
- else
- {
- if (aFilename.isEmpty())
- aFilename = argv[i];
- else
- {
- fprintf( stderr, "\nERROR: Only one filename may be specified!\n\n");
- bError = sal_True;
- }
- }
- }
-
-
- if (aFilename.isEmpty() || bError)
- {
- Help();
- exit ( 0 );
- }
-
- if ( !aSourceLang.isEmpty() && !LanguageOK( aSourceLang ) )
- {
- fprintf( stderr, "\nERROR: The Language '%s' is invalid!\n\n", aSourceLang.getStr() );
- Help();
- exit ( 1 );
- }
-
- if ( bCheckSourceLang && bCheckTranslationLang )
- {
- fprintf( stderr, "\nERROR: The Options -s and -t are mutually exclusive.\nUse only one of them.\n\n" );
- Help();
- exit ( 1 );
- }
-
-
-
- std::ifstream aGSI(aFilename.getStr());
- if (!aGSI.is_open()) {
- fprintf( stderr, "\nERROR: Could not open GSI-File %s!\n\n", aFilename.getStr() );
- exit ( 3 );
- }
-
- std::ifstream aReferenceGSI;
- if ( bReferenceFile )
- {
- aReferenceGSI.open(aReferenceFilename.getStr());
- if (!aReferenceGSI.is_open()) {
- fprintf( stderr, "\nERROR: Could not open Input-File %s!\n\n", aFilename.getStr() );
- exit ( 3 );
- }
- }
-
- LazyStream aOkOut;
- if ( bWriteCorrect )
- {
- if (aCorrectFilename.isEmpty())
- {
- aCorrectFilename = addSuffix(
- aFilename, rtl::OString(RTL_CONSTASCII_STRINGPARAM("_ok")));
- }
- aOkOut.SetFileName(aCorrectFilename);
- }
-
- LazyStream aErrOut;
- if ( bWriteError )
- {
- if (aErrorFilename.isEmpty())
- {
- aErrorFilename = addSuffix(
- aFilename, rtl::OString(RTL_CONSTASCII_STRINGPARAM("_err")));
- }
- aErrOut.SetFileName(aErrorFilename);
- }
-
- LazyStream aFixOut;
- if ( bWriteFixed )
- {
- if (aFixedFilename.isEmpty())
- {
- aFixedFilename = addSuffix(
- aFilename, rtl::OString(RTL_CONSTASCII_STRINGPARAM("_fix")));
- }
- aFixOut.SetFileName(aFixedFilename);
- }
-
-
- GSILine* pReferenceLine = NULL;
- std::size_t nReferenceLine = 0;
-
- GSILine* pGSILine = NULL;
- rtl::OString aOldId("No Valid ID"); // just set to something which can never be an ID
- GSIBlock *pBlock = NULL;
- std::size_t nLine = 0;
-
- while (!aGSI.eof())
- {
- std::string s;
- std::getline(aGSI, s);
- nLine++;
-
- pGSILine = new GSILine(rtl::OString(s.data(), s.length()), nLine );
- sal_Bool bDelete = sal_True;
-
- if ( !pGSILine->data_.isEmpty() )
- {
- if ( FORMAT_UNKNOWN == pGSILine->GetLineFormat() )
- {
- PrintError( "Format of line is unknown. Ignoring!", "Line format", pGSILine->data_.copy( 0,40 ), bPrintContext, pGSILine->GetLineNumber() );
- pGSILine->NotOK();
- if ( bWriteError )
- {
- bFileHasError = sal_True;
- aErrOut.LazyOpen();
- aErrOut << pGSILine->data_.getStr();
- }
- }
- else if ( pGSILine->GetLineType().equalsIgnoreAsciiCaseL(RTL_CONSTASCII_STRINGPARAM("res-comment")) )
- { // ignore comment lines, but write them to Correct Items File
- if ( bWriteCorrect )
- {
- aOkOut.LazyOpen();
- aOkOut << pGSILine->data_.getStr() << '\n';
- }
- }
- else
- {
- rtl::OString aId = pGSILine->GetUniqId();
- if ( aId != aOldId )
- {
- if ( pBlock )
- {
- bFileHasError |= pBlock->CheckSyntax( nLine, !aSourceLang.isEmpty(), bFixTags );
-
- if ( bWriteError )
- pBlock->WriteError( aErrOut, !aSourceLang.isEmpty() );
- if ( bWriteCorrect )
- pBlock->WriteCorrect( aOkOut, !aSourceLang.isEmpty() );
- if ( bWriteFixed )
- pBlock->WriteFixed( aFixOut );
-
- delete pBlock;
- }
- pBlock = new GSIBlock( bPrintContext, bCheckSourceLang, bCheckTranslationLang, bReferenceFile, bAllowSuspicious );
-
- aOldId = aId;
-
- // find corresponding line in reference file
- if ( bReferenceFile )
- {
- sal_Bool bContinueSearching = sal_True;
- while ( ( !aReferenceGSI.eof() || pReferenceLine ) && bContinueSearching )
- {
- if ( !pReferenceLine )
- {
- std::string s2;
- std::getline(aReferenceGSI, s2);
- nReferenceLine++;
- pReferenceLine = new GSILine(
- rtl::OString(s2.data(), s2.length()),
- nReferenceLine);
- }
- if ( pReferenceLine->GetLineFormat() != FORMAT_UNKNOWN )
- {
- if ( pReferenceLine->GetUniqId() == aId && pReferenceLine->GetLanguageId() == aSourceLang )
- {
- pBlock->SetReferenceLine( pReferenceLine );
- pReferenceLine = NULL;
- }
- else if ( pReferenceLine->GetUniqId() > aId )
- {
- bContinueSearching = sal_False;
- }
- else
- {
- if ( pReferenceLine->GetUniqId() < aId && pReferenceLine->GetLanguageId() == aSourceLang )
- PrintError( "No Entry in source file found. Entry has been removed from source file", "File format", "", bPrintContext, pGSILine->GetLineNumber(), pReferenceLine->GetUniqId() );
- delete pReferenceLine;
- pReferenceLine = NULL;
- }
- }
- else
- {
- delete pReferenceLine;
- pReferenceLine = NULL;
- }
-
- }
- }
-
- }
- pBlock->InsertLine( pGSILine, aSourceLang );
- bDelete = sal_False;
- }
- }
- if ( bDelete )
- delete pGSILine;
- }
- if ( pBlock )
- {
- bFileHasError |= pBlock->CheckSyntax( nLine, !aSourceLang.isEmpty(), bFixTags );
-
- if ( bWriteError )
- pBlock->WriteError( aErrOut, !aSourceLang.isEmpty() );
- if ( bWriteCorrect )
- pBlock->WriteCorrect( aOkOut, !aSourceLang.isEmpty() );
- if ( bWriteFixed )
- pBlock->WriteFixed( aFixOut );
-
- delete pBlock;
- }
- aGSI.close();
-
- if ( bWriteError )
- aErrOut.close();
- if ( bWriteCorrect )
- aOkOut.close();
- if ( bWriteFixed )
- aFixOut.close();
- if ( bFileHasError )
- return 55;
- else
- return 0;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/l10ntools/source/helpmerge.cxx b/l10ntools/source/helpmerge.cxx
index cbf38fb9e809..2d4435c5e74c 100644
--- a/l10ntools/source/helpmerge.cxx
+++ b/l10ntools/source/helpmerge.cxx
@@ -52,7 +52,6 @@
#include "common.hxx"
#include "helper.hxx"
-#include "gsicheck.hxx"
#if OSL_DEBUG_LEVEL > 2
void HelpParser::Dump(XMLHashMap* rElem_in)
@@ -396,12 +395,9 @@ void HelpParser::ProcessHelp( LangHashMap* aLangHM , const rtl::OString& sCur ,
{
if( pXMLElement != NULL )
{
- if (check(pEntrys->GetSDF(sCur),pEntrys->GetNLine(sCur)))
- {
- data = new XMLData( sNewdata , NULL , true ); // Add new one
- pXMLElement->RemoveAndDeleteAllChildren();
- pXMLElement->AddChild( data );
- }
+ data = new XMLData( sNewdata , NULL , true ); // Add new one
+ pXMLElement->RemoveAndDeleteAllChildren();
+ pXMLElement->AddChild( data );
aLangHM->erase( sCur );
}
}
diff --git a/l10ntools/source/merge.cxx b/l10ntools/source/merge.cxx
index 4d5d3f6bbc1e..f74bdc0ea22c 100644
--- a/l10ntools/source/merge.cxx
+++ b/l10ntools/source/merge.cxx
@@ -151,7 +151,6 @@ MergeDataFile::MergeDataFile(
printf("Warning : Can't open %s\n", rFileName.getStr());
return;
}
- std::size_t nLine=0;
while (!aInputStream.eof())
{
std::string buf;
@@ -172,12 +171,11 @@ MergeDataFile::MergeDataFile(
const rtl::OString sTEXT = sLine.getToken( 0, '\t', n ); // token 10
const rtl::OString sQHTEXT = sLine.getToken( 1, '\t', n ); // token 12
const rtl::OString sTITLE = sLine.getToken( 0, '\t', n ); // token 13
- const rtl::OString sSDF(buf.data(),buf.length());
if (!nLANG.equalsIgnoreAsciiCaseL(RTL_CONSTASCII_STRINGPARAM("en-US")))
{
aLanguageSet.insert(nLANG);
- InsertEntry( sTYP, sGID, sLID, sPFO, nLANG, sTEXT, sQHTEXT, sTITLE, filename, bCaseSensitive, sSDF, ++nLine);
+ InsertEntry( sTYP, sGID, sLID, sPFO, nLANG, sTEXT, sQHTEXT, sTITLE, filename, bCaseSensitive );
}
}
}
@@ -245,8 +243,7 @@ void MergeDataFile::InsertEntry(
const rtl::OString &rLID, const rtl::OString &rPFO,
const rtl::OString &nLANG, const rtl::OString &rTEXT,
const rtl::OString &rQHTEXT, const rtl::OString &rTITLE ,
- const rtl::OString &rInFilename , bool bCaseSensitive,
- const rtl::OString &rSDFLine, const std::size_t nLine
+ const rtl::OString &rInFilename , bool bCaseSensitive
)
{
MergeData *pData;
@@ -277,7 +274,7 @@ void MergeDataFile::InsertEntry(
}
// finaly insert the cur string
- pFEntrys->InsertEntry( nLANG , rTEXT, rQHTEXT, rTITLE, rSDFLine, nLine );
+ pFEntrys->InsertEntry( nLANG , rTEXT, rQHTEXT, rTITLE );
}
rtl::OString MergeDataFile::CreateKey(const rtl::OString& rTYP, const rtl::OString& rGID,