From 79abf559130b269333f3a73ece9c22b033eb3358 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Thu, 26 Aug 2010 22:41:55 +0000 Subject: [PATCH] 2010-08-27 00:40 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * src/rtl/hbi18n2.prg + __I18N_POTARRAYSAVE(): new lUTF8BOM parameter. * utils/hbmk2/hbmk2.prg + Retain UTF8 BOM in .po files. --- harbour/ChangeLog | 7 +++++++ harbour/src/rtl/hbi18n2.prg | 13 +++++++++---- harbour/utils/hbmk2/hbmk2.prg | 21 ++++++++++++++++++++- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index f19f3c51cb..c3e88c4537 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,13 @@ The license applies to all entries newer than 2009-04-28. */ +2010-08-27 00:40 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * src/rtl/hbi18n2.prg + + __I18N_POTARRAYSAVE(): new lUTF8BOM parameter. + + * utils/hbmk2/hbmk2.prg + + Retain UTF8 BOM in .po files. + 2010-08-27 00:01 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt) * harbour/contrib/sddodbc/tests/test2.prg ! reverted accidentally changed file in last commit diff --git a/harbour/src/rtl/hbi18n2.prg b/harbour/src/rtl/hbi18n2.prg index a26c435193..f40d086e21 100644 --- a/harbour/src/rtl/hbi18n2.prg +++ b/harbour/src/rtl/hbi18n2.prg @@ -98,6 +98,7 @@ STATIC FUNCTION __I18N_strDecode( cLine, cValue, lCont ) RETURN lRet +#define _UTF8_BOM e"\xEF\xBB\xBF" FUNCTION __I18N_POTARRAYLOAD( cFile, cErrorMsg ) LOCAL cLine, cValue @@ -121,8 +122,8 @@ FUNCTION __I18N_POTARRAYLOAD( cFile, cErrorMsg ) RETURN NIL ENDIF /* Strip UTF-8 BOM */ - IF Left( cValue, 3 ) == e"\xEF\xBB\xBF" - cValue := SubStr( cValue, 4 ) + IF Left( cValue, Len( _UTF8_BOM ) ) == _UTF8_BOM + cValue := SubStr( cValue, Len( _UTF8_BOM ) + 1 ) ENDIF IF !hb_eol() == _I18N_EOL cValue := strtran( cValue, hb_eol(), _I18N_EOL ) @@ -298,7 +299,7 @@ FUNCTION __I18N_POTARRAYLOAD( cFile, cErrorMsg ) RETURN aTrans -FUNCTION __I18N_POTARRAYSAVE( cFile, aTrans, cErrorMsg, lVersionNo, lSourceRef ) +FUNCTION __I18N_POTARRAYSAVE( cFile, aTrans, cErrorMsg, lVersionNo, lSourceRef, lUTF8BOM ) LOCAL aItem LOCAL hFile LOCAL lRet, lPlural @@ -311,11 +312,15 @@ FUNCTION __I18N_POTARRAYSAVE( cFile, aTrans, cErrorMsg, lVersionNo, lSourceRef ) IF ! ISLOGICAL( lSourceRef ) lSourceRef := .T. ENDIF + IF ! ISLOGICAL( lUTF8BOM ) + lUTF8BOM := .T. + ENDIF lRet := .F. cEol := hb_eol() cFlg := "#, c-format" + cEol - cPOT := "#" + cEol + ; + cPOT := iif( lUTF8BOM, _UTF8_BOM + cEol, "" ) + ; /* Put it in separate line to less confuse non-BOM aware parsers */ + "#" + cEol + ; "# This file is generated by " + iif( lVersionNo, hb_version(), "Harbour" ) + cEol + ; "#" + cEol FOR EACH aItem IN aTrans diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 02450b6cdc..4fa69edd41 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -10164,9 +10164,11 @@ STATIC PROCEDURE POTMerge( hbmk, aFiles, cFileBase, cFileOut ) STATIC PROCEDURE AutoTrans( hbmk, cFileIn, aFiles, cFileOut ) LOCAL cErrorMsg + LOCAL lUTF8BOM := IsBOM_UTF8( cFileOut ) + IF ! __i18n_potArraySave( cFileOut, ; __i18n_potArrayTrans( LoadPOTFiles( hbmk, {}, cFileIn, .F. ), ; - LoadPOTFilesAsHash( hbmk, aFiles ) ), @cErrorMsg, ! hbmk[ _HBMK_lMINIPO ], ! hbmk[ _HBMK_lMINIPO ] ) + LoadPOTFilesAsHash( hbmk, aFiles ) ), @cErrorMsg, ! hbmk[ _HBMK_lMINIPO ], ! hbmk[ _HBMK_lMINIPO ], lUTF8BOM ) hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: %1$s" ), cErrorMsg ) ) ENDIF @@ -10190,6 +10192,23 @@ STATIC FUNCTION GenHBL( hbmk, aFiles, cFileOut, lEmpty ) RETURN lRetVal +#define _UTF8_BOM e"\xEF\xBB\xBF" + +STATIC FUNCTION IsBOM_UTF8( cFileName ) + LOCAL fhnd := FOpen( cFileName, FO_READ ) + LOCAL cBuffer + + IF fhnd != F_ERROR + cBuffer := Space( Len( _UTF8_BOM ) ) + FRead( fhnd, @cBuffer, Len( cBuffer ) ) + FClose( fhnd ) + IF cBuffer == _UTF8_BOM + RETURN .T. + ENDIF + ENDIF + + RETURN .F. + STATIC FUNCTION win_implib_command( hbmk, cCommand, cSourceDLL, cTargetLib, cFlags ) IF ! hb_FileExists( cSourceDLL )