gsicheck.cxx (3cd96b95) | gsicheck.cxx (3adb8b6e) |
---|---|
1/************************************************************** | 1/************************************************************** |
2 * | 2 * |
3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at | 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at |
10 * | 10 * |
11 * http://www.apache.org/licenses/LICENSE-2.0 | 11 * http://www.apache.org/licenses/LICENSE-2.0 |
12 * | 12 * |
13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. | 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. |
19 * | 19 * |
20 *************************************************************/ 21 22 23 24// MARKER(update_precomp.py): autogen include statement, do not remove 25#include "precompiled_l10ntools.hxx" 26#include <stdio.h> 27#include <tools/fsys.hxx> --- 21 unchanged lines hidden (view full) --- 49 fprintf( stdout, "\n" ); 50} 51 52/*****************************************************************************/ 53void PrintError( ByteString aMsg, ByteString aPrefix, 54 ByteString aContext, sal_Bool bPrintContext, sal_uLong nLine, ByteString aUniqueId = ByteString() ) 55/*****************************************************************************/ 56{ | 20 *************************************************************/ 21 22 23 24// MARKER(update_precomp.py): autogen include statement, do not remove 25#include "precompiled_l10ntools.hxx" 26#include <stdio.h> 27#include <tools/fsys.hxx> --- 21 unchanged lines hidden (view full) --- 49 fprintf( stdout, "\n" ); 50} 51 52/*****************************************************************************/ 53void PrintError( ByteString aMsg, ByteString aPrefix, 54 ByteString aContext, sal_Bool bPrintContext, sal_uLong nLine, ByteString aUniqueId = ByteString() ) 55/*****************************************************************************/ 56{ |
57 PrintMessage( "Error:", aMsg, aPrefix, aContext, bPrintContext, nLine, aUniqueId ); | 57 PrintMessage( "Error:", aMsg, aPrefix, aContext, bPrintContext, nLine, aUniqueId ); |
58} 59 60sal_Bool LanguageOK( ByteString aLang ) 61{ | 58} 59 60sal_Bool LanguageOK( ByteString aLang ) 61{ |
62 if ( !aLang.Len() ) 63 return sal_False; | 62 if ( !aLang.Len() ) 63 return sal_False; |
64 | 64 |
65 if ( aLang.IsNumericAscii() ) 66 return sal_True; | 65 if ( aLang.IsNumericAscii() ) 66 return sal_True; |
67 | 67 |
68 if ( aLang.GetTokenCount( '-' ) == 1 ) 69 return aLang.IsAlphaAscii() && aLang.IsLowerAscii(); 70 else if ( aLang.GetTokenCount( '-' ) == 2 ) 71 { 72 ByteString aTok0( aLang.GetToken( 0, '-' ) ); 73 ByteString aTok1( aLang.GetToken( 1, '-' ) ); 74 return aTok0.Len() && aTok0.IsAlphaAscii() && aTok0.IsLowerAscii() 75 && aTok1.Len() && aTok1.IsAlphaAscii() && aTok1.IsUpperAscii() 76 && !aTok1.EqualsIgnoreCaseAscii( aTok0 ); 77 } | 68 if ( aLang.GetTokenCount( '-' ) == 1 ) 69 return aLang.IsAlphaAscii() && aLang.IsLowerAscii(); 70 else if ( aLang.GetTokenCount( '-' ) == 2 ) 71 { 72 ByteString aTok0( aLang.GetToken( 0, '-' ) ); 73 ByteString aTok1( aLang.GetToken( 1, '-' ) ); 74 return aTok0.Len() && aTok0.IsAlphaAscii() && aTok0.IsLowerAscii() 75 && aTok1.Len() && aTok1.IsAlphaAscii() && aTok1.IsUpperAscii() 76 && !aTok1.EqualsIgnoreCaseAscii( aTok0 ); 77 } |
78 | 78 |
79 return sal_False; | 79 return sal_False; |
80} 81 82 83// 84// class LazySvFileStream 85// 86 87 88class LazySvFileStream : public SvFileStream 89{ 90 91private: | 80} 81 82 83// 84// class LazySvFileStream 85// 86 87 88class LazySvFileStream : public SvFileStream 89{ 90 91private: |
92 String aFileName; 93 sal_Bool bOpened; 94 StreamMode eOpenMode; | 92 String aFileName; 93 sal_Bool bOpened; 94 StreamMode eOpenMode; |
95 96public: | 95 96public: |
97 LazySvFileStream() 98 : aFileName() 99 , bOpened( sal_False ) 100 , eOpenMode( 0 ) 101 {}; | 97 LazySvFileStream() 98 : aFileName() 99 , bOpened( sal_False ) 100 , eOpenMode( 0 ) 101 {}; |
102 | 102 |
103 void SetOpenParams( const String& rFileName, StreamMode eOpenModeP ) 104 { 105 aFileName = rFileName; 106 eOpenMode = eOpenModeP; 107 }; | 103 void SetOpenParams( const String& rFileName, StreamMode eOpenModeP ) 104 { 105 aFileName = rFileName; 106 eOpenMode = eOpenModeP; 107 }; |
108 | 108 |
109 void LazyOpen(); | 109 void LazyOpen(); |
110}; 111 112void LazySvFileStream::LazyOpen() 113{ | 110}; 111 112void LazySvFileStream::LazyOpen() 113{ |
114 if ( !bOpened ) 115 { 116 Open( aFileName, eOpenMode ); 117 if ( !IsOpen()) 118 { 119 fprintf( stderr, "\nERROR: Could not open Output-File %s!\n\n", ByteString( aFileName, RTL_TEXTENCODING_ASCII_US ).GetBuffer() ); 120 exit ( 4 ); 121 } 122 bOpened = sal_True; 123 } | 114 if ( !bOpened ) 115 { 116 Open( aFileName, eOpenMode ); 117 if ( !IsOpen()) 118 { 119 fprintf( stderr, "\nERROR: Could not open Output-File %s!\n\n", ByteString( aFileName, RTL_TEXTENCODING_ASCII_US ).GetBuffer() ); 120 exit ( 4 ); 121 } 122 bOpened = sal_True; 123 } |
124} 125 126 127// 128// class GSILine 129// 130 131/*****************************************************************************/ 132GSILine::GSILine( const ByteString &rLine, sal_uLong nLine ) 133/*****************************************************************************/ 134 : ByteString( rLine ) 135 , nLineNumber( nLine ) 136 , bOK( sal_True ) | 124} 125 126 127// 128// class GSILine 129// 130 131/*****************************************************************************/ 132GSILine::GSILine( const ByteString &rLine, sal_uLong nLine ) 133/*****************************************************************************/ 134 : ByteString( rLine ) 135 , nLineNumber( nLine ) 136 , bOK( sal_True ) |
137 , bFixed ( sal_False ) | 137 , bFixed ( sal_False ) |
138{ | 138{ |
139 if ( rLine.GetTokenCount( '\t' ) == 15 ) 140 { 141 aFormat = FORMAT_SDF; 142 aUniqId = rLine.GetToken( 0, '\t' ); 143 aUniqId.Append("/").Append( rLine.GetToken( 1, '\t' ) ).Append("/").Append( rLine.GetToken( 3, '\t' ) ).Append("/").Append( rLine.GetToken( 4, '\t' ) ).Append("/").Append( rLine.GetToken( 5, '\t' ) ).Append("/").Append( rLine.GetToken( 6, '\t' ) ).Append("/").Append( rLine.GetToken( 7, '\t' ) ); 144 aLineType = ""; 145 aLangId = rLine.GetToken( 9, '\t' ); 146 aText = rLine.GetToken( 10, '\t' ); 147 aQuickHelpText = rLine.GetToken( 12, '\t' ); 148 aTitle = rLine.GetToken( 13, '\t' ); | 139 if ( rLine.GetTokenCount( '\t' ) == 15 ) 140 { 141 aFormat = FORMAT_SDF; 142 aUniqId = rLine.GetToken( 0, '\t' ); 143 aUniqId.Append("/").Append( rLine.GetToken( 1, '\t' ) ).Append("/").Append( rLine.GetToken( 3, '\t' ) ).Append("/").Append( rLine.GetToken( 4, '\t' ) ).Append("/").Append( rLine.GetToken( 5, '\t' ) ).Append("/").Append( rLine.GetToken( 6, '\t' ) ).Append("/").Append( rLine.GetToken( 7, '\t' ) ); 144 aLineType = ""; 145 aLangId = rLine.GetToken( 9, '\t' ); 146 aText = rLine.GetToken( 10, '\t' ); 147 aQuickHelpText = rLine.GetToken( 12, '\t' ); 148 aTitle = rLine.GetToken( 13, '\t' ); |
149 | 149 |
150 // do some more format checks here 151 if ( !rLine.GetToken( 8, '\t' ).IsNumericAscii() ) 152 { 153 PrintError( "The length field does not contain a number!", "Line format", rLine.GetToken( 8, '\t' ), sal_True, GetLineNumber(), GetUniqId() ); 154 NotOK(); 155 } 156 if ( !LanguageOK( aLangId ) ) 157 { 158 PrintError( "The Language is invalid!", "Line format", aLangId, sal_True, GetLineNumber(), GetUniqId() ); 159 NotOK(); 160 } 161 // limit GID and LID to MAX_GID_LID_LEN chars each for database conformity, see #137575# 162 if ( rLine.GetToken( 4, '\t' ).Len() > MAX_GID_LID_LEN || rLine.GetToken( 5, '\t' ).Len() > MAX_GID_LID_LEN ) 163 { | 150 // do some more format checks here 151 if ( !rLine.GetToken( 8, '\t' ).IsNumericAscii() ) 152 { 153 PrintError( "The length field does not contain a number!", "Line format", rLine.GetToken( 8, '\t' ), sal_True, GetLineNumber(), GetUniqId() ); 154 NotOK(); 155 } 156 if ( !LanguageOK( aLangId ) ) 157 { 158 PrintError( "The Language is invalid!", "Line format", aLangId, sal_True, GetLineNumber(), GetUniqId() ); 159 NotOK(); 160 } 161 // limit GID and LID to MAX_GID_LID_LEN chars each for database conformity, see #137575# 162 if ( rLine.GetToken( 4, '\t' ).Len() > MAX_GID_LID_LEN || rLine.GetToken( 5, '\t' ).Len() > MAX_GID_LID_LEN ) 163 { |
164 PrintError( ByteString("GID and LID may only be ").Append( ByteString::CreateFromInt32(MAX_GID_LID_LEN) ).Append( " chars long each!" ), "Line format", aLangId, sal_True, GetLineNumber(), GetUniqId() ); | 164 PrintError( ByteString("GID and LID may only be ").Append( ByteString::CreateFromInt32(MAX_GID_LID_LEN) ).Append( " chars long each!" ), "Line format", aLangId, sal_True, GetLineNumber(), GetUniqId() ); |
165 NotOK(); 166 } 167 } 168 else // allow tabs in gsi files 169 { 170 aFormat = FORMAT_GSI; 171 ByteString sTmp( rLine ); 172 sal_uInt16 nPos = sTmp.Search( "($$)" ); 173 sal_uInt16 nStart = 0; 174 if ( nPos != STRING_NOTFOUND ) 175 { 176 aUniqId = sTmp.Copy( nStart, nPos - nStart ); 177 nStart = nPos + 4; // + length of the delemiter 178 nPos = sTmp.Search( "($$)", nStart ); 179 } 180 if ( nPos != STRING_NOTFOUND ) 181 { 182 aLineType = sTmp.Copy( nStart, nPos - nStart ); 183 nStart = nPos + 4; // + length of the delemiter 184 nPos = sTmp.Search( "($$)", nStart ); 185 aUniqId.Append( "/" ); 186 aUniqId.Append( aLineType ); 187 } 188 if ( nPos != STRING_NOTFOUND ) 189 { 190 aLangId = sTmp.Copy( nStart, nPos - nStart ); 191 nStart = nPos + 4; // + length of the delemiter 192 nPos = sTmp.Search( "($$)", nStart ); 193 } 194 if ( nPos != STRING_NOTFOUND ) 195 { 196// ByteString aStatus = sTmp.Copy( nStart, nPos - nStart ); // ext int ... 197 nStart = nPos + 4; // + length of the delemiter 198 } 199 if ( nPos != STRING_NOTFOUND ) 200 aText = sTmp.Copy( nStart ); 201 else 202 aFormat = FORMAT_UNKNOWN; 203 } | 165 NotOK(); 166 } 167 } 168 else // allow tabs in gsi files 169 { 170 aFormat = FORMAT_GSI; 171 ByteString sTmp( rLine ); 172 sal_uInt16 nPos = sTmp.Search( "($$)" ); 173 sal_uInt16 nStart = 0; 174 if ( nPos != STRING_NOTFOUND ) 175 { 176 aUniqId = sTmp.Copy( nStart, nPos - nStart ); 177 nStart = nPos + 4; // + length of the delimiter 178 nPos = sTmp.Search( "($$)", nStart ); 179 } 180 if ( nPos != STRING_NOTFOUND ) 181 { 182 aLineType = sTmp.Copy( nStart, nPos - nStart ); 183 nStart = nPos + 4; // + length of the delimiter 184 nPos = sTmp.Search( "($$)", nStart ); 185 aUniqId.Append( "/" ); 186 aUniqId.Append( aLineType ); 187 } 188 if ( nPos != STRING_NOTFOUND ) 189 { 190 aLangId = sTmp.Copy( nStart, nPos - nStart ); 191 nStart = nPos + 4; // + length of the delimiter 192 nPos = sTmp.Search( "($$)", nStart ); 193 } 194 if ( nPos != STRING_NOTFOUND ) 195 { 196// ByteString aStatus = sTmp.Copy( nStart, nPos - nStart ); // ext int ... 197 nStart = nPos + 4; // + length of the delimiter 198 } 199 if ( nPos != STRING_NOTFOUND ) 200 aText = sTmp.Copy( nStart ); 201 else 202 aFormat = FORMAT_UNKNOWN; 203 } |
204 | 204 |
205 if ( FORMAT_UNKNOWN == GetLineFormat() ) 206 NotOK(); | 205 if ( FORMAT_UNKNOWN == GetLineFormat() ) 206 NotOK(); |
207} 208 209/*****************************************************************************/ 210void GSILine::NotOK() 211/*****************************************************************************/ 212{ | 207} 208 209/*****************************************************************************/ 210void GSILine::NotOK() 211/*****************************************************************************/ 212{ |
213 bOK = sal_False; | 213 bOK = sal_False; |
214} 215 216/*****************************************************************************/ 217void GSILine::ReassembleLine() 218/*****************************************************************************/ 219{ | 214} 215 216/*****************************************************************************/ 217void GSILine::ReassembleLine() 218/*****************************************************************************/ 219{ |
220 ByteString aReassemble; 221 if ( GetLineFormat() == FORMAT_SDF ) 222 { 223 sal_uInt16 i; 224 for ( i = 0 ; i < 10 ; i++ ) 225 { 226 aReassemble.Append( GetToken( i, '\t' ) ); 227 aReassemble.Append( "\t" ); 228 } 229 aReassemble.Append( aText ); 230 aReassemble.Append( "\t" ); 231 aReassemble.Append( GetToken( 11, '\t' ) ); // should be empty but there are some places in sc. Not reflected to sources!! 232 aReassemble.Append( "\t" ); 233 aReassemble.Append( aQuickHelpText ); 234 aReassemble.Append( "\t" ); 235 aReassemble.Append( aTitle ); 236 for ( i = 14 ; i < 15 ; i++ ) 237 { 238 aReassemble.Append( "\t" ); 239 aReassemble.Append( GetToken( i, '\t' ) ); 240 } 241 *(ByteString*)this = aReassemble; 242 } 243 else if ( GetLineFormat() == FORMAT_GSI ) 244 { 245 sal_uInt16 nPos = Search( "($$)" ); 246 sal_uInt16 nStart = 0; 247 if ( nPos != STRING_NOTFOUND ) 248 { 249 nStart = nPos + 4; // + length of the delemiter 250 nPos = Search( "($$)", nStart ); 251 } 252 if ( nPos != STRING_NOTFOUND ) 253 { 254 nStart = nPos + 4; // + length of the delemiter 255 nPos = Search( "($$)", nStart ); 256 } 257 if ( nPos != STRING_NOTFOUND ) 258 { 259 nStart = nPos + 4; // + length of the delemiter 260 nPos = Search( "($$)", nStart ); 261 } 262 if ( nPos != STRING_NOTFOUND ) 263 { 264 nStart = nPos + 4; // + length of the delemiter 265 } 266 if ( nPos != STRING_NOTFOUND ) 267 { 268 aReassemble = Copy( 0, nStart ); 269 aReassemble += aText; 270 *(ByteString*)this = aReassemble; 271 } 272 else 273 PrintError( "Cannot reassemble GSI line (internal Error).", "Line format", "", sal_False, GetLineNumber(), GetUniqId() ); 274 } 275 else 276 PrintError( "Cannot reassemble line of unknown type (internal Error).", "Line format", "", sal_False, GetLineNumber(), GetUniqId() ); | 220 ByteString aReassemble; 221 if ( GetLineFormat() == FORMAT_SDF ) 222 { 223 sal_uInt16 i; 224 for ( i = 0 ; i < 10 ; i++ ) 225 { 226 aReassemble.Append( GetToken( i, '\t' ) ); 227 aReassemble.Append( "\t" ); 228 } 229 aReassemble.Append( aText ); 230 aReassemble.Append( "\t" ); 231 aReassemble.Append( GetToken( 11, '\t' ) ); // should be empty but there are some places in sc. Not reflected to sources!! 232 aReassemble.Append( "\t" ); 233 aReassemble.Append( aQuickHelpText ); 234 aReassemble.Append( "\t" ); 235 aReassemble.Append( aTitle ); 236 for ( i = 14 ; i < 15 ; i++ ) 237 { 238 aReassemble.Append( "\t" ); 239 aReassemble.Append( GetToken( i, '\t' ) ); 240 } 241 *(ByteString*)this = aReassemble; 242 } 243 else if ( GetLineFormat() == FORMAT_GSI ) 244 { 245 sal_uInt16 nPos = Search( "($$)" ); 246 sal_uInt16 nStart = 0; 247 if ( nPos != STRING_NOTFOUND ) 248 { 249 nStart = nPos + 4; // + length of the delimiter 250 nPos = Search( "($$)", nStart ); 251 } 252 if ( nPos != STRING_NOTFOUND ) 253 { 254 nStart = nPos + 4; // + length of the delimiter 255 nPos = Search( "($$)", nStart ); 256 } 257 if ( nPos != STRING_NOTFOUND ) 258 { 259 nStart = nPos + 4; // + length of the delimiter 260 nPos = Search( "($$)", nStart ); 261 } 262 if ( nPos != STRING_NOTFOUND ) 263 { 264 nStart = nPos + 4; // + length of the delimiter 265 } 266 if ( nPos != STRING_NOTFOUND ) 267 { 268 aReassemble = Copy( 0, nStart ); 269 aReassemble += aText; 270 *(ByteString*)this = aReassemble; 271 } 272 else 273 PrintError( "Cannot reassemble GSI line (internal Error).", "Line format", "", sal_False, GetLineNumber(), GetUniqId() ); 274 } 275 else 276 PrintError( "Cannot reassemble line of unknown type (internal Error).", "Line format", "", sal_False, GetLineNumber(), GetUniqId() ); |
277} 278 279// 280// class GSIBlock 281// 282/*****************************************************************************/ 283GSIBlock::GSIBlock( sal_Bool PbPrintContext, sal_Bool bSource, sal_Bool bTrans, sal_Bool bRef, sal_Bool bAllowKID, sal_Bool bAllowSusp ) 284/*****************************************************************************/ | 277} 278 279// 280// class GSIBlock 281// 282/*****************************************************************************/ 283GSIBlock::GSIBlock( sal_Bool PbPrintContext, sal_Bool bSource, sal_Bool bTrans, sal_Bool bRef, sal_Bool bAllowKID, sal_Bool bAllowSusp ) 284/*****************************************************************************/ |
285 : pSourceLine( NULL ) 286 , pReferenceLine( NULL ) 287 , bPrintContext( PbPrintContext ) 288 , bCheckSourceLang( bSource ) 289 , bCheckTranslationLang( bTrans ) 290 , bReference( bRef ) 291 , bAllowKeyIDs( bAllowKID ) 292 , bAllowSuspicious( bAllowSusp ) 293 , bHasBlockError( sal_False ) | 285 : pSourceLine( NULL ) 286 , pReferenceLine( NULL ) 287 , bPrintContext( PbPrintContext ) 288 , bCheckSourceLang( bSource ) 289 , bCheckTranslationLang( bTrans ) 290 , bReference( bRef ) 291 , bAllowKeyIDs( bAllowKID ) 292 , bAllowSuspicious( bAllowSusp ) 293 , bHasBlockError( sal_False ) |
294{ 295} 296 297/*****************************************************************************/ 298GSIBlock::~GSIBlock() 299/*****************************************************************************/ 300{ 301 delete pSourceLine; 302 delete pReferenceLine; 303 304 for ( sal_uLong i = 0; i < Count(); i++ ) 305 delete ( GetObject( i )); 306} 307 308/*****************************************************************************/ 309void GSIBlock::InsertLine( GSILine* pLine, ByteString aSourceLang) 310/*****************************************************************************/ 311{ 312 if ( pLine->GetLanguageId().Equals( aSourceLang ) ) | 294{ 295} 296 297/*****************************************************************************/ 298GSIBlock::~GSIBlock() 299/*****************************************************************************/ 300{ 301 delete pSourceLine; 302 delete pReferenceLine; 303 304 for ( sal_uLong i = 0; i < Count(); i++ ) 305 delete ( GetObject( i )); 306} 307 308/*****************************************************************************/ 309void GSIBlock::InsertLine( GSILine* pLine, ByteString aSourceLang) 310/*****************************************************************************/ 311{ 312 if ( pLine->GetLanguageId().Equals( aSourceLang ) ) |
313 { 314 if ( pSourceLine ) 315 { 316 PrintError( "Source Language entry double. Treating as Translation.", "File format", "", pLine->GetLineNumber(), pLine->GetUniqId() ); 317 bHasBlockError = sal_True; 318 pSourceLine->NotOK(); 319 pLine->NotOK(); 320 } 321 else 322 { 323 pSourceLine = pLine; 324 return; 325 } 326 } | 313 { 314 if ( pSourceLine ) 315 { 316 PrintError( "Source Language entry double. Treating as Translation.", "File format", "", pLine->GetLineNumber(), pLine->GetUniqId() ); 317 bHasBlockError = sal_True; 318 pSourceLine->NotOK(); 319 pLine->NotOK(); 320 } 321 else 322 { 323 pSourceLine = pLine; 324 return; 325 } 326 } |
327 sal_uLong nPos = 0; 328 | 327 sal_uLong nPos = 0; 328 |
329 if ( aSourceLang.Len() ) // only check blockstructure if source lang is given 330 { | 329 if ( aSourceLang.Len() ) // only check blockstructure if source lang is given 330 { |
331 while ( nPos < Count() ) | 331 while ( nPos < Count() ) |
332 { 333 if ( GetObject( nPos )->GetLanguageId().Equals( pLine->GetLanguageId() ) ) 334 { 335 PrintError( "Translation Language entry double. Checking both.", "File format", "", pLine->GetLineNumber(), pLine->GetUniqId() ); 336 bHasBlockError = sal_True; 337 GetObject( nPos )->NotOK(); 338 pLine->NotOK(); 339 } | 332 { 333 if ( GetObject( nPos )->GetLanguageId().Equals( pLine->GetLanguageId() ) ) 334 { 335 PrintError( "Translation Language entry double. Checking both.", "File format", "", pLine->GetLineNumber(), pLine->GetUniqId() ); 336 bHasBlockError = sal_True; 337 GetObject( nPos )->NotOK(); 338 pLine->NotOK(); 339 } |
340 nPos++; | 340 nPos++; |
341 } 342 } | 341 } 342 } |
343 Insert( pLine, LIST_APPEND ); 344} 345 346/*****************************************************************************/ 347void GSIBlock::SetReferenceLine( GSILine* pLine ) 348/*****************************************************************************/ 349{ | 343 Insert( pLine, LIST_APPEND ); 344} 345 346/*****************************************************************************/ 347void GSIBlock::SetReferenceLine( GSILine* pLine ) 348/*****************************************************************************/ 349{ |
350 pReferenceLine = pLine; | 350 pReferenceLine = pLine; |
351} 352 353/*****************************************************************************/ 354void GSIBlock::PrintMessage( ByteString aType, ByteString aMsg, ByteString aPrefix, 355 ByteString aContext, sal_uLong nLine, ByteString aUniqueId ) 356/*****************************************************************************/ 357{ | 351} 352 353/*****************************************************************************/ 354void GSIBlock::PrintMessage( ByteString aType, ByteString aMsg, ByteString aPrefix, 355 ByteString aContext, sal_uLong nLine, ByteString aUniqueId ) 356/*****************************************************************************/ 357{ |
358 ::PrintMessage( aType, aMsg, aPrefix, aContext, bPrintContext, nLine, aUniqueId ); | 358 ::PrintMessage( aType, aMsg, aPrefix, aContext, bPrintContext, nLine, aUniqueId ); |
359} 360 361/*****************************************************************************/ 362void GSIBlock::PrintError( ByteString aMsg, ByteString aPrefix, 363 ByteString aContext, sal_uLong nLine, ByteString aUniqueId ) 364/*****************************************************************************/ 365{ | 359} 360 361/*****************************************************************************/ 362void GSIBlock::PrintError( ByteString aMsg, ByteString aPrefix, 363 ByteString aContext, sal_uLong nLine, ByteString aUniqueId ) 364/*****************************************************************************/ 365{ |
366 PrintMessage( "Error:", aMsg, aPrefix, aContext, nLine, aUniqueId ); | 366 PrintMessage( "Error:", aMsg, aPrefix, aContext, nLine, aUniqueId ); |
367} 368 369/*****************************************************************************/ 370void GSIBlock::PrintList( ParserMessageList *pList, ByteString aPrefix, 371 GSILine *pLine ) 372/*****************************************************************************/ 373{ 374 sal_uLong i; --- 6 unchanged lines hidden (view full) --- 381 if ( pMsg->GetTagBegin() == STRING_NOTFOUND ) 382 aContext = pLine->GetText().Copy( 0, 300 ); 383 else 384 aContext = pLine->Copy( pMsg->GetTagBegin()-150, 300 ); 385 aContext.EraseTrailingChars(' '); 386 aContext.EraseLeadingChars(' '); 387 } 388 | 367} 368 369/*****************************************************************************/ 370void GSIBlock::PrintList( ParserMessageList *pList, ByteString aPrefix, 371 GSILine *pLine ) 372/*****************************************************************************/ 373{ 374 sal_uLong i; --- 6 unchanged lines hidden (view full) --- 381 if ( pMsg->GetTagBegin() == STRING_NOTFOUND ) 382 aContext = pLine->GetText().Copy( 0, 300 ); 383 else 384 aContext = pLine->Copy( pMsg->GetTagBegin()-150, 300 ); 385 aContext.EraseTrailingChars(' '); 386 aContext.EraseLeadingChars(' '); 387 } 388 |
389 PrintMessage( pMsg->Prefix(), pMsg->GetErrorText(), aPrefix, aContext, pLine->GetLineNumber(), pLine->GetUniqId() ); | 389 PrintMessage( pMsg->Prefix(), pMsg->GetErrorText(), aPrefix, aContext, pLine->GetLineNumber(), pLine->GetUniqId() ); |
390 } 391} 392 393/*****************************************************************************/ 394sal_Bool GSIBlock::IsUTF8( const ByteString &aTestee, sal_Bool bFixTags, sal_uInt16 &nErrorPos, ByteString &aErrorMsg, sal_Bool &bHasBeenFixed, ByteString &aFixed ) const 395/*****************************************************************************/ 396{ | 390 } 391} 392 393/*****************************************************************************/ 394sal_Bool GSIBlock::IsUTF8( const ByteString &aTestee, sal_Bool bFixTags, sal_uInt16 &nErrorPos, ByteString &aErrorMsg, sal_Bool &bHasBeenFixed, ByteString &aFixed ) const 395/*****************************************************************************/ 396{ |
397 String aUTF8Tester( aTestee, RTL_TEXTENCODING_UTF8 ); 398 if ( STRING_MATCH != (nErrorPos = ByteString( aUTF8Tester, RTL_TEXTENCODING_UTF8 ).Match( aTestee )) ) 399 { 400 aUTF8Tester = String( aTestee.GetBuffer(), nErrorPos, RTL_TEXTENCODING_UTF8 ); 401 nErrorPos = aUTF8Tester.Len(); 402 aErrorMsg = ByteString( "UTF8 Encoding seems to be broken" ); 403 return sal_False; 404 } | 397 String aUTF8Tester( aTestee, RTL_TEXTENCODING_UTF8 ); 398 if ( STRING_MATCH != (nErrorPos = ByteString( aUTF8Tester, RTL_TEXTENCODING_UTF8 ).Match( aTestee )) ) 399 { 400 aUTF8Tester = String( aTestee.GetBuffer(), nErrorPos, RTL_TEXTENCODING_UTF8 ); 401 nErrorPos = aUTF8Tester.Len(); 402 aErrorMsg = ByteString( "UTF8 Encoding seems to be broken" ); 403 return sal_False; 404 } |
405 | 405 |
406 nErrorPos = aUTF8Tester.SearchChar( String::CreateFromAscii( "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0b\x0c\x0e\x0f" 407 "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x7f" ).GetBuffer() ); 408 if ( nErrorPos != STRING_NOTFOUND ) 409 { 410 aErrorMsg = ByteString( "String contains illegal character" ); 411 return sal_False; 412 } | 406 nErrorPos = aUTF8Tester.SearchChar( String::CreateFromAscii( "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0b\x0c\x0e\x0f" 407 "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x7f" ).GetBuffer() ); 408 if ( nErrorPos != STRING_NOTFOUND ) 409 { 410 aErrorMsg = ByteString( "String contains illegal character" ); 411 return sal_False; 412 } |
413 | 413 |
414 if ( bFixTags ) 415 { 416 bHasBeenFixed = sal_False; 417 aFixed.Erase(); 418 } | 414 if ( bFixTags ) 415 { 416 bHasBeenFixed = sal_False; 417 aFixed.Erase(); 418 } |
419 | 419 |
420 if ( !bAllowKeyIDs ) 421 { 422 sal_Bool bIsKeyID = sal_False; 423 sal_Bool bNewId = sal_False; 424 ByteString aID( aTestee ); | 420 if ( !bAllowKeyIDs ) 421 { 422 sal_Bool bIsKeyID = sal_False; 423 sal_Bool bNewId = sal_False; 424 ByteString aID( aTestee ); |
425 sal_uInt16 nAfterID = 0; 426 427 if ( aTestee.Equals( "{&", 0, 2 ) ) | 425 sal_uInt16 nAfterID = 0; 426 427 if ( aTestee.Equals( "{&", 0, 2 ) ) |
428 { // check for strings from instset_native like "{&Tahoma8}335795.Installation Wiza ..." 429 sal_uInt16 nTagEnd = aTestee.Search( '}' ); 430 if ( nTagEnd != STRING_NOTFOUND ) 431 { 432 if ( bFixTags ) 433 aFixed = aTestee.Copy( 0, nTagEnd+1 ); 434 nErrorPos = nTagEnd+1; 435 aID = aTestee.Copy( nTagEnd+1 ); | 428 { // check for strings from instset_native like "{&Tahoma8}335795.Installation Wiza ..." 429 sal_uInt16 nTagEnd = aTestee.Search( '}' ); 430 if ( nTagEnd != STRING_NOTFOUND ) 431 { 432 if ( bFixTags ) 433 aFixed = aTestee.Copy( 0, nTagEnd+1 ); 434 nErrorPos = nTagEnd+1; 435 aID = aTestee.Copy( nTagEnd+1 ); |
436 nAfterID = nTagEnd+1; | 436 nAfterID = nTagEnd+1; |
437 } 438 } | 437 } 438 } |
439 440 ByteString aDelimiter( (String)String( sal_Unicode(0x2016) ), RTL_TEXTENCODING_UTF8 ); 441 | 439 440 ByteString aDelimiter( (String)String( sal_Unicode(0x2016) ), RTL_TEXTENCODING_UTF8 ); 441 |
442 if ( aID.Equals( aDelimiter, 6, aDelimiter.Len() ) ) 443 { // New KeyId 6 Letters, digits and spechial chars followed by delimiter 444 bNewId = sal_True; 445 nErrorPos = 1; 446 aID = aID.Copy( 0, 6 ); | 442 if ( aID.Equals( aDelimiter, 6, aDelimiter.Len() ) ) 443 { // New KeyId 6 Letters, digits and special chars followed by delimiter 444 bNewId = sal_True; 445 nErrorPos = 1; 446 aID = aID.Copy( 0, 6 ); |
447 nAfterID += 6; 448 nAfterID = nAfterID + aDelimiter.Len(); | 447 nAfterID += 6; 448 nAfterID = nAfterID + aDelimiter.Len(); |
449 } 450 else if ( ( aID.GetChar(6) == '*' ) && aID.Equals( aDelimiter, 7, aDelimiter.Len() ) ) 451 { // New KeyId 6 Letters, digits and spechial chars followed by '*delimiter' to indicate translation in progress 452 bNewId = sal_True; 453 nErrorPos = 1; 454 aID = aID.Copy( 0, 6 ); | 449 } 450 else if ( ( aID.GetChar(6) == '*' ) && aID.Equals( aDelimiter, 7, aDelimiter.Len() ) ) 451 { // New KeyId 6 Letters, digits and special chars followed by '*delimiter' to indicate translation in progress 452 bNewId = sal_True; 453 nErrorPos = 1; 454 aID = aID.Copy( 0, 6 ); |
455 nAfterID += 7; 456 nAfterID = nAfterID + aDelimiter.Len(); | 455 nAfterID += 7; 456 nAfterID = nAfterID + aDelimiter.Len(); |
457 } 458 else if ( aID.GetTokenCount( '.' ) > 1 ) 459 { // test for old KeyIDs 5 to 6 digits followed by a dot '44373.' 460 bNewId = sal_False; 461 nErrorPos = 1; 462 aID = aID.GetToken( 0, '.' ); | 457 } 458 else if ( aID.GetTokenCount( '.' ) > 1 ) 459 { // test for old KeyIDs 5 to 6 digits followed by a dot '44373.' 460 bNewId = sal_False; 461 nErrorPos = 1; 462 aID = aID.GetToken( 0, '.' ); |
463 nAfterID = nAfterID + aID.Len(); | 463 nAfterID = nAfterID + aID.Len(); |
464 } | 464 } |
465 else 466 { 467 aID.Erase(); 468 } 469 | 465 else 466 { 467 aID.Erase(); 468 } 469 |
470 if ( bNewId ) 471 { 472 if ( aID.Len() == 6 ) 473 { 474 bIsKeyID = sal_True; 475 ByteString aDigits("0123456789abcdefghijklmnopqrstuvwxyz+-<=>"); 476 for ( sal_uInt16 i=0 ; i < aID.Len() ;i++ ) 477 { 478 if ( aDigits.Search( aID.GetChar(i) ) == STRING_NOTFOUND ) 479 bIsKeyID = sal_False; 480 } 481 } 482 } 483 else 484 { 485 if ( aID.Len() > 0 && aID.GetChar(aID.Len()-1) == '*' ) 486 aID.Erase( aID.Len()-1 ); | 470 if ( bNewId ) 471 { 472 if ( aID.Len() == 6 ) 473 { 474 bIsKeyID = sal_True; 475 ByteString aDigits("0123456789abcdefghijklmnopqrstuvwxyz+-<=>"); 476 for ( sal_uInt16 i=0 ; i < aID.Len() ;i++ ) 477 { 478 if ( aDigits.Search( aID.GetChar(i) ) == STRING_NOTFOUND ) 479 bIsKeyID = sal_False; 480 } 481 } 482 } 483 else 484 { 485 if ( aID.Len() > 0 && aID.GetChar(aID.Len()-1) == '*' ) 486 aID.Erase( aID.Len()-1 ); |
487 | 487 |
488 if ( aID.IsNumericAscii() && aID.Len() >= 5 ) 489 bIsKeyID = sal_True; 490 } | 488 if ( aID.IsNumericAscii() && aID.Len() >= 5 ) 489 bIsKeyID = sal_True; 490 } |
491 | 491 |
492 if ( bIsKeyID ) 493 { 494 aErrorMsg = ByteString( "String contains KeyID" ); 495 if ( bFixTags ) 496 { 497 aFixed += aTestee.Copy( nAfterID ); 498 bHasBeenFixed = sal_True; 499 aErrorMsg = ByteString( "FIXED String containing KeyID" ); 500 } 501 else 502 aErrorMsg = ByteString( "String contains KeyID" ); 503 return sal_False; 504 } 505 } | 492 if ( bIsKeyID ) 493 { 494 aErrorMsg = ByteString( "String contains KeyID" ); 495 if ( bFixTags ) 496 { 497 aFixed += aTestee.Copy( nAfterID ); 498 bHasBeenFixed = sal_True; 499 aErrorMsg = ByteString( "FIXED String containing KeyID" ); 500 } 501 else 502 aErrorMsg = ByteString( "String contains KeyID" ); 503 return sal_False; 504 } 505 } |
506 | 506 |
507 return sal_True; | 507 return sal_True; |
508} 509 510/*****************************************************************************/ 511sal_Bool GSIBlock::TestUTF8( GSILine* pTestee, sal_Bool bFixTags ) 512/*****************************************************************************/ 513{ | 508} 509 510/*****************************************************************************/ 511sal_Bool GSIBlock::TestUTF8( GSILine* pTestee, sal_Bool bFixTags ) 512/*****************************************************************************/ 513{ |
514 sal_uInt16 nErrorPos = 0; 515 ByteString aErrorMsg; 516 sal_Bool bError = sal_False; 517 ByteString aFixed; 518 sal_Bool bHasBeenFixed = sal_False; 519 if ( !IsUTF8( pTestee->GetText(), bFixTags, nErrorPos, aErrorMsg, bHasBeenFixed, aFixed ) ) 520 { 521 ByteString aContext( pTestee->GetText().Copy( nErrorPos, 20 ) ); 522 PrintError( aErrorMsg.Append(" in Text at Position " ).Append( ByteString::CreateFromInt32( nErrorPos ) ), "Text format", aContext, pTestee->GetLineNumber(), pTestee->GetUniqId() ); 523 bError = sal_True; 524 if ( bHasBeenFixed ) 525 { 526 pTestee->SetText( aFixed ); 527 pTestee->SetFixed(); 528 } 529 } 530 if ( !IsUTF8( pTestee->GetQuickHelpText(), bFixTags, nErrorPos, aErrorMsg, bHasBeenFixed, aFixed ) ) 531 { 532 ByteString aContext( pTestee->GetQuickHelpText().Copy( nErrorPos, 20 ) ); 533 PrintError( aErrorMsg.Append(" in QuickHelpText at Position " ).Append( ByteString::CreateFromInt32( nErrorPos ) ), "Text format", aContext, pTestee->GetLineNumber(), pTestee->GetUniqId() ); 534 bError = sal_True; 535 if ( bHasBeenFixed ) 536 { 537 pTestee->SetQuickHelpText( aFixed ); 538 pTestee->SetFixed(); 539 } 540 } 541 if ( !IsUTF8( pTestee->GetTitle(), bFixTags, nErrorPos, aErrorMsg, bHasBeenFixed, aFixed ) ) 542 { 543 ByteString aContext( pTestee->GetTitle().Copy( nErrorPos, 20 ) ); 544 PrintError( aErrorMsg.Append(" in Title at Position " ).Append( ByteString::CreateFromInt32( nErrorPos ) ), "Text format", aContext, pTestee->GetLineNumber(), pTestee->GetUniqId() ); 545 bError = sal_True; 546 if ( bHasBeenFixed ) 547 { 548 pTestee->SetTitle( aFixed ); 549 pTestee->SetFixed(); 550 } 551 } 552 if ( bError ) 553 pTestee->NotOK(); 554 return !bError; | 514 sal_uInt16 nErrorPos = 0; 515 ByteString aErrorMsg; 516 sal_Bool bError = sal_False; 517 ByteString aFixed; 518 sal_Bool bHasBeenFixed = sal_False; 519 if ( !IsUTF8( pTestee->GetText(), bFixTags, nErrorPos, aErrorMsg, bHasBeenFixed, aFixed ) ) 520 { 521 ByteString aContext( pTestee->GetText().Copy( nErrorPos, 20 ) ); 522 PrintError( aErrorMsg.Append(" in Text at Position " ).Append( ByteString::CreateFromInt32( nErrorPos ) ), "Text format", aContext, pTestee->GetLineNumber(), pTestee->GetUniqId() ); 523 bError = sal_True; 524 if ( bHasBeenFixed ) 525 { 526 pTestee->SetText( aFixed ); 527 pTestee->SetFixed(); 528 } 529 } 530 if ( !IsUTF8( pTestee->GetQuickHelpText(), bFixTags, nErrorPos, aErrorMsg, bHasBeenFixed, aFixed ) ) 531 { 532 ByteString aContext( pTestee->GetQuickHelpText().Copy( nErrorPos, 20 ) ); 533 PrintError( aErrorMsg.Append(" in QuickHelpText at Position " ).Append( ByteString::CreateFromInt32( nErrorPos ) ), "Text format", aContext, pTestee->GetLineNumber(), pTestee->GetUniqId() ); 534 bError = sal_True; 535 if ( bHasBeenFixed ) 536 { 537 pTestee->SetQuickHelpText( aFixed ); 538 pTestee->SetFixed(); 539 } 540 } 541 if ( !IsUTF8( pTestee->GetTitle(), bFixTags, nErrorPos, aErrorMsg, bHasBeenFixed, aFixed ) ) 542 { 543 ByteString aContext( pTestee->GetTitle().Copy( nErrorPos, 20 ) ); 544 PrintError( aErrorMsg.Append(" in Title at Position " ).Append( ByteString::CreateFromInt32( nErrorPos ) ), "Text format", aContext, pTestee->GetLineNumber(), pTestee->GetUniqId() ); 545 bError = sal_True; 546 if ( bHasBeenFixed ) 547 { 548 pTestee->SetTitle( aFixed ); 549 pTestee->SetFixed(); 550 } 551 } 552 if ( bError ) 553 pTestee->NotOK(); 554 return !bError; |
555} 556 557 558/*****************************************************************************/ 559sal_Bool GSIBlock::HasSuspiciousChars( GSILine* pTestee, GSILine* pSource ) 560/*****************************************************************************/ 561{ | 555} 556 557 558/*****************************************************************************/ 559sal_Bool GSIBlock::HasSuspiciousChars( GSILine* pTestee, GSILine* pSource ) 560/*****************************************************************************/ 561{ |
562 sal_uInt16 nPos = 0; 563 if ( !bAllowSuspicious && ( nPos = pTestee->GetText().Search("??")) != STRING_NOTFOUND ) 564 if ( pSource->GetText().Search("??") == STRING_NOTFOUND ) 565 { 566 String aUTF8Tester = String( pTestee->GetText(), 0, nPos, RTL_TEXTENCODING_UTF8 ); 567 sal_uInt16 nErrorPos = aUTF8Tester.Len(); 568 ByteString aContext( pTestee->GetText().Copy( nPos, 20 ) ); 569 PrintError( ByteString("Found double questionmark in translation only. Looks like an encoding problem at Position " ).Append( ByteString::CreateFromInt32( nErrorPos ) ), "Text format", aContext, pTestee->GetLineNumber(), pTestee->GetUniqId() ); 570 pTestee->NotOK(); 571 return sal_True; 572 } | 562 sal_uInt16 nPos = 0; 563 if ( !bAllowSuspicious && ( nPos = pTestee->GetText().Search("??")) != STRING_NOTFOUND ) 564 if ( pSource->GetText().Search("??") == STRING_NOTFOUND ) 565 { 566 String aUTF8Tester = String( pTestee->GetText(), 0, nPos, RTL_TEXTENCODING_UTF8 ); 567 sal_uInt16 nErrorPos = aUTF8Tester.Len(); 568 ByteString aContext( pTestee->GetText().Copy( nPos, 20 ) ); 569 PrintError( ByteString("Found double question mark in translation only. Looks like an encoding problem at Position " ).Append( ByteString::CreateFromInt32( nErrorPos ) ), "Text format", aContext, pTestee->GetLineNumber(), pTestee->GetUniqId() ); 570 pTestee->NotOK(); 571 return sal_True; 572 } |
573 | 573 |
574 return sal_False; | 574 return sal_False; |
575} 576 577 578/*****************************************************************************/ 579sal_Bool GSIBlock::CheckSyntax( sal_uLong nLine, sal_Bool bRequireSourceLine, sal_Bool bFixTags ) 580/*****************************************************************************/ 581{ 582 static LingTest aTester; | 575} 576 577 578/*****************************************************************************/ 579sal_Bool GSIBlock::CheckSyntax( sal_uLong nLine, sal_Bool bRequireSourceLine, sal_Bool bFixTags ) 580/*****************************************************************************/ 581{ 582 static LingTest aTester; |
583 sal_Bool bHasError = sal_False; | 583 sal_Bool bHasError = sal_False; |
584 585 if ( !pSourceLine ) 586 { | 584 585 if ( !pSourceLine ) 586 { |
587 if ( bRequireSourceLine ) 588 { 589 PrintError( "No source language entry defined!", "File format", "", nLine ); 590 bHasBlockError = sal_True; 591 } | 587 if ( bRequireSourceLine ) 588 { 589 PrintError( "No source language entry defined!", "File format", "", nLine ); 590 bHasBlockError = sal_True; 591 } |
592 } 593 else 594 { | 592 } 593 else 594 { |
595 aTester.CheckReference( pSourceLine ); 596 if ( pSourceLine->HasMessages() ) | 595 aTester.CheckReference( pSourceLine ); 596 if ( pSourceLine->HasMessages() ) |
597 { 598 PrintList( pSourceLine->GetMessageList(), "ReferenceString", pSourceLine ); 599 pSourceLine->NotOK(); | 597 { 598 PrintList( pSourceLine->GetMessageList(), "ReferenceString", pSourceLine ); 599 pSourceLine->NotOK(); |
600 bHasError = sal_True; | 600 bHasError = sal_True; |
601 } 602 } | 601 } 602 } |
603 if ( bReference ) 604 { 605 if ( !pReferenceLine ) 606 { 607 GSILine *pSource; 608 if ( pSourceLine ) 609 pSource = pSourceLine; 610 else 611 pSource = GetObject( 0 ); // get some other line 612 if ( pSource ) 613 PrintError( "No reference line found. Entry is new in source file", "File format", "", pSource->GetLineNumber(), pSource->GetUniqId() ); 614 else 615 PrintError( "No reference line found. Entry is new in source file", "File format", "", nLine ); 616 bHasBlockError = sal_True; 617 } 618 else 619 { 620 if ( pSourceLine && !pSourceLine->Equals( *pReferenceLine ) ) 621 { 622 xub_StrLen nPos = pSourceLine->Match( *pReferenceLine ); 623 ByteString aContext( pReferenceLine->Copy( nPos - 5, 15) ); 624 aContext.Append( "\" --> \"" ).Append( pSourceLine->Copy( nPos - 5, 15) ); 625 PrintError( "Source Language Entry has changed.", "File format", aContext, pSourceLine->GetLineNumber(), pSourceLine->GetUniqId() ); 626 pSourceLine->NotOK(); 627 bHasError = sal_True; 628 } 629 } 630 } | 603 if ( bReference ) 604 { 605 if ( !pReferenceLine ) 606 { 607 GSILine *pSource; 608 if ( pSourceLine ) 609 pSource = pSourceLine; 610 else 611 pSource = GetObject( 0 ); // get some other line 612 if ( pSource ) 613 PrintError( "No reference line found. Entry is new in source file", "File format", "", pSource->GetLineNumber(), pSource->GetUniqId() ); 614 else 615 PrintError( "No reference line found. Entry is new in source file", "File format", "", nLine ); 616 bHasBlockError = sal_True; 617 } 618 else 619 { 620 if ( pSourceLine && !pSourceLine->Equals( *pReferenceLine ) ) 621 { 622 xub_StrLen nPos = pSourceLine->Match( *pReferenceLine ); 623 ByteString aContext( pReferenceLine->Copy( nPos - 5, 15) ); 624 aContext.Append( "\" --> \"" ).Append( pSourceLine->Copy( nPos - 5, 15) ); 625 PrintError( "Source Language Entry has changed.", "File format", aContext, pSourceLine->GetLineNumber(), pSourceLine->GetUniqId() ); 626 pSourceLine->NotOK(); 627 bHasError = sal_True; 628 } 629 } 630 } |
631 | 631 |
632 if ( pSourceLine ) 633 bHasError |= !TestUTF8( pSourceLine, bFixTags ); | 632 if ( pSourceLine ) 633 bHasError |= !TestUTF8( pSourceLine, bFixTags ); |
634 635 sal_uLong i; 636 for ( i = 0; i < Count(); i++ ) 637 { 638 aTester.CheckTestee( GetObject( i ), pSourceLine != NULL, bFixTags ); 639 if ( GetObject( i )->HasMessages() || aTester.HasCompareWarnings() ) | 634 635 sal_uLong i; 636 for ( i = 0; i < Count(); i++ ) 637 { 638 aTester.CheckTestee( GetObject( i ), pSourceLine != NULL, bFixTags ); 639 if ( GetObject( i )->HasMessages() || aTester.HasCompareWarnings() ) |
640 { 641 if ( GetObject( i )->HasMessages() || aTester.GetCompareWarnings().HasErrors() ) 642 GetObject( i )->NotOK(); 643 bHasError = sal_True; | 640 { 641 if ( GetObject( i )->HasMessages() || aTester.GetCompareWarnings().HasErrors() ) 642 GetObject( i )->NotOK(); 643 bHasError = sal_True; |
644 PrintList( GetObject( i )->GetMessageList(), "Translation", GetObject( i ) ); 645 PrintList( &(aTester.GetCompareWarnings()), "Translation Tag Missmatch", GetObject( i ) ); 646 } | 644 PrintList( GetObject( i )->GetMessageList(), "Translation", GetObject( i ) ); 645 PrintList( &(aTester.GetCompareWarnings()), "Translation Tag Missmatch", GetObject( i ) ); 646 } |
647 bHasError |= !TestUTF8( GetObject( i ), bFixTags ); 648 if ( pSourceLine ) 649 bHasError |= HasSuspiciousChars( GetObject( i ), pSourceLine ); | 647 bHasError |= !TestUTF8( GetObject( i ), bFixTags ); 648 if ( pSourceLine ) 649 bHasError |= HasSuspiciousChars( GetObject( i ), pSourceLine ); |
650 } 651 652 return bHasError || bHasBlockError; 653} 654 | 650 } 651 652 return bHasError || bHasBlockError; 653} 654 |
655void GSIBlock::WriteError( LazySvFileStream &aErrOut, sal_Bool bRequireSourceLine ) | 655void GSIBlock::WriteError( LazySvFileStream &aErrOut, sal_Bool bRequireSourceLine ) |
656{ | 656{ |
657 if ( pSourceLine && pSourceLine->IsOK() && bCheckSourceLang && !bHasBlockError ) 658 return; | 657 if ( pSourceLine && pSourceLine->IsOK() && bCheckSourceLang && !bHasBlockError ) 658 return; |
659 660 sal_Bool bHasError = sal_False; 661 sal_Bool bCopyAll = ( !pSourceLine && bRequireSourceLine ) || ( pSourceLine && !pSourceLine->IsOK() && !bCheckTranslationLang ) || bHasBlockError; 662 sal_uLong i; 663 for ( i = 0; i < Count(); i++ ) 664 { 665 if ( !GetObject( i )->IsOK() || bCopyAll ) 666 { 667 bHasError = sal_True; | 659 660 sal_Bool bHasError = sal_False; 661 sal_Bool bCopyAll = ( !pSourceLine && bRequireSourceLine ) || ( pSourceLine && !pSourceLine->IsOK() && !bCheckTranslationLang ) || bHasBlockError; 662 sal_uLong i; 663 for ( i = 0; i < Count(); i++ ) 664 { 665 if ( !GetObject( i )->IsOK() || bCopyAll ) 666 { 667 bHasError = sal_True; |
668 aErrOut.LazyOpen(); | 668 aErrOut.LazyOpen(); |
669 aErrOut.WriteLine( *GetObject( i ) ); 670 } 671 } 672 673 if ( pSourceLine && ( bHasError || !pSourceLine->IsOK() ) && !( !bHasError && bCheckTranslationLang ) ) | 669 aErrOut.WriteLine( *GetObject( i ) ); 670 } 671 } 672 673 if ( pSourceLine && ( bHasError || !pSourceLine->IsOK() ) && !( !bHasError && bCheckTranslationLang ) ) |
674 { 675 aErrOut.LazyOpen(); | 674 { 675 aErrOut.LazyOpen(); |
676 aErrOut.WriteLine( *pSourceLine ); | 676 aErrOut.WriteLine( *pSourceLine ); |
677 } | 677 } |
678} 679 680void GSIBlock::WriteCorrect( LazySvFileStream &aOkOut, sal_Bool bRequireSourceLine ) 681{ 682 if ( ( !pSourceLine && bRequireSourceLine ) || ( pSourceLine && !pSourceLine->IsOK() && !bCheckTranslationLang ) ) 683 return; 684 685 sal_Bool bHasOK = sal_False; 686 sal_uLong i; 687 for ( i = 0; i < Count(); i++ ) 688 { 689 if ( ( GetObject( i )->IsOK() || bCheckSourceLang ) && !bHasBlockError ) 690 { 691 bHasOK = sal_True; | 678} 679 680void GSIBlock::WriteCorrect( LazySvFileStream &aOkOut, sal_Bool bRequireSourceLine ) 681{ 682 if ( ( !pSourceLine && bRequireSourceLine ) || ( pSourceLine && !pSourceLine->IsOK() && !bCheckTranslationLang ) ) 683 return; 684 685 sal_Bool bHasOK = sal_False; 686 sal_uLong i; 687 for ( i = 0; i < Count(); i++ ) 688 { 689 if ( ( GetObject( i )->IsOK() || bCheckSourceLang ) && !bHasBlockError ) 690 { 691 bHasOK = sal_True; |
692 aOkOut.LazyOpen(); | 692 aOkOut.LazyOpen(); |
693 aOkOut.WriteLine( *GetObject( i ) ); 694 } 695 } 696 697 if ( ( pSourceLine && pSourceLine->IsOK() && ( Count() || !bCheckTranslationLang ) ) || ( bHasOK && bCheckTranslationLang ) ) | 693 aOkOut.WriteLine( *GetObject( i ) ); 694 } 695 } 696 697 if ( ( pSourceLine && pSourceLine->IsOK() && ( Count() || !bCheckTranslationLang ) ) || ( bHasOK && bCheckTranslationLang ) ) |
698 { 699 aOkOut.LazyOpen(); | 698 { 699 aOkOut.LazyOpen(); |
700 aOkOut.WriteLine( *pSourceLine ); | 700 aOkOut.WriteLine( *pSourceLine ); |
701 } | 701 } |
702} 703 704void GSIBlock::WriteFixed( LazySvFileStream &aFixOut, sal_Bool /*bRequireSourceLine*/ ) 705{ | 702} 703 704void GSIBlock::WriteFixed( LazySvFileStream &aFixOut, sal_Bool /*bRequireSourceLine*/ ) 705{ |
706 if ( pSourceLine && !pSourceLine->IsFixed() && bCheckSourceLang ) 707 return; | 706 if ( pSourceLine && !pSourceLine->IsFixed() && bCheckSourceLang ) 707 return; |
708 709 sal_Bool bHasFixes = sal_False; 710 sal_uLong i; 711 for ( i = 0; i < Count(); i++ ) 712 { 713 if ( GetObject( i )->IsFixed() ) 714 { 715 bHasFixes = sal_True; | 708 709 sal_Bool bHasFixes = sal_False; 710 sal_uLong i; 711 for ( i = 0; i < Count(); i++ ) 712 { 713 if ( GetObject( i )->IsFixed() ) 714 { 715 bHasFixes = sal_True; |
716 aFixOut.LazyOpen(); | 716 aFixOut.LazyOpen(); |
717 aFixOut.WriteLine( *GetObject( i ) ); 718 } 719 } 720 721 if ( pSourceLine && ( bHasFixes || pSourceLine->IsFixed() ) ) | 717 aFixOut.WriteLine( *GetObject( i ) ); 718 } 719 } 720 721 if ( pSourceLine && ( bHasFixes || pSourceLine->IsFixed() ) ) |
722 { 723 aFixOut.LazyOpen(); | 722 { 723 aFixOut.LazyOpen(); |
724 aFixOut.WriteLine( *pSourceLine ); | 724 aFixOut.WriteLine( *pSourceLine ); |
725 } | 725 } |
726} 727 728 729/*****************************************************************************/ 730/*****************************************************************************/ 731/*****************************************************************************/ 732/*****************************************************************************/ 733/*****************************************************************************/ --- 23 unchanged lines hidden (view full) --- 757 fprintf( stdout, "-wff Same as above but give own filename\n" ); 758 fprintf( stdout, "-we Write File containing all errors\n" ); 759 fprintf( stdout, "-wef Same as above but give own filename\n" ); 760 fprintf( stdout, "-wc Write File containing all correct parts\n" ); 761 fprintf( stdout, "-wcf Same as above but give own filename\n" ); 762 fprintf( stdout, "-s Check only source language. Should be used before handing out to vendor.\n" ); 763 fprintf( stdout, "-t Check only Translation language(s). Should be used before merging.\n" ); 764 fprintf( stdout, "-k Allow KeyIDs to be present in strings\n" ); | 726} 727 728 729/*****************************************************************************/ 730/*****************************************************************************/ 731/*****************************************************************************/ 732/*****************************************************************************/ 733/*****************************************************************************/ --- 23 unchanged lines hidden (view full) --- 757 fprintf( stdout, "-wff Same as above but give own filename\n" ); 758 fprintf( stdout, "-we Write File containing all errors\n" ); 759 fprintf( stdout, "-wef Same as above but give own filename\n" ); 760 fprintf( stdout, "-wc Write File containing all correct parts\n" ); 761 fprintf( stdout, "-wcf Same as above but give own filename\n" ); 762 fprintf( stdout, "-s Check only source language. Should be used before handing out to vendor.\n" ); 763 fprintf( stdout, "-t Check only Translation language(s). Should be used before merging.\n" ); 764 fprintf( stdout, "-k Allow KeyIDs to be present in strings\n" ); |
765 fprintf( stdout, "-e disable encoding checks. E.g.: double questionmark \'??\' which may be the\n" ); 766 fprintf( stdout, " result of false conversions\n" ); | 765 fprintf( stdout, "-e disable encoding checks. E.g.: double questionmark \'??\' which may be the\n" ); 766 fprintf( stdout, " result of false conversions\n" ); |
767 fprintf( stdout, "-l ISO Languagecode or numerical 2 digits Identifier of the source language.\n" ); 768 fprintf( stdout, " Default is en-US. Use \"\" (empty string) or 'none'\n" ); 769 fprintf( stdout, " to disable source language dependent checks\n" ); 770 fprintf( stdout, "-r Reference filename to check that source language entries\n" ); 771 fprintf( stdout, " have not been changed\n" ); | 767 fprintf( stdout, "-l ISO Languagecode or numerical 2 digits Identifier of the source language.\n" ); 768 fprintf( stdout, " Default is en-US. Use \"\" (empty string) or 'none'\n" ); 769 fprintf( stdout, " to disable source language dependent checks\n" ); 770 fprintf( stdout, "-r Reference filename to check that source language entries\n" ); 771 fprintf( stdout, " have not been changed\n" ); |
772 fprintf( stdout, "\n" ); | 772 fprintf( stdout, "\n" ); |
773} 774 775/*****************************************************************************/ 776#if defined(UNX) || defined(OS2) 777int main( int argc, char *argv[] ) 778#else 779int _cdecl main( int argc, char *argv[] ) 780#endif 781/*****************************************************************************/ 782{ 783 784 sal_Bool bError = sal_False; 785 sal_Bool bPrintContext = sal_False; 786 sal_Bool bCheckSourceLang = sal_False; | 773} 774 775/*****************************************************************************/ 776#if defined(UNX) || defined(OS2) 777int main( int argc, char *argv[] ) 778#else 779int _cdecl main( int argc, char *argv[] ) 780#endif 781/*****************************************************************************/ 782{ 783 784 sal_Bool bError = sal_False; 785 sal_Bool bPrintContext = sal_False; 786 sal_Bool bCheckSourceLang = sal_False; |
787 sal_Bool bCheckTranslationLang = sal_False; 788 sal_Bool bWriteError = sal_False; | 787 sal_Bool bCheckTranslationLang = sal_False; 788 sal_Bool bWriteError = sal_False; |
789 sal_Bool bWriteCorrect = sal_False; | 789 sal_Bool bWriteCorrect = sal_False; |
790 sal_Bool bWriteFixed = sal_False; 791 sal_Bool bFixTags = sal_False; 792 sal_Bool bAllowKID = sal_False; 793 sal_Bool bAllowSuspicious = sal_False; 794 String aErrorFilename; | 790 sal_Bool bWriteFixed = sal_False; 791 sal_Bool bFixTags = sal_False; 792 sal_Bool bAllowKID = sal_False; 793 sal_Bool bAllowSuspicious = sal_False; 794 String aErrorFilename; |
795 String aCorrectFilename; | 795 String aCorrectFilename; |
796 String aFixedFilename; 797 sal_Bool bFileHasError = sal_False; 798 ByteString aSourceLang( "en-US" ); // English is default | 796 String aFixedFilename; 797 sal_Bool bFileHasError = sal_False; 798 ByteString aSourceLang( "en-US" ); // English is default |
799 ByteString aFilename; | 799 ByteString aFilename; |
800 ByteString aReferenceFilename; 801 sal_Bool bReferenceFile = sal_False; | 800 ByteString aReferenceFilename; 801 sal_Bool bReferenceFile = sal_False; |
802 for ( sal_uInt16 i = 1 ; i < argc ; i++ ) 803 { 804 if ( *argv[ i ] == '-' ) 805 { 806 switch (*(argv[ i ]+1)) 807 { 808 case 'c':bPrintContext = sal_True; 809 break; 810 case 'w': 811 { 812 if ( (*(argv[ i ]+2)) == 'e' ) | 802 for ( sal_uInt16 i = 1 ; i < argc ; i++ ) 803 { 804 if ( *argv[ i ] == '-' ) 805 { 806 switch (*(argv[ i ]+1)) 807 { 808 case 'c':bPrintContext = sal_True; 809 break; 810 case 'w': 811 { 812 if ( (*(argv[ i ]+2)) == 'e' ) |
813 { 814 if ( (*(argv[ i ]+3)) == 'f' ) 815 if ( (i+1) < argc ) 816 { 817 aErrorFilename = String( argv[ i+1 ], RTL_TEXTENCODING_ASCII_US ); 818 bWriteError = sal_True; 819 i++; 820 } 821 else 822 { 823 fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] ); 824 bError = sal_True; 825 } 826 else 827 bWriteError = sal_True; 828 } | 813 { 814 if ( (*(argv[ i ]+3)) == 'f' ) 815 if ( (i+1) < argc ) 816 { 817 aErrorFilename = String( argv[ i+1 ], RTL_TEXTENCODING_ASCII_US ); 818 bWriteError = sal_True; 819 i++; 820 } 821 else 822 { 823 fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] ); 824 bError = sal_True; 825 } 826 else 827 bWriteError = sal_True; 828 } |
829 else if ( (*(argv[ i ]+2)) == 'c' ) | 829 else if ( (*(argv[ i ]+2)) == 'c' ) |
830 if ( (*(argv[ i ]+3)) == 'f' ) 831 if ( (i+1) < argc ) 832 { 833 aCorrectFilename = String( argv[ i+1 ], RTL_TEXTENCODING_ASCII_US ); 834 bWriteCorrect = sal_True; 835 i++; 836 } 837 else 838 { 839 fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] ); 840 bError = sal_True; 841 } 842 else 843 bWriteCorrect = sal_True; | 830 if ( (*(argv[ i ]+3)) == 'f' ) 831 if ( (i+1) < argc ) 832 { 833 aCorrectFilename = String( argv[ i+1 ], RTL_TEXTENCODING_ASCII_US ); 834 bWriteCorrect = sal_True; 835 i++; 836 } 837 else 838 { 839 fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] ); 840 bError = sal_True; 841 } 842 else 843 bWriteCorrect = sal_True; |
844 else if ( (*(argv[ i ]+2)) == 'f' ) | 844 else if ( (*(argv[ i ]+2)) == 'f' ) |
845 if ( (*(argv[ i ]+3)) == 'f' ) 846 if ( (i+1) < argc ) 847 { 848 aFixedFilename = String( argv[ i+1 ], RTL_TEXTENCODING_ASCII_US ); 849 bWriteFixed = sal_True; 850 bFixTags = sal_True; 851 i++; 852 } 853 else 854 { 855 fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] ); 856 bError = sal_True; 857 } 858 else 859 { 860 bWriteFixed = sal_True; 861 bFixTags = sal_True; 862 } | 845 if ( (*(argv[ i ]+3)) == 'f' ) 846 if ( (i+1) < argc ) 847 { 848 aFixedFilename = String( argv[ i+1 ], RTL_TEXTENCODING_ASCII_US ); 849 bWriteFixed = sal_True; 850 bFixTags = sal_True; 851 i++; 852 } 853 else 854 { 855 fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] ); 856 bError = sal_True; 857 } 858 else 859 { 860 bWriteFixed = sal_True; 861 bFixTags = sal_True; 862 } |
863 else 864 { 865 fprintf( stderr, "\nERROR: Unknown Switch %s!\n\n", argv[ i ] ); 866 bError = sal_True; 867 } 868 } 869 break; 870 case 's':bCheckSourceLang = sal_True; 871 break; 872 case 't':bCheckTranslationLang = sal_True; 873 break; 874 case 'l': | 863 else 864 { 865 fprintf( stderr, "\nERROR: Unknown Switch %s!\n\n", argv[ i ] ); 866 bError = sal_True; 867 } 868 } 869 break; 870 case 's':bCheckSourceLang = sal_True; 871 break; 872 case 't':bCheckTranslationLang = sal_True; 873 break; 874 case 'l': |
875 { 876 if ( (i+1) < argc ) 877 { 878 aSourceLang = ByteString( argv[ i+1 ] ); 879 if ( aSourceLang.EqualsIgnoreCaseAscii( "none" ) ) 880 aSourceLang.Erase(); 881 i++; 882 } 883 else 884 { 885 fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] ); 886 bError = sal_True; 887 } 888 } | 875 { 876 if ( (i+1) < argc ) 877 { 878 aSourceLang = ByteString( argv[ i+1 ] ); 879 if ( aSourceLang.EqualsIgnoreCaseAscii( "none" ) ) 880 aSourceLang.Erase(); 881 i++; 882 } 883 else 884 { 885 fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] ); 886 bError = sal_True; 887 } 888 } |
889 break; 890 case 'r': | 889 break; 890 case 'r': |
891 { 892 if ( (i+1) < argc ) 893 { 894 aReferenceFilename = argv[ i+1 ]; 895 bReferenceFile = sal_True; 896 i++; 897 } 898 else 899 { 900 fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] ); 901 bError = sal_True; 902 } 903 } | 891 { 892 if ( (i+1) < argc ) 893 { 894 aReferenceFilename = argv[ i+1 ]; 895 bReferenceFile = sal_True; 896 i++; 897 } 898 else 899 { 900 fprintf( stderr, "\nERROR: Switch %s requires parameter!\n\n", argv[ i ] ); 901 bError = sal_True; 902 } 903 } |
904 break; 905 case 'f': | 904 break; 905 case 'f': |
906 { 907 bFixTags = sal_True; 908 } | 906 { 907 bFixTags = sal_True; 908 } |
909 break; 910 case 'k': | 909 break; 910 case 'k': |
911 { 912 bAllowKID = sal_True; 913 } | 911 { 912 bAllowKID = sal_True; 913 } |
914 break; 915 case 'e': | 914 break; 915 case 'e': |
916 { 917 bAllowSuspicious = sal_True; 918 } | 916 { 917 bAllowSuspicious = sal_True; 918 } |
919 break; 920 default: 921 fprintf( stderr, "\nERROR: Unknown Switch %s!\n\n", argv[ i ] ); 922 bError = sal_True; 923 } 924 } 925 else 926 { --- 9 unchanged lines hidden (view full) --- 936 937 938 if ( !aFilename.Len() || bError ) 939 { 940 Help(); 941 exit ( 0 ); 942 } 943 | 919 break; 920 default: 921 fprintf( stderr, "\nERROR: Unknown Switch %s!\n\n", argv[ i ] ); 922 bError = sal_True; 923 } 924 } 925 else 926 { --- 9 unchanged lines hidden (view full) --- 936 937 938 if ( !aFilename.Len() || bError ) 939 { 940 Help(); 941 exit ( 0 ); 942 } 943 |
944 if ( aSourceLang.Len() && !LanguageOK( aSourceLang ) ) 945 { 946 fprintf( stderr, "\nERROR: The Language '%s' is invalid!\n\n", aSourceLang.GetBuffer() ); | 944 if ( aSourceLang.Len() && !LanguageOK( aSourceLang ) ) 945 { 946 fprintf( stderr, "\nERROR: The Language '%s' is invalid!\n\n", aSourceLang.GetBuffer() ); |
947 Help(); 948 exit ( 1 ); | 947 Help(); 948 exit ( 1 ); |
949 } | 949 } |
950 951 if ( bCheckSourceLang && bCheckTranslationLang ) | 950 951 if ( bCheckSourceLang && bCheckTranslationLang ) |
952 { 953 fprintf( stderr, "\nERROR: The Options -s and -t are mutually exclusive.\nUse only one of them.\n\n" ); | 952 { 953 fprintf( stderr, "\nERROR: The Options -s and -t are mutually exclusive.\nUse only one of them.\n\n" ); |
954 Help(); 955 exit ( 1 ); | 954 Help(); 955 exit ( 1 ); |
956 } | 956 } |
957 958 959 960 DirEntry aSource = DirEntry( String( aFilename, RTL_TEXTENCODING_ASCII_US )); 961 if ( !aSource.Exists()) { 962 fprintf( stderr, "\nERROR: GSI-File %s not found!\n\n", aFilename.GetBuffer() ); 963 exit ( 2 ); 964 } 965 966 SvFileStream aGSI( String( aFilename, RTL_TEXTENCODING_ASCII_US ), STREAM_STD_READ ); 967 if ( !aGSI.IsOpen()) { 968 fprintf( stderr, "\nERROR: Could not open GSI-File %s!\n\n", aFilename.GetBuffer() ); 969 exit ( 3 ); 970 } 971 | 957 958 959 960 DirEntry aSource = DirEntry( String( aFilename, RTL_TEXTENCODING_ASCII_US )); 961 if ( !aSource.Exists()) { 962 fprintf( stderr, "\nERROR: GSI-File %s not found!\n\n", aFilename.GetBuffer() ); 963 exit ( 2 ); 964 } 965 966 SvFileStream aGSI( String( aFilename, RTL_TEXTENCODING_ASCII_US ), STREAM_STD_READ ); 967 if ( !aGSI.IsOpen()) { 968 fprintf( stderr, "\nERROR: Could not open GSI-File %s!\n\n", aFilename.GetBuffer() ); 969 exit ( 3 ); 970 } 971 |
972 SvFileStream aReferenceGSI; | 972 SvFileStream aReferenceGSI; |
973 if ( bReferenceFile ) | 973 if ( bReferenceFile ) |
974 { 975 DirEntry aReferenceSource = DirEntry( String( aReferenceFilename, RTL_TEXTENCODING_ASCII_US )); 976 if ( !aReferenceSource.Exists()) { 977 fprintf( stderr, "\nERROR: GSI-File %s not found!\n\n", aFilename.GetBuffer() ); 978 exit ( 2 ); 979 } | 974 { 975 DirEntry aReferenceSource = DirEntry( String( aReferenceFilename, RTL_TEXTENCODING_ASCII_US )); 976 if ( !aReferenceSource.Exists()) { 977 fprintf( stderr, "\nERROR: GSI-File %s not found!\n\n", aFilename.GetBuffer() ); 978 exit ( 2 ); 979 } |
980 | 980 |
981 aReferenceGSI.Open( String( aReferenceFilename, RTL_TEXTENCODING_ASCII_US ), STREAM_STD_READ ); 982 if ( !aReferenceGSI.IsOpen()) { 983 fprintf( stderr, "\nERROR: Could not open Input-File %s!\n\n", aFilename.GetBuffer() ); 984 exit ( 3 ); 985 } 986 } | 981 aReferenceGSI.Open( String( aReferenceFilename, RTL_TEXTENCODING_ASCII_US ), STREAM_STD_READ ); 982 if ( !aReferenceGSI.IsOpen()) { 983 fprintf( stderr, "\nERROR: Could not open Input-File %s!\n\n", aFilename.GetBuffer() ); 984 exit ( 3 ); 985 } 986 } |
987 988 LazySvFileStream aOkOut; 989 String aBaseName = aSource.GetBase(); 990 if ( bWriteCorrect ) 991 { | 987 988 LazySvFileStream aOkOut; 989 String aBaseName = aSource.GetBase(); 990 if ( bWriteCorrect ) 991 { |
992 if ( !aCorrectFilename.Len() ) 993 { 994 String sTmpBase( aBaseName ); 995 sTmpBase += String( "_ok", RTL_TEXTENCODING_ASCII_US ); 996 aSource.SetBase( sTmpBase ); 997 aCorrectFilename = aSource.GetFull(); 998 } | 992 if ( !aCorrectFilename.Len() ) 993 { 994 String sTmpBase( aBaseName ); 995 sTmpBase += String( "_ok", RTL_TEXTENCODING_ASCII_US ); 996 aSource.SetBase( sTmpBase ); 997 aCorrectFilename = aSource.GetFull(); 998 } |
999 aOkOut.SetOpenParams( aCorrectFilename , STREAM_STD_WRITE | STREAM_TRUNC ); 1000 } 1001 1002 LazySvFileStream aErrOut; 1003 if ( bWriteError ) 1004 { | 999 aOkOut.SetOpenParams( aCorrectFilename , STREAM_STD_WRITE | STREAM_TRUNC ); 1000 } 1001 1002 LazySvFileStream aErrOut; 1003 if ( bWriteError ) 1004 { |
1005 if ( !aErrorFilename.Len() ) 1006 { 1007 String sTmpBase( aBaseName ); 1008 sTmpBase += String( "_err", RTL_TEXTENCODING_ASCII_US ); 1009 aSource.SetBase( sTmpBase ); 1010 aErrorFilename = aSource.GetFull(); 1011 } | 1005 if ( !aErrorFilename.Len() ) 1006 { 1007 String sTmpBase( aBaseName ); 1008 sTmpBase += String( "_err", RTL_TEXTENCODING_ASCII_US ); 1009 aSource.SetBase( sTmpBase ); 1010 aErrorFilename = aSource.GetFull(); 1011 } |
1012 aErrOut.SetOpenParams( aErrorFilename , STREAM_STD_WRITE | STREAM_TRUNC ); 1013 } 1014 1015 LazySvFileStream aFixOut; 1016 if ( bWriteFixed ) 1017 { | 1012 aErrOut.SetOpenParams( aErrorFilename , STREAM_STD_WRITE | STREAM_TRUNC ); 1013 } 1014 1015 LazySvFileStream aFixOut; 1016 if ( bWriteFixed ) 1017 { |
1018 if ( !aFixedFilename.Len() ) 1019 { 1020 String sTmpBase( aBaseName ); 1021 sTmpBase += String( "_fix", RTL_TEXTENCODING_ASCII_US ); 1022 aSource.SetBase( sTmpBase ); 1023 aFixedFilename = aSource.GetFull(); 1024 } | 1018 if ( !aFixedFilename.Len() ) 1019 { 1020 String sTmpBase( aBaseName ); 1021 sTmpBase += String( "_fix", RTL_TEXTENCODING_ASCII_US ); 1022 aSource.SetBase( sTmpBase ); 1023 aFixedFilename = aSource.GetFull(); 1024 } |
1025 aFixOut.SetOpenParams( aFixedFilename , STREAM_STD_WRITE | STREAM_TRUNC ); 1026 } 1027 1028 | 1025 aFixOut.SetOpenParams( aFixedFilename , STREAM_STD_WRITE | STREAM_TRUNC ); 1026 } 1027 1028 |
1029 ByteString sReferenceLine; | 1029 ByteString sReferenceLine; |
1030 GSILine* pReferenceLine = NULL; | 1030 GSILine* pReferenceLine = NULL; |
1031 ByteString aOldReferenceId("No Valid ID"); // just set to something which can never be an ID | 1031 ByteString aOldReferenceId("No Valid ID"); // just set to something which can never be an ID |
1032 sal_uLong nReferenceLine = 0; 1033 1034 ByteString sGSILine; 1035 GSILine* pGSILine = NULL; | 1032 sal_uLong nReferenceLine = 0; 1033 1034 ByteString sGSILine; 1035 GSILine* pGSILine = NULL; |
1036 ByteString aOldId("No Valid ID"); // just set to something which can never be an ID | 1036 ByteString aOldId("No Valid ID"); // just set to something which can never be an ID |
1037 GSIBlock *pBlock = NULL; 1038 sal_uLong nLine = 0; 1039 1040 while ( !aGSI.IsEof() ) | 1037 GSIBlock *pBlock = NULL; 1038 sal_uLong nLine = 0; 1039 1040 while ( !aGSI.IsEof() ) |
1041 { | 1041 { |
1042 aGSI.ReadLine( sGSILine ); 1043 nLine++; | 1042 aGSI.ReadLine( sGSILine ); 1043 nLine++; |
1044 pGSILine = new GSILine( sGSILine, nLine ); 1045 sal_Bool bDelete = sal_True; | 1044 pGSILine = new GSILine( sGSILine, nLine ); 1045 sal_Bool bDelete = sal_True; |
1046 1047 1048 if ( pGSILine->Len() ) | 1046 1047 1048 if ( pGSILine->Len() ) |
1049 { 1050 if ( FORMAT_UNKNOWN == pGSILine->GetLineFormat() ) 1051 { 1052 PrintError( "Format of line is unknown. Ignoring!", "Line format", pGSILine->Copy( 0,40 ), bPrintContext, pGSILine->GetLineNumber() ); 1053 pGSILine->NotOK(); | 1049 { 1050 if ( FORMAT_UNKNOWN == pGSILine->GetLineFormat() ) 1051 { 1052 PrintError( "Format of line is unknown. Ignoring!", "Line format", pGSILine->Copy( 0,40 ), bPrintContext, pGSILine->GetLineNumber() ); 1053 pGSILine->NotOK(); |
1054 if ( bWriteError ) | 1054 if ( bWriteError ) |
1055 { | 1055 { |
1056 bFileHasError = sal_True; | 1056 bFileHasError = sal_True; |
1057 aErrOut.LazyOpen(); 1058 aErrOut.WriteLine( *pGSILine ); 1059 } 1060 } 1061 else if ( pGSILine->GetLineType().EqualsIgnoreCaseAscii("res-comment") ) 1062 { // ignore comment lines, but write them to Correct Items File 1063 if ( bWriteCorrect ) 1064 { 1065 aOkOut.LazyOpen(); 1066 aOkOut.WriteLine( *pGSILine ); 1067 } 1068 } 1069 else 1070 { 1071 ByteString aId = pGSILine->GetUniqId(); 1072 if ( aId != aOldId ) 1073 { 1074 if ( pBlock ) 1075 { 1076 bFileHasError |= pBlock->CheckSyntax( nLine, aSourceLang.Len() != 0, bFixTags ); | 1057 aErrOut.LazyOpen(); 1058 aErrOut.WriteLine( *pGSILine ); 1059 } 1060 } 1061 else if ( pGSILine->GetLineType().EqualsIgnoreCaseAscii("res-comment") ) 1062 { // ignore comment lines, but write them to Correct Items File 1063 if ( bWriteCorrect ) 1064 { 1065 aOkOut.LazyOpen(); 1066 aOkOut.WriteLine( *pGSILine ); 1067 } 1068 } 1069 else 1070 { 1071 ByteString aId = pGSILine->GetUniqId(); 1072 if ( aId != aOldId ) 1073 { 1074 if ( pBlock ) 1075 { 1076 bFileHasError |= pBlock->CheckSyntax( nLine, aSourceLang.Len() != 0, bFixTags ); |
1077 | 1077 |
1078 if ( bWriteError ) 1079 pBlock->WriteError( aErrOut, aSourceLang.Len() != 0 ); 1080 if ( bWriteCorrect ) 1081 pBlock->WriteCorrect( aOkOut, aSourceLang.Len() != 0 ); 1082 if ( bWriteFixed ) 1083 pBlock->WriteFixed( aFixOut, aSourceLang.Len() != 0 ); | 1078 if ( bWriteError ) 1079 pBlock->WriteError( aErrOut, aSourceLang.Len() != 0 ); 1080 if ( bWriteCorrect ) 1081 pBlock->WriteCorrect( aOkOut, aSourceLang.Len() != 0 ); 1082 if ( bWriteFixed ) 1083 pBlock->WriteFixed( aFixOut, aSourceLang.Len() != 0 ); |
1084 | 1084 |
1085 delete pBlock; 1086 } 1087 pBlock = new GSIBlock( bPrintContext, bCheckSourceLang, bCheckTranslationLang, bReferenceFile, bAllowKID, bAllowSuspicious ); | 1085 delete pBlock; 1086 } 1087 pBlock = new GSIBlock( bPrintContext, bCheckSourceLang, bCheckTranslationLang, bReferenceFile, bAllowKID, bAllowSuspicious ); |
1088 | 1088 |
1089 aOldId = aId; | 1089 aOldId = aId; |
1090 1091 | 1090 1091 |
1092 // find corresponding line in reference file 1093 if ( bReferenceFile ) 1094 { 1095 sal_Bool bContinueSearching = sal_True; 1096 while ( ( !aReferenceGSI.IsEof() || pReferenceLine ) && bContinueSearching ) 1097 { 1098 if ( !pReferenceLine ) 1099 { 1100 aReferenceGSI.ReadLine( sReferenceLine ); 1101 nReferenceLine++; 1102 pReferenceLine = new GSILine( sReferenceLine, nReferenceLine ); 1103 } 1104 if ( pReferenceLine->GetLineFormat() != FORMAT_UNKNOWN ) 1105 { 1106 if ( pReferenceLine->GetUniqId() == aId && pReferenceLine->GetLanguageId().Equals( aSourceLang ) ) 1107 { 1108 pBlock->SetReferenceLine( pReferenceLine ); 1109 pReferenceLine = NULL; 1110 } 1111 else if ( pReferenceLine->GetUniqId() > aId ) 1112 { 1113// if ( pGSILine->GetLanguageId() == aSourceLang ) 1114// PrintError( "No reference line found. Entry is new in source file", "File format", "", bPrintContext, pGSILine->GetLineNumber(), aId ); 1115 bContinueSearching = sal_False; 1116 } 1117 else 1118 { 1119 if ( pReferenceLine->GetUniqId() < aId && pReferenceLine->GetLanguageId().Equals( aSourceLang ) ) 1120 PrintError( "No Entry in source file found. Entry has been removed from source file", "File format", "", bPrintContext, pGSILine->GetLineNumber(), pReferenceLine->GetUniqId() ); 1121 delete pReferenceLine; 1122 pReferenceLine = NULL; 1123 } 1124 } 1125 else 1126 { 1127 delete pReferenceLine; 1128 pReferenceLine = NULL; 1129 } | 1092 // find corresponding line in reference file 1093 if ( bReferenceFile ) 1094 { 1095 sal_Bool bContinueSearching = sal_True; 1096 while ( ( !aReferenceGSI.IsEof() || pReferenceLine ) && bContinueSearching ) 1097 { 1098 if ( !pReferenceLine ) 1099 { 1100 aReferenceGSI.ReadLine( sReferenceLine ); 1101 nReferenceLine++; 1102 pReferenceLine = new GSILine( sReferenceLine, nReferenceLine ); 1103 } 1104 if ( pReferenceLine->GetLineFormat() != FORMAT_UNKNOWN ) 1105 { 1106 if ( pReferenceLine->GetUniqId() == aId && pReferenceLine->GetLanguageId().Equals( aSourceLang ) ) 1107 { 1108 pBlock->SetReferenceLine( pReferenceLine ); 1109 pReferenceLine = NULL; 1110 } 1111 else if ( pReferenceLine->GetUniqId() > aId ) 1112 { 1113// if ( pGSILine->GetLanguageId() == aSourceLang ) 1114// PrintError( "No reference line found. Entry is new in source file", "File format", "", bPrintContext, pGSILine->GetLineNumber(), aId ); 1115 bContinueSearching = sal_False; 1116 } 1117 else 1118 { 1119 if ( pReferenceLine->GetUniqId() < aId && pReferenceLine->GetLanguageId().Equals( aSourceLang ) ) 1120 PrintError( "No Entry in source file found. Entry has been removed from source file", "File format", "", bPrintContext, pGSILine->GetLineNumber(), pReferenceLine->GetUniqId() ); 1121 delete pReferenceLine; 1122 pReferenceLine = NULL; 1123 } 1124 } 1125 else 1126 { 1127 delete pReferenceLine; 1128 pReferenceLine = NULL; 1129 } |
1130 | 1130 |
1131 } 1132 } | 1131 } 1132 } |
1133 | 1133 |
1134 } | 1134 } |
1135 | 1135 |
1136 pBlock->InsertLine( pGSILine, aSourceLang ); 1137 bDelete = sal_False; 1138 } | 1136 pBlock->InsertLine( pGSILine, aSourceLang ); 1137 bDelete = sal_False; 1138 } |
1139 } | 1139 } |
1140 if ( bDelete ) 1141 delete pGSILine; | 1140 if ( bDelete ) 1141 delete pGSILine; |
1142 1143 } 1144 if ( pBlock ) 1145 { 1146 bFileHasError |= pBlock->CheckSyntax( nLine, aSourceLang.Len() != 0, bFixTags ); 1147 1148 if ( bWriteError ) 1149 pBlock->WriteError( aErrOut, aSourceLang.Len() != 0 ); --- 8 unchanged lines hidden (view full) --- 1158 1159 if ( bWriteError ) 1160 aErrOut.Close(); 1161 if ( bWriteCorrect ) 1162 aOkOut.Close(); 1163 if ( bWriteFixed ) 1164 aFixOut.Close(); 1165 | 1142 1143 } 1144 if ( pBlock ) 1145 { 1146 bFileHasError |= pBlock->CheckSyntax( nLine, aSourceLang.Len() != 0, bFixTags ); 1147 1148 if ( bWriteError ) 1149 pBlock->WriteError( aErrOut, aSourceLang.Len() != 0 ); --- 8 unchanged lines hidden (view full) --- 1158 1159 if ( bWriteError ) 1160 aErrOut.Close(); 1161 if ( bWriteCorrect ) 1162 aOkOut.Close(); 1163 if ( bWriteFixed ) 1164 aFixOut.Close(); 1165 |
1166 if ( bFileHasError ) 1167 return 55; 1168 else 1169 return 0; | 1166 if ( bFileHasError ) 1167 return 55; 1168 else 1169 return 0; |
1170} | 1170} |