[subset-cff] Make BCD writing locale-independent
This commit is contained in:
parent
4a735b30c4
commit
5b50b07717
|
@ -29,32 +29,6 @@
|
||||||
#include "hb.hh"
|
#include "hb.hh"
|
||||||
#include "hb-machinery.hh"
|
#include "hb-machinery.hh"
|
||||||
|
|
||||||
#if !defined(HB_NO_SETLOCALE) && (!defined(HAVE_NEWLOCALE) || !defined(HAVE_USELOCALE))
|
|
||||||
#define HB_NO_SETLOCALE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef HB_NO_SETLOCALE
|
|
||||||
|
|
||||||
#include <locale.h>
|
|
||||||
#ifdef HAVE_XLOCALE_H
|
|
||||||
#include <xlocale.h> // Needed on BSD/OS X for uselocale
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WIN32
|
|
||||||
#define hb_locale_t _locale_t
|
|
||||||
#else
|
|
||||||
#define hb_locale_t locale_t
|
|
||||||
#endif
|
|
||||||
#define hb_setlocale setlocale
|
|
||||||
#define hb_uselocale uselocale
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define hb_locale_t void *
|
|
||||||
#define hb_setlocale(Category, Locale) "C"
|
|
||||||
#define hb_uselocale(Locale) ((hb_locale_t) 0)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SECTION:hb-common
|
* SECTION:hb-common
|
||||||
|
|
|
@ -125,7 +125,13 @@ struct str_encoder_t
|
||||||
*
|
*
|
||||||
* We use 8 here to match FontTools X-).
|
* We use 8 here to match FontTools X-).
|
||||||
*/
|
*/
|
||||||
snprintf (buf, sizeof (buf), "%.8G", v); // XXX This is locale-sensitive; Ugh
|
|
||||||
|
hb_locale_t clocale HB_UNUSED;
|
||||||
|
hb_locale_t oldlocale HB_UNUSED;
|
||||||
|
oldlocale = hb_uselocale (clocale = newlocale (LC_ALL_MASK, "C", NULL));
|
||||||
|
snprintf (buf, sizeof (buf), "%.8G", v);
|
||||||
|
(void) hb_uselocale (((void) freelocale (clocale), oldlocale));
|
||||||
|
|
||||||
char *s = buf;
|
char *s = buf;
|
||||||
if (s[0] == '0' && s[1] == '.')
|
if (s[0] == '0' && s[1] == '.')
|
||||||
s++;
|
s++;
|
||||||
|
@ -157,7 +163,7 @@ struct str_encoder_t
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
case '.': case ',': // Comma for some European locales!!!
|
case '.': case ',': // Comma for some European locales in case no uselocale available.
|
||||||
nibbles.push (0x0A); // .
|
nibbles.push (0x0A); // .
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
31
src/hb.hh
31
src/hb.hh
|
@ -463,6 +463,37 @@ static int HB_UNUSED _hb_errno = 0;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// Locale business
|
||||||
|
|
||||||
|
#if !defined(HB_NO_SETLOCALE) && (!defined(HAVE_NEWLOCALE) || !defined(HAVE_USELOCALE))
|
||||||
|
#define HB_NO_SETLOCALE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HB_NO_SETLOCALE
|
||||||
|
|
||||||
|
#include <locale.h>
|
||||||
|
#ifdef HAVE_XLOCALE_H
|
||||||
|
#include <xlocale.h> // Needed on BSD/OS X for uselocale
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#define hb_locale_t _locale_t
|
||||||
|
#else
|
||||||
|
#define hb_locale_t locale_t
|
||||||
|
#endif
|
||||||
|
#define hb_setlocale setlocale
|
||||||
|
#define hb_uselocale uselocale
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define hb_locale_t void *
|
||||||
|
#define hb_setlocale(Category, Locale) "C"
|
||||||
|
#define hb_uselocale(Locale) ((hb_locale_t) 0)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Lets assert int types. Saves trouble down the road. */
|
/* Lets assert int types. Saves trouble down the road. */
|
||||||
static_assert ((sizeof (hb_codepoint_t) == 4), "");
|
static_assert ((sizeof (hb_codepoint_t) == 4), "");
|
||||||
static_assert ((sizeof (hb_position_t) == 4), "");
|
static_assert ((sizeof (hb_position_t) == 4), "");
|
||||||
|
|
Loading…
Reference in New Issue