[API] Add hb_language_get_default()
It uses locale information to detect default language. It's used by hb_shape() whenever language is not set on the buffer. Not sure how to properly test it in the test suite. Tested by observing that with DejaVu Sans we select the proper local glyph version for U+431 under Serbian locale. See http://www.pango.org/ScriptGallery
This commit is contained in:
parent
c78f448558
commit
34fb5521a5
|
@ -33,6 +33,8 @@
|
||||||
#include "hb-mutex-private.hh"
|
#include "hb-mutex-private.hh"
|
||||||
#include "hb-object-private.hh"
|
#include "hb-object-private.hh"
|
||||||
|
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
HB_BEGIN_DECLS
|
HB_BEGIN_DECLS
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,6 +181,25 @@ hb_language_to_string (hb_language_t language)
|
||||||
return language->s;
|
return language->s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hb_language_t
|
||||||
|
hb_language_get_default (void)
|
||||||
|
{
|
||||||
|
static hb_language_t default_language;
|
||||||
|
|
||||||
|
if (!default_language) {
|
||||||
|
/* This block is not quite threadsafe, but is not as bad as
|
||||||
|
* it looks since it's idempotent. As long as pointer ops
|
||||||
|
* are atomic, we are safe. */
|
||||||
|
|
||||||
|
/* I hear that setlocale() doesn't honor env vars on Windows,
|
||||||
|
* but for now we ignore that. */
|
||||||
|
|
||||||
|
default_language = hb_language_from_string (setlocale (LC_CTYPE, NULL));
|
||||||
|
}
|
||||||
|
|
||||||
|
return default_language;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* hb_script_t */
|
/* hb_script_t */
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,9 @@ hb_language_from_string (const char *str);
|
||||||
const char *
|
const char *
|
||||||
hb_language_to_string (hb_language_t language);
|
hb_language_to_string (hb_language_t language);
|
||||||
|
|
||||||
|
hb_language_t
|
||||||
|
hb_language_get_default (void);
|
||||||
|
|
||||||
|
|
||||||
/* hb_unicode_general_category_t */
|
/* hb_unicode_general_category_t */
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ hb_shape (hb_font_t *font,
|
||||||
/* If language is not set, use default language from locale */
|
/* If language is not set, use default language from locale */
|
||||||
if (buffer->props.language == NULL) {
|
if (buffer->props.language == NULL) {
|
||||||
/* TODO get_default_for_script? using $LANGUAGE */
|
/* TODO get_default_for_script? using $LANGUAGE */
|
||||||
//buffer->props.language = hb_language_get_default ();
|
buffer->props.language = hb_language_get_default ();
|
||||||
}
|
}
|
||||||
|
|
||||||
hb_shape_internal (font, buffer, features, num_features);
|
hb_shape_internal (font, buffer, features, num_features);
|
||||||
|
|
|
@ -169,6 +169,11 @@ test_types_language (void)
|
||||||
|
|
||||||
g_assert (NULL == hb_language_from_string (NULL));
|
g_assert (NULL == hb_language_from_string (NULL));
|
||||||
g_assert (NULL == hb_language_from_string (""));
|
g_assert (NULL == hb_language_from_string (""));
|
||||||
|
|
||||||
|
/* Not sure how to test this better. Setting env vars
|
||||||
|
* here doesn't sound like the right approach, and I'm
|
||||||
|
* not sure that it even works. */
|
||||||
|
g_assert (NULL != hb_language_get_default ());
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
Loading…
Reference in New Issue