#include "hb-mutex-private.hh"
#include "hb-object-private.hh"
+#include <locale.h>
+
HB_BEGIN_DECLS
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 */
const char *
hb_language_to_string (hb_language_t language);
+hb_language_t
+hb_language_get_default (void);
+
/* hb_unicode_general_category_t */
/* If language is not set, use default language from locale */
if (buffer->props.language == NULL) {
/* 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);
g_assert (NULL == hb_language_from_string (NULL));
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