1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-06-18 00:49:50 +02:00

* dynload.h: Always use it for _WIN32.

* LINGUAS: Better don't have comments in this file.

* mk-w32-dist: Use utf-8 encoding for all MO files.

* simple-gettext.c: Removed windows.h.
(get_string): On the fly translation from utf-8 to active
character set.

* strgutil.c (load_libiconv) [_WIN32]: new.
(set_native_charset) [_WIN32]: Call it here and autodetect the
used code page.
(native_to_utf8, utf8_to_native): Reverted arguments for
iconv_open.
(handle_iconv_error): Made this function match iconv_open argumnet
ordering.
(utf8_to_native): Disable all quoting for DELIM == -1.
This commit is contained in:
Werner Koch 2004-10-27 16:32:51 +00:00
parent ea62673cdc
commit e216c20f40
36 changed files with 5132 additions and 5409 deletions

View File

@ -1,3 +1,7 @@
2004-10-27 Werner Koch <wk@g10code.com>
* dynload.h: Always use it for _WIN32.
2004-10-21 Werner Koch <wk@g10code.com>
* util.h [!HAVE_VASPRINTF]: Removed prototype.

View File

@ -20,7 +20,7 @@
#ifndef GNUPG_DYNLOAD_H
#define GNUPG_DYNLOAD_H
#ifdef ENABLE_CARD_SUPPORT
#if defined (ENABLE_CARD_SUPPORT) || defined(_WIN32)
#ifndef _WIN32
#include <dlfcn.h>
#else
@ -68,6 +68,6 @@ dlclose (void * hd)
}
return -1;
}
#endif /*__MINGW32__*/
#endif /*ENABLE_CARD_SUPPORT*/
#endif /*_WIN32*/
#endif /*ENABLE_CARD_SUPPORT||_WIN32*/
#endif /*GNUPG_DYNLOAD_H*/

View File

@ -1,3 +1,7 @@
2004-10-27 Werner Koch <wk@g10code.com>
* LINGUAS: Better don't have comments in this file.
2004-10-15 Werner Koch <wk@g10code.com>
* POTFILES.in: Updated.

View File

@ -1,4 +1,3 @@
# Set of available languages.
en@quot en@boldquot
be
ca cs

379
po/be.po

File diff suppressed because it is too large Load Diff

379
po/ca.po

File diff suppressed because it is too large Load Diff

379
po/cs.po

File diff suppressed because it is too large Load Diff

379
po/da.po

File diff suppressed because it is too large Load Diff

379
po/de.po

File diff suppressed because it is too large Load Diff

379
po/el.po

File diff suppressed because it is too large Load Diff

379
po/eo.po

File diff suppressed because it is too large Load Diff

379
po/es.po

File diff suppressed because it is too large Load Diff

379
po/et.po

File diff suppressed because it is too large Load Diff

379
po/fi.po

File diff suppressed because it is too large Load Diff

379
po/fr.po

File diff suppressed because it is too large Load Diff

379
po/gl.po

File diff suppressed because it is too large Load Diff

379
po/hu.po

File diff suppressed because it is too large Load Diff

379
po/id.po

File diff suppressed because it is too large Load Diff

379
po/it.po

File diff suppressed because it is too large Load Diff

379
po/ja.po

File diff suppressed because it is too large Load Diff

379
po/nl.po

File diff suppressed because it is too large Load Diff

379
po/pl.po

File diff suppressed because it is too large Load Diff

379
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

379
po/ro.po

File diff suppressed because it is too large Load Diff

379
po/ru.po

File diff suppressed because it is too large Load Diff

379
po/sk.po

File diff suppressed because it is too large Load Diff

379
po/sv.po

File diff suppressed because it is too large Load Diff

379
po/tr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,7 @@
2004-10-27 Werner Koch <wk@g10code.com>
* mk-w32-dist: Use utf-8 encoding for all MO files.
2004-10-26 Werner Koch <wk@g10code.com>
* autogen.sh: Detect the Debian mingw32 package.

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
# Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
@ -31,21 +31,28 @@ else
exit 1
fi
version=$(sed -n 's/^#[ ]*define[ ][ ]*VERSION[ ][ ]*\"\([0-9.]*\)\"/\1/p' $bindir/config.h)
if i586-mingw32msvc-strip --version >/dev/null 2>&1 ; then
STRIP=i586-mingw32msvc-strip
else
STRIP="mingw32 strip"
fi
version=$(sed -n 's/^#[ ]*define[ ][ ]*VERSION[ ][ ]*\"\([0-9.a-z-]*\)\"/\1/p' $bindir/config.h)
echo "building version $version"
rm * || true
rm * 2>/dev/null || true
cp ${bindir}/g10/gpg.exe gpg.exe
mingw32 strip gpg.exe
$STRIP gpg.exe
cp ${bindir}/g10/gpgv.exe gpgv.exe
mingw32 strip gpgv.exe
cp ${bindir}/keyserver/gpgkeys_ldap.exe gpgkeys_ldap.exe
mingw32 strip gpgkeys_ldap.exe
cp ${bindir}/keyserver/gpgkeys_hkp.exe gpgkeys_hkp.exe
mingw32 strip gpgkeys_hkp.exe
$STRIP gpgv.exe
for name in hkp http finger; do
cp ${bindir}/keyserver/gpgkeys_$name.exe gpgkeys_$name.exe
$STRIP gpgkeys_$name.exe
done
cp ${bindir}/tools/gpgsplit.exe gpgsplit.exe
mingw32 strip gpgsplit.exe
$STRIP gpgsplit.exe
for i in FAQ; do
cp ${bindir}/doc/$i .
@ -66,31 +73,24 @@ for i in README.W32 gnupg-w32.reg; do
todos $i
done
# We must distribute the MO files in UTF-8, the conmversion is done by
# gpg at runtime.
for i in ${srcdir}/po/*.po; do
lang=$(basename $i .po)
grep -s $lang ${srcdir}/po/LINGUAS >/dev/null || continue
fromset=`sed -n '/^"Content-Type:/ s/.*charset=\([a-zA-Z0-9_-]*\).*/\1/p' $i`
# pl,sk are also cp1250 but the current PO file can't be converted.
case $lang in
cs|hu|ro) toset="CP852" ;;
tr) toset="CP1254" ;; # DOS: CP857
el) toset="CP1253" ;; # same as latin-7?
ru|be) toset="CP1251" ;; # same as latin-7?
el|eo|et|ja|pl|sk|zh_TW|zh_CN) toset="" ;;
*) toset="CP850" ;;
esac
if [ -n "$toset" ]; then
echo "$lang: converting from $fromset to $toset" >&2
iconv --silent --from-code=$fromset --to-code=$toset < $i | \
sed "/^\"Content-Type:/ s/charset=[a-zA-Z0-9_-]*/charset=$toset/" | \
msgfmt --output-file=$lang.mo -
else
case "$fromset" in
utf8|utf-8|UTF8|UTF-8)
echo "$lang: keeping $fromset" >&2
msgfmt --output-file=$lang.mo $i
fi
;;
*)
echo "$lang: converting from $fromset to utf-8" >&2
iconv --silent --from-code=$fromset --to-code=utf-8 < $i | \
sed "/^\"Content-Type:/ s/charset=[a-zA-Z0-9_-]*/charset=utf-8/" | \
msgfmt --output-file=$lang.mo -
;;
esac
done
zip -9 "gnupg-w32cli-${version}.zip" *

View File

@ -1,5 +1,9 @@
2004-10-27 Werner Koch <wk@g10code.com>
* simple-gettext.c: Removed windows.h.
(get_string): On the fly translation from utf-8 to active
character set.
* strgutil.c (load_libiconv) [_WIN32]: new.
(set_native_charset) [_WIN32]: Call it here and autodetect the
used code page.
@ -7,7 +11,8 @@
iconv_open.
(handle_iconv_error): Made this function match iconv_open argumnet
ordering.
(utf8_to_native): Disable all quoting for DELIM == -1.
2004-10-26 Werner Koch <wk@g10code.com>
* strgutil.c (mem2str): Translated comment to English.

View File

@ -28,7 +28,7 @@
#include <config.h>
#ifdef USE_SIMPLE_GETTEXT
#if !defined (_WIN32) && !defined (__CYGWIN32__)
#error This file can only be used udner Windows or Cygwin32
#error This file can only be used under Windows or Cygwin32
#endif
#include <stdio.h>
@ -38,7 +38,6 @@
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <windows.h>
#include "types.h"
#include "util.h"
@ -79,13 +78,22 @@ struct string_desc
};
struct overflow_space_s
{
struct overflow_space_s *next;
u32 idx;
char d[1];
};
struct loaded_domain
{
char *data;
int must_swap;
u32 nstrings;
/* char *mapped; */
char *mapped; /* 0 = not yet mapped, 1 = mapped,
2 = mapped to
overflow space */
struct overflow_space_s *overflow_space;
struct string_desc *orig_tab;
struct string_desc *trans_tab;
u32 hash_size;
@ -210,13 +218,13 @@ load_domain( const char *filename )
return NULL;
}
/* allocate an array to keep track of code page mappings */
/* domain->mapped = calloc( 1, domain->nstrings ); */
/* if( !domain->mapped ) { */
/* free( data ); */
/* free( domain ); */
/* return NULL; */
/* } */
/* Allocate an array to keep track of code page mappings. */
domain->mapped = calloc( 1, domain->nstrings );
if( !domain->mapped ) {
free( data );
free( domain );
return NULL;
}
return domain;
}
@ -225,7 +233,7 @@ load_domain( const char *filename )
/****************
* Set the file used for translations. Pass a NULL to disable
* translation. A new filename may be set at anytime.
* WARNING: After changing the filename you shoudl not access any data
* WARNING: After changing the filename you should not access any data
* retrieved by gettext().
*/
int
@ -272,136 +280,69 @@ set_gettext_file( const char *filename )
}
if( the_domain ) {
struct overflow_space_s *os, *os2;
free( the_domain->data );
/* free( the_domain->mapped ); */
free( the_domain->mapped );
for (os=the_domain->overflow_space; os; os = os2) {
os2 = os->next;
free (os);
}
free( the_domain );
the_domain = NULL;
}
the_domain = domain;
return NULL;
return 0;
}
static const char*
get_string( struct loaded_domain *domain, u32 idx )
{
char *p = domain->data + SWAPIT(domain->must_swap,
domain->trans_tab[idx].offset);
#if 0 /* Mapping is not used any more. Instead we convert the files when
Creating the binary distribution. */
if( !domain->mapped[idx] ) {
byte *pp;
struct overflow_space_s *os;
char *p;
domain->mapped[idx] = 1;
/* we assume Latin1 -> CP 850 for now */
for( pp=p; *pp; pp++ ) {
if( (*pp & 0x80) ) {
switch( *pp ) {
/* ISO-8859-1 to IBM-CP-850 */
case 0xa0: *pp = '\xff' ; break; /* nobreakspace */
case 0xa1: *pp = '\xad' ; break; /* exclamdown */
case 0xa2: *pp = '\xbd' ; break; /* cent */
case 0xa3: *pp = '\x9c' ; break; /* sterling */
case 0xa4: *pp = '\xcf' ; break; /* currency */
case 0xa5: *pp = '\xbe' ; break; /* yen */
case 0xa6: *pp = '\xdd' ; break; /* brokenbar */
case 0xa7: *pp = '\xf5' ; break; /* section */
case 0xa8: *pp = '\xf9' ; break; /* diaeresis */
case 0xa9: *pp = '\xb8' ; break; /* copyright */
case 0xaa: *pp = '\xa6' ; break; /* ordfeminine */
case 0xab: *pp = '\xae' ; break; /* guillemotleft */
case 0xac: *pp = '\xaa' ; break; /* notsign */
case 0xad: *pp = '\xf0' ; break; /* hyphen */
case 0xae: *pp = '\xa9' ; break; /* registered */
case 0xaf: *pp = '\xee' ; break; /* macron */
case 0xb0: *pp = '\xf8' ; break; /* degree */
case 0xb1: *pp = '\xf1' ; break; /* plusminus */
case 0xb2: *pp = '\xfd' ; break; /* twosuperior */
case 0xb3: *pp = '\xfc' ; break; /* threesuperior */
case 0xb4: *pp = '\xef' ; break; /* acute */
case 0xb5: *pp = '\xe6' ; break; /* mu */
case 0xb6: *pp = '\xf4' ; break; /* paragraph */
case 0xb7: *pp = '\xfa' ; break; /* periodcentered */
case 0xb8: *pp = '\xf7' ; break; /* cedilla */
case 0xb9: *pp = '\xfb' ; break; /* onesuperior */
case 0xba: *pp = '\xa7' ; break; /* masculine */
case 0xbb: *pp = '\xaf' ; break; /* guillemotright */
case 0xbc: *pp = '\xac' ; break; /* onequarter */
case 0xbd: *pp = '\xab' ; break; /* onehalf */
case 0xbe: *pp = '\xf3' ; break; /* threequarters */
case 0xbf: *pp = '\xa8' ; break; /* questiondown */
case 0xc0: *pp = '\xb7' ; break; /* Agrave */
case 0xc1: *pp = '\xb5' ; break; /* Aacute */
case 0xc2: *pp = '\xb6' ; break; /* Acircumflex */
case 0xc3: *pp = '\xc7' ; break; /* Atilde */
case 0xc4: *pp = '\x8e' ; break; /* Adiaeresis */
case 0xc5: *pp = '\x8f' ; break; /* Aring */
case 0xc6: *pp = '\x92' ; break; /* AE */
case 0xc7: *pp = '\x80' ; break; /* Ccedilla */
case 0xc8: *pp = '\xd4' ; break; /* Egrave */
case 0xc9: *pp = '\x90' ; break; /* Eacute */
case 0xca: *pp = '\xd2' ; break; /* Ecircumflex */
case 0xcb: *pp = '\xd3' ; break; /* Ediaeresis */
case 0xcc: *pp = '\xde' ; break; /* Igrave */
case 0xcd: *pp = '\xd6' ; break; /* Iacute */
case 0xce: *pp = '\xd7' ; break; /* Icircumflex */
case 0xcf: *pp = '\xd8' ; break; /* Idiaeresis */
case 0xd0: *pp = '\xd1' ; break; /* Eth */
case 0xd1: *pp = '\xa5' ; break; /* Ntilde */
case 0xd2: *pp = '\xe3' ; break; /* Ograve */
case 0xd3: *pp = '\xe0' ; break; /* Oacute */
case 0xd4: *pp = '\xe2' ; break; /* Ocircumflex */
case 0xd5: *pp = '\xe5' ; break; /* Otilde */
case 0xd6: *pp = '\x99' ; break; /* Odiaeresis */
case 0xd7: *pp = '\x9e' ; break; /* multiply */
case 0xd8: *pp = '\x9d' ; break; /* Ooblique */
case 0xd9: *pp = '\xeb' ; break; /* Ugrave */
case 0xda: *pp = '\xe9' ; break; /* Uacute */
case 0xdb: *pp = '\xea' ; break; /* Ucircumflex */
case 0xdc: *pp = '\x9a' ; break; /* Udiaeresis */
case 0xdd: *pp = '\xed' ; break; /* Yacute */
case 0xde: *pp = '\xe8' ; break; /* Thorn */
case 0xdf: *pp = '\xe1' ; break; /* ssharp */
case 0xe0: *pp = '\x85' ; break; /* agrave */
case 0xe1: *pp = '\xa0' ; break; /* aacute */
case 0xe2: *pp = '\x83' ; break; /* acircumflex */
case 0xe3: *pp = '\xc6' ; break; /* atilde */
case 0xe4: *pp = '\x84' ; break; /* adiaeresis */
case 0xe5: *pp = '\x86' ; break; /* aring */
case 0xe6: *pp = '\x91' ; break; /* ae */
case 0xe7: *pp = '\x87' ; break; /* ccedilla */
case 0xe8: *pp = '\x8a' ; break; /* egrave */
case 0xe9: *pp = '\x82' ; break; /* eacute */
case 0xea: *pp = '\x88' ; break; /* ecircumflex */
case 0xeb: *pp = '\x89' ; break; /* ediaeresis */
case 0xec: *pp = '\x8d' ; break; /* igrave */
case 0xed: *pp = '\xa1' ; break; /* iacute */
case 0xee: *pp = '\x8c' ; break; /* icircumflex */
case 0xef: *pp = '\x8b' ; break; /* idiaeresis */
case 0xf0: *pp = '\xd0' ; break; /* eth */
case 0xf1: *pp = '\xa4' ; break; /* ntilde */
case 0xf2: *pp = '\x95' ; break; /* ograve */
case 0xf3: *pp = '\xa2' ; break; /* oacute */
case 0xf4: *pp = '\x93' ; break; /* ocircumflex */
case 0xf5: *pp = '\xe4' ; break; /* otilde */
case 0xf6: *pp = '\x94' ; break; /* odiaeresis */
case 0xf7: *pp = '\xf6' ; break; /* division */
case 0xf8: *pp = '\x9b' ; break; /* oslash */
case 0xf9: *pp = '\x97' ; break; /* ugrave */
case 0xfa: *pp = '\xa3' ; break; /* uacute */
case 0xfb: *pp = '\x96' ; break; /* ucircumflex */
case 0xfc: *pp = '\x81' ; break; /* udiaeresis */
case 0xfd: *pp = '\xec' ; break; /* yacute */
case 0xfe: *pp = '\xe7' ; break; /* thorn */
case 0xff: *pp = '\x98' ; break; /* ydiaeresis */
default : break;
}
}
}
p = domain->data + SWAPIT(domain->must_swap, domain->trans_tab[idx].offset);
if (!domain->mapped[idx])
{
size_t plen, buflen;
char *buf;
static int debug_hack;
domain->mapped[idx] = 1;
plen = strlen (p);
buf = utf8_to_native (p, plen, -1);
buflen = strlen (buf);
if (buflen <= plen && (++debug_hack %3))
strcpy (p, buf);
else
{
/* There is not enough space for the translation - store it
in the overflow_space else and mark that in the mapped
array. Because we expect that this won't happen too
often, we use a simple linked list. */
os = malloc (sizeof *os + buflen);
if (os)
{
os->idx = idx;
strcpy (os->d, buf);
os->next = domain->overflow_space;
domain->overflow_space = os;
p = os->d;
}
else
p = "ERROR in GETTEXT MALLOC";
}
m_free (buf);
}
#endif /* unused code */
return (const char*)p;
else if (domain->mapped[idx] == 2)
{ /* We need to get the string from the overflow_space. */
for (os=domain->overflow_space; os; os = os->next)
if (os->idx == idx)
return (const char*)os->d;
p = "ERROR in GETTEXT\n";
}
return (const char*)p;
}

View File

@ -480,10 +480,17 @@ set_native_charset( const char *newset )
#ifdef _WIN32
static char codepage[30];
sprintf (codepage, "CP%u", (unsigned int)GetACP ());
/* If it is the Windows name for Latin-1 we use the
* standard name instead to avoid loading of iconv.dll. */
/* We are a console program thus we need to use the
GetConsoleOutputCP fucntion and not the the GetACP which
would give the codepage for a GUI program. Note this is
not a bulletproof detection because GetConsoleCP might
retrun a different one for console input. Not sure how to
cope with that. */
sprintf (codepage, "CP%u", (unsigned int)GetConsoleOutputCP ());
/* If it is the Windows name for Latin-1 we use the standard
name instead to avoid loading of iconv.dll. Unfortunately
it is often CP850 and we don't have a custom translation
for it. */
if (!strcmp (codepage, "CP1252"))
newset = "iso-8859-1";
else
@ -688,8 +695,9 @@ native_to_utf8( const char *string )
* Convert string, which is in UTF8 to native encoding. illegal
* encodings by some "\xnn" and quote all control characters. A
* character with value DELIM will always be quoted, it must be a
* vanilla ASCII character.
*/
* vanilla ASCII character. A DELIM value of -1 is special: it disables
* all quoting of control characters.
*/
char *
utf8_to_native( const char *string, size_t length, int delim )
{
@ -722,8 +730,9 @@ utf8_to_native( const char *string, size_t length, int delim )
}
if( !nleft ) {
if( !(*s & 0x80) ) { /* plain ascii */
if( *s < 0x20 || *s == 0x7f || *s == delim ||
(delim && *s=='\\')) {
if( delim != -1
&& (*s < 0x20 || *s == 0x7f || *s == delim
|| (delim && *s=='\\'))) {
n++;
if( p )
*p++ = '\\';