From 54ece299bcb3436763cc4f3b6b0ca11de8133b28 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 16 Apr 2019 16:45:53 -0400 Subject: [PATCH 01/12] Use type aliasing for meta-functions, ie. those returning a type --- src/hb-algs.hh | 3 ++- src/hb-array.hh | 6 +++--- src/hb-atomic.hh | 2 +- src/hb-blob.hh | 2 +- src/hb-common.cc | 2 +- src/hb-ft.cc | 2 +- src/hb-iter.hh | 2 +- src/hb-meta.hh | 12 ++++++------ src/hb-null.hh | 6 +++--- 9 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/hb-algs.hh b/src/hb-algs.hh index 6981d06ae..3d7badb32 100644 --- a/src/hb-algs.hh +++ b/src/hb-algs.hh @@ -42,7 +42,8 @@ struct //{ return hb_deref_pointer (v).hash (); } /* Instead, the following ugly soution: */ template + hb_enable_if (!hb_is_integer (hb_remove_const >) && + !hb_is_pointer (T))> uint32_t operator () (T&& v) const { return v.hash (); } template diff --git a/src/hb-array.hh b/src/hb-array.hh index d42e086bd..74b6757b2 100644 --- a/src/hb-array.hh +++ b/src/hb-array.hh @@ -47,13 +47,13 @@ struct hb_array_t : hb_iter_with_fallback_t, Type&> hb_iter_with_fallback_t, Type&> (), arrayZ (o.arrayZ), length (o.length) {} template - hb_array_t (const hb_array_t &o) : arrayZ (o.arrayZ), length (o.length) {} + hb_array_t (const hb_array_t > &o) : arrayZ (o.arrayZ), length (o.length) {} hb_array_t (Type *array_, unsigned int length_) : arrayZ (array_), length (length_) {} template hb_array_t (Type (&array_)[length_]) : arrayZ (array_), length (length_) {} template - hb_array_t& operator = (const hb_array_t &o) + hb_array_t& operator = (const hb_array_t > &o) { arrayZ = o.arrayZ; length = o.length; return *this; } hb_array_t& operator = (const hb_array_t &o) { arrayZ = o.arrayZ; length = o.length; return *this; } @@ -214,7 +214,7 @@ struct hb_sorted_array_t : hb_sorted_array_t () : hb_array_t () {} hb_sorted_array_t (const hb_array_t &o) : hb_array_t (o) {} template - hb_sorted_array_t (const hb_sorted_array_t &o) : hb_array_t (o) {} + hb_sorted_array_t (const hb_sorted_array_t > &o) : hb_array_t (o) {} hb_sorted_array_t (Type *array_, unsigned int length_) : hb_array_t (array_, length_) {} template hb_sorted_array_t (Type (&array_)[length_]) : hb_array_t (array_) {} diff --git a/src/hb-atomic.hh b/src/hb-atomic.hh index a2ce8f28d..8307a549d 100644 --- a/src/hb-atomic.hh +++ b/src/hb-atomic.hh @@ -283,7 +283,7 @@ struct hb_atomic_int_t template struct hb_atomic_ptr_t { - typedef hb_remove_pointer (P) T; + typedef hb_remove_pointer

T; void init (T* v_ = nullptr) { set_relaxed (v_); } void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } diff --git a/src/hb-blob.hh b/src/hb-blob.hh index 3a30efe55..cff492fa0 100644 --- a/src/hb-blob.hh +++ b/src/hb-blob.hh @@ -81,7 +81,7 @@ struct hb_blob_t template struct hb_blob_ptr_t { - typedef hb_remove_pointer (P) T; + typedef hb_remove_pointer

T; hb_blob_ptr_t (hb_blob_t *b_ = nullptr) : b (b_) {} hb_blob_t * operator = (hb_blob_t *b_) { return b = b_; } diff --git a/src/hb-common.cc b/src/hb-common.cc index ab93bf427..356c2bf17 100644 --- a/src/hb-common.cc +++ b/src/hb-common.cc @@ -783,7 +783,7 @@ parse_uint32 (const char **pp, const char *end, uint32_t *pv) static void free_static_C_locale (); #endif -static struct hb_C_locale_lazy_loader_t : hb_lazy_loader_t, hb_C_locale_lazy_loader_t> { static HB_LOCALE_T create () diff --git a/src/hb-ft.cc b/src/hb-ft.cc index 48434dc8c..f8dab8bc1 100644 --- a/src/hb-ft.cc +++ b/src/hb-ft.cc @@ -748,7 +748,7 @@ hb_ft_font_create_referenced (FT_Face ft_face) static void free_static_ft_library (); #endif -static struct hb_ft_library_lazy_loader_t : hb_lazy_loader_t, hb_ft_library_lazy_loader_t> { static FT_Library create () diff --git a/src/hb-iter.hh b/src/hb-iter.hh index 7e7673326..38d477027 100644 --- a/src/hb-iter.hh +++ b/src/hb-iter.hh @@ -78,7 +78,7 @@ struct hb_iter_t * it will be returning pointer to temporary rvalue. */ template - hb_remove_reference (item_t)* operator -> () const { return hb_addressof (**thiz()); } + hb_remove_reference* operator -> () const { return hb_addressof (**thiz()); } item_t operator * () const { return thiz()->__item__ (); } item_t operator * () { return thiz()->__item__ (); } item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); } diff --git a/src/hb-meta.hh b/src/hb-meta.hh index 83b0ad6b3..a5edd0372 100644 --- a/src/hb-meta.hh +++ b/src/hb-meta.hh @@ -56,15 +56,15 @@ template static inline T hb_declval (); template struct hb_match_const { typedef T type; enum { value = false }; }; template struct hb_match_const { typedef T type; enum { value = true }; }; -#define hb_remove_const(T) typename hb_match_const::type +template using hb_remove_const = typename hb_match_const::type; #define hb_is_const(T) hb_match_const::value template struct hb_match_reference { typedef T type; enum { value = false }; }; template struct hb_match_reference { typedef T type; enum { value = true }; }; -#define hb_remove_reference(T) typename hb_match_reference::type +template using hb_remove_reference = typename hb_match_reference::type; #define hb_is_reference(T) hb_match_reference::value template struct hb_match_pointer { typedef T type; enum { value = false }; }; template struct hb_match_pointer { typedef T type; enum { value = true }; }; -#define hb_remove_pointer(T) typename hb_match_pointer::type +template using hb_remove_pointer = typename hb_match_pointer::type; #define hb_is_pointer(T) hb_match_pointer::value struct @@ -79,12 +79,12 @@ struct /* std::move and std::forward */ template -static hb_remove_reference (T)&& hb_move (T&& t) { return (hb_remove_reference (T)&&) (t); } +static hb_remove_reference&& hb_move (T&& t) { return (hb_remove_reference&&) (t); } template -static T&& hb_forward (hb_remove_reference (T)& t) { return (T&&) t; } +static T&& hb_forward (hb_remove_reference& t) { return (T&&) t; } template -static T&& hb_forward (hb_remove_reference (T)&& t) { return (T&&) t; } +static T&& hb_forward (hb_remove_reference&& t) { return (T&&) t; } /* Void! For when we need a expression-type of void. */ diff --git a/src/hb-null.hh b/src/hb-null.hh index 6d4a68360..1e20a47e9 100644 --- a/src/hb-null.hh +++ b/src/hb-null.hh @@ -95,7 +95,7 @@ struct Null { template struct NullHelper { - typedef hb_remove_const (hb_remove_reference (QType)) Type; + typedef hb_remove_const > Type; static const Type & get_null () { return Null::get_null (); } }; #define Null(Type) NullHelper::get_null () @@ -148,7 +148,7 @@ static inline Type& Crap () { template struct CrapHelper { - typedef hb_remove_const (hb_remove_reference (QType)) Type; + typedef hb_remove_const > Type; static Type & get_crap () { return Crap (); } }; #define Crap(Type) CrapHelper::get_crap () @@ -171,7 +171,7 @@ struct CrapOrNullHelper { template struct hb_nonnull_ptr_t { - typedef hb_remove_pointer (P) T; + typedef hb_remove_pointer

T; hb_nonnull_ptr_t (T *v_ = nullptr) : v (v_) {} T * operator = (T *v_) { return v = v_; } From 973717175d46d62471772318bb0b607070c53ec7 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 16 Apr 2019 16:50:07 -0400 Subject: [PATCH 02/12] Fix priorities --- src/hb-algs.hh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hb-algs.hh b/src/hb-algs.hh index 3d7badb32..ab1caa031 100644 --- a/src/hb-algs.hh +++ b/src/hb-algs.hh @@ -78,15 +78,15 @@ struct /* Pointer-to-member-function. */ template auto - impl (Appl&& a, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (hb_forward (v).*a ()) + impl (Appl&& a, Val &&v, hb_priority<5>) const HB_AUTO_RETURN_EXPR (hb_forward (v).*a ()) template auto - impl (Appl&& a, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (hb_forward (v)->*a ()) + impl (Appl&& a, Val &&v, hb_priority<4>) const HB_AUTO_RETURN_EXPR (hb_forward (v)->*a ()) /* Pointer-to-member. */ template auto - impl (Appl&& a, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (hb_forward (v).*a) + impl (Appl&& a, Val &&v, hb_priority<3>) const HB_AUTO_RETURN_EXPR (hb_forward (v).*a) template auto - impl (Appl&& a, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (hb_forward (v)->*a) + impl (Appl&& a, Val &&v, hb_priority<2>) const HB_AUTO_RETURN_EXPR (hb_forward (v)->*a) /* Operator(). */ template auto @@ -141,7 +141,7 @@ struct impl (Proj&& f, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (f.get (hb_forward (v))) template auto - impl (Proj&& f, Val &&v, hb_priority<2>) const HB_AUTO_RETURN_EXPR ( + impl (Proj&& f, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR ( hb_invoke (hb_forward (f), hb_forward (v)) ) From 75fd845a4abccc2596f0e1fe2294f936199e61f3 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 16 Apr 2019 17:22:29 -0400 Subject: [PATCH 03/12] Move around --- src/hb-algs.hh | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/hb-algs.hh b/src/hb-algs.hh index ab1caa031..485c139b9 100644 --- a/src/hb-algs.hh +++ b/src/hb-algs.hh @@ -34,6 +34,18 @@ #include "hb-null.hh" +struct +{ + template T + operator () (const T& v) const { return v; } +} HB_FUNCOBJ (hb_identity); + +struct +{ + template bool + operator () (const T& v) const { return bool (v); } +} HB_FUNCOBJ (hb_bool); + struct { /* Don't know how to set priority of following. Doesn't work right now. */ @@ -59,19 +71,6 @@ struct } } HB_FUNCOBJ (hb_hash); -struct -{ - template T - operator () (const T& v) const { return v; } -} HB_FUNCOBJ (hb_identity); - -struct -{ - template bool - operator () (const T& v) const { return bool (v); } -} HB_FUNCOBJ (hb_bool); - - struct { private: From c918a6706fa759696569ad6dcaae03fed76306bc Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 16 Apr 2019 17:28:18 -0400 Subject: [PATCH 04/12] Properly prioritize hb_hash() --- src/hb-algs.hh | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/hb-algs.hh b/src/hb-algs.hh index 485c139b9..c21d8634e 100644 --- a/src/hb-algs.hh +++ b/src/hb-algs.hh @@ -48,27 +48,22 @@ struct struct { - /* Don't know how to set priority of following. Doesn't work right now. */ - //template - //uint32_t operator () (const T& v) const - //{ return hb_deref_pointer (v).hash (); } - /* Instead, the following ugly soution: */ - template >) && - !hb_is_pointer (T))> - uint32_t operator () (T&& v) const { return v.hash (); } - - template - uint32_t operator () (const T *v) const - { return operator() (*v); } + private: + template auto + impl (const T& v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (hb_deref_pointer (v).hash ()) template - uint32_t operator () (T v) const - { + hb_enable_if (hb_is_integer (T))> auto + impl (const T& v, hb_priority<0>) const HB_AUTO_RETURN_EXPR + ( /* Knuth's multiplicative method: */ - return (uint32_t) v * 2654435761u; - } + (uint32_t) v * 2654435761u + ) + + public: + + template auto + operator () (const T& v) const HB_AUTO_RETURN_EXPR ((uint32_t) impl (v, hb_prioritize)) } HB_FUNCOBJ (hb_hash); struct @@ -96,7 +91,8 @@ struct public: template auto - operator () (Appl&& a, Val &&v) const HB_AUTO_RETURN_EXPR ( + operator () (Appl&& a, Val &&v) const HB_AUTO_RETURN_EXPR + ( impl (hb_forward (a), hb_forward (v), hb_prioritize) @@ -114,7 +110,8 @@ struct impl (Pred&& p, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (p.has (v)) template auto - impl (Pred&& p, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR ( + impl (Pred&& p, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR + ( hb_invoke (hb_forward (p), hb_forward (v)) ) @@ -122,7 +119,8 @@ struct public: template auto - operator () (Pred&& p, Val &&v) const HB_AUTO_RETURN_EXPR ( + operator () (Pred&& p, Val &&v) const HB_AUTO_RETURN_EXPR + ( (bool) impl (hb_forward (p), hb_forward (v), hb_prioritize) @@ -140,7 +138,8 @@ struct impl (Proj&& f, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (f.get (hb_forward (v))) template auto - impl (Proj&& f, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR ( + impl (Proj&& f, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR + ( hb_invoke (hb_forward (f), hb_forward (v)) ) @@ -148,7 +147,8 @@ struct public: template auto - operator () (Proj&& f, Val &&v) const HB_AUTO_RETURN_EXPR ( + operator () (Proj&& f, Val &&v) const HB_AUTO_RETURN_EXPR + ( impl (hb_forward (f), hb_forward (v), hb_prioritize) From fe30fcd228ff95be1f169f580b30184c8511d1c3 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 16 Apr 2019 17:34:06 -0400 Subject: [PATCH 05/12] Use hb_deref_pointer() to reduce number of overloads --- src/hb-algs.hh | 27 ++++++++++----------------- src/hb-meta.hh | 36 +++++++++++++++++++----------------- 2 files changed, 29 insertions(+), 34 deletions(-) diff --git a/src/hb-algs.hh b/src/hb-algs.hh index c21d8634e..6b80a61f9 100644 --- a/src/hb-algs.hh +++ b/src/hb-algs.hh @@ -72,21 +72,18 @@ struct /* Pointer-to-member-function. */ template auto - impl (Appl&& a, Val &&v, hb_priority<5>) const HB_AUTO_RETURN_EXPR (hb_forward (v).*a ()) - template auto - impl (Appl&& a, Val &&v, hb_priority<4>) const HB_AUTO_RETURN_EXPR (hb_forward (v)->*a ()) + impl (Appl&& a, Val &&v, hb_priority<2>) const HB_AUTO_RETURN_EXPR + (hb_forward (hb_deref_pointer (v)).*a ()) /* Pointer-to-member. */ template auto - impl (Appl&& a, Val &&v, hb_priority<3>) const HB_AUTO_RETURN_EXPR (hb_forward (v).*a) - template auto - impl (Appl&& a, Val &&v, hb_priority<2>) const HB_AUTO_RETURN_EXPR (hb_forward (v)->*a) + impl (Appl&& a, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR + (hb_forward (hb_deref_pointer (v)).*a) /* Operator(). */ template auto - impl (Appl&& a, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (a (hb_forward (v))) - template auto - impl (Appl&& a, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR ((*a) (hb_forward (v))) + impl (Appl&& a, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR + (hb_deref_pointer (a) (hb_forward (v))) public: @@ -104,10 +101,8 @@ struct private: template auto - impl (Pred&& p, Val &&v, hb_priority<2>) const HB_AUTO_RETURN_EXPR (p->has (v)) - - template auto - impl (Pred&& p, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (p.has (v)) + impl (Pred&& p, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR + (hb_deref_pointer (p).has (v)) template auto impl (Pred&& p, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR @@ -132,10 +127,8 @@ struct private: template auto - impl (Proj&& f, Val &&v, hb_priority<2>) const HB_AUTO_RETURN_EXPR (f->get (hb_forward (v))) - - template auto - impl (Proj&& f, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (f.get (hb_forward (v))) + impl (Proj&& f, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR + (hb_deref_pointer (f).get (hb_forward (v))) template auto impl (Proj&& f, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR diff --git a/src/hb-meta.hh b/src/hb-meta.hh index a5edd0372..5698250fc 100644 --- a/src/hb-meta.hh +++ b/src/hb-meta.hh @@ -34,6 +34,15 @@ * C++ template meta-programming & fundamentals used with them. */ +/* Function overloading SFINAE and priority. */ + +#define HB_AUTO_RETURN_EXPR(E) -> decltype ((E)) { return (E); } +#define HB_VOID_RETURN_EXPR(E) -> hb_void_tt { (E); } + +template struct hb_priority : hb_priority {}; +template <> struct hb_priority<0> {}; +#define hb_prioritize hb_priority<16> () + #define HB_FUNCOBJ(x) static_const x HB_UNUSED struct @@ -67,14 +76,6 @@ template struct hb_match_pointer { typedef T type; enum { valu template using hb_remove_pointer = typename hb_match_pointer::type; #define hb_is_pointer(T) hb_match_pointer::value -struct -{ - template - T operator () (T v) const { return v; } - template - T& operator () (T *v) const { return *v; } -} HB_FUNCOBJ (hb_deref_pointer); - /* std::move and std::forward */ @@ -86,6 +87,16 @@ static T&& hb_forward (hb_remove_reference& t) { return (T&&) t; } template static T&& hb_forward (hb_remove_reference&& t) { return (T&&) t; } +struct +{ + template auto + operator () (T&& v) const HB_AUTO_RETURN_EXPR (hb_forward (v)) + + template auto + operator () (T *v) const HB_AUTO_RETURN_EXPR (*v) + +} HB_FUNCOBJ (hb_deref_pointer); + /* Void! For when we need a expression-type of void. */ struct hb_void_t { typedef void value; }; @@ -140,14 +151,5 @@ template <> struct hb_is_integer { enum { value = true }; }; template <> struct hb_is_integer { enum { value = true }; }; #define hb_is_integer(T) hb_is_integer::value -/* Function overloading SFINAE and priority. */ - -#define HB_AUTO_RETURN_EXPR(E) -> decltype ((E)) { return (E); } -#define HB_VOID_RETURN_EXPR(E) -> hb_void_tt { (E); } - -template struct hb_priority : hb_priority {}; -template <> struct hb_priority<0> {}; -#define hb_prioritize hb_priority<16> () - #endif /* HB_META_HH */ From 0241a40f2aff43aba045fb7de4a2c3e5f1e9626a Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 16 Apr 2019 18:26:30 -0400 Subject: [PATCH 06/12] Use auto return type for hb_first/hb_second --- src/hb-algs.hh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hb-algs.hh b/src/hb-algs.hh index 6b80a61f9..a7e3aaa37 100644 --- a/src/hb-algs.hh +++ b/src/hb-algs.hh @@ -169,14 +169,14 @@ hb_pair (T1&& a, T2&& b) { return hb_pair_t (a, b); } struct { - template decltype (hb_declval (Pair).first) - operator () (const Pair& pair) const { return pair.first; } + template auto + operator () (const Pair& pair) const HB_AUTO_RETURN_EXPR (pair.first) } HB_FUNCOBJ (hb_first); struct { - template decltype (hb_declval (Pair).second) - operator () (const Pair& pair) const { return pair.second; } + template auto + operator () (const Pair& pair) const HB_AUTO_RETURN_EXPR (pair.second) } HB_FUNCOBJ (hb_second); struct From da293b0e59a0d6c47e9b3a7807115a168a0a5c94 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 16 Apr 2019 18:27:25 -0400 Subject: [PATCH 07/12] Use HB_AUTO_RETURN_EXPR in hb_min/max --- src/hb-algs.hh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hb-algs.hh b/src/hb-algs.hh index a7e3aaa37..b1c928246 100644 --- a/src/hb-algs.hh +++ b/src/hb-algs.hh @@ -181,13 +181,13 @@ struct struct { - template T - operator () (const T& a, const T2& b) const { return a <= b ? a : b; } + template auto + operator () (const T& a, const T2& b) const HB_AUTO_RETURN_EXPR (a <= b ? a : b) } HB_FUNCOBJ (hb_min); struct { - template T - operator () (const T& a, const T2& b) const { return a >= b ? a : b; } + template auto + operator () (const T& a, const T2& b) const HB_AUTO_RETURN_EXPR (a >= b ? a : b) } HB_FUNCOBJ (hb_max); From 5b33427f2c4d596a12f05ffebebfd68655fd63eb Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 16 Apr 2019 18:28:17 -0400 Subject: [PATCH 08/12] Rename HB_AUTO_RETURN_EXPR to HB_AUTO_RETURN --- src/hb-algs.hh | 34 +++++++++++++++++----------------- src/hb-meta.hh | 8 ++++---- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/hb-algs.hh b/src/hb-algs.hh index b1c928246..232467e49 100644 --- a/src/hb-algs.hh +++ b/src/hb-algs.hh @@ -50,11 +50,11 @@ struct { private: template auto - impl (const T& v, hb_priority<1>) const HB_AUTO_RETURN_EXPR (hb_deref_pointer (v).hash ()) + impl (const T& v, hb_priority<1>) const HB_AUTO_RETURN (hb_deref_pointer (v).hash ()) template auto - impl (const T& v, hb_priority<0>) const HB_AUTO_RETURN_EXPR + impl (const T& v, hb_priority<0>) const HB_AUTO_RETURN ( /* Knuth's multiplicative method: */ (uint32_t) v * 2654435761u @@ -63,7 +63,7 @@ struct public: template auto - operator () (const T& v) const HB_AUTO_RETURN_EXPR ((uint32_t) impl (v, hb_prioritize)) + operator () (const T& v) const HB_AUTO_RETURN ((uint32_t) impl (v, hb_prioritize)) } HB_FUNCOBJ (hb_hash); struct @@ -72,23 +72,23 @@ struct /* Pointer-to-member-function. */ template auto - impl (Appl&& a, Val &&v, hb_priority<2>) const HB_AUTO_RETURN_EXPR + impl (Appl&& a, Val &&v, hb_priority<2>) const HB_AUTO_RETURN (hb_forward (hb_deref_pointer (v)).*a ()) /* Pointer-to-member. */ template auto - impl (Appl&& a, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR + impl (Appl&& a, Val &&v, hb_priority<1>) const HB_AUTO_RETURN (hb_forward (hb_deref_pointer (v)).*a) /* Operator(). */ template auto - impl (Appl&& a, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR + impl (Appl&& a, Val &&v, hb_priority<0>) const HB_AUTO_RETURN (hb_deref_pointer (a) (hb_forward (v))) public: template auto - operator () (Appl&& a, Val &&v) const HB_AUTO_RETURN_EXPR + operator () (Appl&& a, Val &&v) const HB_AUTO_RETURN ( impl (hb_forward (a), hb_forward (v), @@ -101,11 +101,11 @@ struct private: template auto - impl (Pred&& p, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR + impl (Pred&& p, Val &&v, hb_priority<1>) const HB_AUTO_RETURN (hb_deref_pointer (p).has (v)) template auto - impl (Pred&& p, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR + impl (Pred&& p, Val &&v, hb_priority<0>) const HB_AUTO_RETURN ( hb_invoke (hb_forward (p), hb_forward (v)) @@ -114,7 +114,7 @@ struct public: template auto - operator () (Pred&& p, Val &&v) const HB_AUTO_RETURN_EXPR + operator () (Pred&& p, Val &&v) const HB_AUTO_RETURN ( (bool) impl (hb_forward (p), hb_forward (v), @@ -127,11 +127,11 @@ struct private: template auto - impl (Proj&& f, Val &&v, hb_priority<1>) const HB_AUTO_RETURN_EXPR + impl (Proj&& f, Val &&v, hb_priority<1>) const HB_AUTO_RETURN (hb_deref_pointer (f).get (hb_forward (v))) template auto - impl (Proj&& f, Val &&v, hb_priority<0>) const HB_AUTO_RETURN_EXPR + impl (Proj&& f, Val &&v, hb_priority<0>) const HB_AUTO_RETURN ( hb_invoke (hb_forward (f), hb_forward (v)) @@ -140,7 +140,7 @@ struct public: template auto - operator () (Proj&& f, Val &&v) const HB_AUTO_RETURN_EXPR + operator () (Proj&& f, Val &&v) const HB_AUTO_RETURN ( impl (hb_forward (f), hb_forward (v), @@ -170,24 +170,24 @@ hb_pair (T1&& a, T2&& b) { return hb_pair_t (a, b); } struct { template auto - operator () (const Pair& pair) const HB_AUTO_RETURN_EXPR (pair.first) + operator () (const Pair& pair) const HB_AUTO_RETURN (pair.first) } HB_FUNCOBJ (hb_first); struct { template auto - operator () (const Pair& pair) const HB_AUTO_RETURN_EXPR (pair.second) + operator () (const Pair& pair) const HB_AUTO_RETURN (pair.second) } HB_FUNCOBJ (hb_second); struct { template auto - operator () (const T& a, const T2& b) const HB_AUTO_RETURN_EXPR (a <= b ? a : b) + operator () (const T& a, const T2& b) const HB_AUTO_RETURN (a <= b ? a : b) } HB_FUNCOBJ (hb_min); struct { template auto - operator () (const T& a, const T2& b) const HB_AUTO_RETURN_EXPR (a >= b ? a : b) + operator () (const T& a, const T2& b) const HB_AUTO_RETURN (a >= b ? a : b) } HB_FUNCOBJ (hb_max); diff --git a/src/hb-meta.hh b/src/hb-meta.hh index 5698250fc..4a141ce92 100644 --- a/src/hb-meta.hh +++ b/src/hb-meta.hh @@ -36,8 +36,8 @@ /* Function overloading SFINAE and priority. */ -#define HB_AUTO_RETURN_EXPR(E) -> decltype ((E)) { return (E); } -#define HB_VOID_RETURN_EXPR(E) -> hb_void_tt { (E); } +#define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); } +#define HB_VOID_RETURN(E) -> hb_void_tt { (E); } template struct hb_priority : hb_priority {}; template <> struct hb_priority<0> {}; @@ -90,10 +90,10 @@ static T&& hb_forward (hb_remove_reference&& t) { return (T&&) t; } struct { template auto - operator () (T&& v) const HB_AUTO_RETURN_EXPR (hb_forward (v)) + operator () (T&& v) const HB_AUTO_RETURN (hb_forward (v)) template auto - operator () (T *v) const HB_AUTO_RETURN_EXPR (*v) + operator () (T *v) const HB_AUTO_RETURN (*v) } HB_FUNCOBJ (hb_deref_pointer); From 6916b77863cd5ce492a274eb85f196f2152fbb96 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 16 Apr 2019 18:33:51 -0400 Subject: [PATCH 09/12] One more auto return type --- src/hb-iter.hh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hb-iter.hh b/src/hb-iter.hh index 38d477027..a4ffbd6f0 100644 --- a/src/hb-iter.hh +++ b/src/hb-iter.hh @@ -258,8 +258,8 @@ struct hb_is_iterator_of { enum { template -static inline decltype (hb_declval (Rhs) (hb_declval (Lhs))) -operator | (Lhs lhs, const Rhs &rhs) { return rhs (lhs); } +static inline auto +operator | (Lhs lhs, const Rhs &rhs) HB_AUTO_RETURN (rhs (lhs)) /* hb_map(), hb_filter(), hb_reduce() */ From 5daeff3e68e4e202effb152f52702a044c09f386 Mon Sep 17 00:00:00 2001 From: David Corbett Date: Wed, 17 Apr 2019 09:11:44 -0400 Subject: [PATCH 10/12] Fix "hb_script_" doc typo --- src/hb-common.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hb-common.cc b/src/hb-common.cc index 356c2bf17..60d16c8a4 100644 --- a/src/hb-common.cc +++ b/src/hb-common.cc @@ -488,7 +488,7 @@ hb_script_from_string (const char *str, int len) /** * hb_script_to_iso15924_tag: - * @script: an #hb_script_ to convert. + * @script: an #hb_script_t to convert. * * See hb_script_from_iso15924_tag(). * From 6745a600bfec13b3f5468b3d31bab7d82b1e61ce Mon Sep 17 00:00:00 2001 From: David Corbett Date: Tue, 16 Apr 2019 17:29:34 -0400 Subject: [PATCH 11/12] Comment out ot_languages where fallback suffices --- src/gen-tag-table.py | 15 +- src/hb-ot-tag-table.hh | 443 +++++++++++++++++++++-------------------- src/hb-ot-tag.cc | 19 +- test/api/test-ot-tag.c | 5 +- 4 files changed, 255 insertions(+), 227 deletions(-) diff --git a/src/gen-tag-table.py b/src/gen-tag-table.py index 1e225c4bd..49f5b30bb 100755 --- a/src/gen-tag-table.py +++ b/src/gen-tag-table.py @@ -895,11 +895,18 @@ def language_name_intersection (a, b): def get_matching_language_name (intersection, candidates): return next (iter (c for c in candidates if not intersection.isdisjoint (get_variant_set (c)))) +def same_tag (bcp_47_tag, ot_tags): + return len (bcp_47_tag) == 3 and len (ot_tags) == 1 and bcp_47_tag == ot_tags[0].lower () + for language, tags in sorted (ot.from_bcp_47.items ()): if language == '' or '-' in language: continue + commented_out = same_tag (language, tags) for i, tag in enumerate (tags, start=1): - print (' {\"%s\",\t%s},\t/* ' % (language, hb_tag (tag)), end='') + print ('%s{\"%s\",\t%s},' % ('/*' if commented_out else ' ', language, hb_tag (tag)), end='') + if commented_out: + print ('*/', end='') + print ('\t/* ', end='') bcp_47_name = bcp_47.names.get (language, '') bcp_47_name_candidates = bcp_47_name.split ('\n') intersection = language_name_intersection (bcp_47_name, ot.names[tag]) @@ -1040,7 +1047,8 @@ print (' * @tag: A language tag.') print (' *') print (' * Converts @tag to a BCP 47 language tag if it is ambiguous (it corresponds to') print (' * many language tags) and the best tag is not the alphabetically first, or if') -print (' * the best tag consists of multiple subtags.') +print (' * the best tag consists of multiple subtags, or if the best tag does not appear') +print (' * in #ot_languages.') print (' *') print (' * Return value: The #hb_language_t corresponding to the BCP 47 language tag,') print (' * or #HB_LANGUAGE_INVALID if @tag is not ambiguous.') @@ -1091,7 +1099,8 @@ def verify_disambiguation_dict (): '%s is not a valid disambiguation for %s' % (disambiguation[ot_tag], ot_tag)) elif ot_tag not in disambiguation: disambiguation[ot_tag] = macrolanguages[0] - if disambiguation[ot_tag] == sorted (primary_tags)[0] and '-' not in disambiguation[ot_tag]: + different_primary_tags = sorted (t for t in primary_tags if not same_tag (t, ot.from_bcp_47.get (t))) + if different_primary_tags and disambiguation[ot_tag] == different_primary_tags[0] and '-' not in disambiguation[ot_tag]: del disambiguation[ot_tag] for ot_tag in disambiguation.keys (): expect (ot_tag in ot.to_bcp_47, 'unknown OT tag: %s' % ot_tag) diff --git a/src/hb-ot-tag-table.hh b/src/hb-ot-tag-table.hh index c7717a347..d8fcd2fdb 100644 --- a/src/hb-ot-tag-table.hh +++ b/src/hb-ot-tag-table.hh @@ -23,17 +23,17 @@ static const LangTag ot_languages[] = { {"abq", HB_TAG('A','B','A',' ')}, /* Abaza */ {"abv", HB_TAG('A','R','A',' ')}, /* Baharna Arabic -> Arabic */ {"acf", HB_TAG('F','A','N',' ')}, /* Saint Lucian Creole French -> French Antillean */ - {"ach", HB_TAG('A','C','H',' ')}, /* Acoli -> Acholi */ +/*{"ach", HB_TAG('A','C','H',' ')},*/ /* Acoli -> Acholi */ {"acm", HB_TAG('A','R','A',' ')}, /* Mesopotamian Arabic -> Arabic */ {"acq", HB_TAG('A','R','A',' ')}, /* Ta'izzi-Adeni Arabic -> Arabic */ - {"acr", HB_TAG('A','C','R',' ')}, /* Achi */ +/*{"acr", HB_TAG('A','C','R',' ')},*/ /* Achi */ {"acw", HB_TAG('A','R','A',' ')}, /* Hijazi Arabic -> Arabic */ {"acx", HB_TAG('A','R','A',' ')}, /* Omani Arabic -> Arabic */ {"acy", HB_TAG('A','R','A',' ')}, /* Cypriot Arabic -> Arabic */ {"ada", HB_TAG('D','N','G',' ')}, /* Adangme -> Dangme */ {"adf", HB_TAG('A','R','A',' ')}, /* Dhofari Arabic -> Arabic */ {"adp", HB_TAG('D','Z','N',' ')}, /* Adap (retired code) -> Dzongkha */ - {"ady", HB_TAG('A','D','Y',' ')}, /* Adyghe */ +/*{"ady", HB_TAG('A','D','Y',' ')},*/ /* Adyghe */ {"aeb", HB_TAG('A','R','A',' ')}, /* Tunisian Arabic -> Arabic */ {"aec", HB_TAG('A','R','A',' ')}, /* Saidi Arabic -> Arabic */ {"af", HB_TAG('A','F','K',' ')}, /* Afrikaans */ @@ -42,19 +42,19 @@ static const LangTag ot_languages[] = { {"aht", HB_TAG('A','T','H',' ')}, /* Ahtena -> Athapaskan */ {"aii", HB_TAG('S','W','A',' ')}, /* Assyrian Neo-Aramaic -> Swadaya Aramaic */ {"aii", HB_TAG('S','Y','R',' ')}, /* Assyrian Neo-Aramaic -> Syriac */ - {"aio", HB_TAG('A','I','O',' ')}, /* Aiton */ +/*{"aio", HB_TAG('A','I','O',' ')},*/ /* Aiton */ {"aiw", HB_TAG('A','R','I',' ')}, /* Aari */ {"ajp", HB_TAG('A','R','A',' ')}, /* South Levantine Arabic -> Arabic */ {"ak", HB_TAG('A','K','A',' ')}, /* Akan [macrolanguage] */ {"ak", HB_TAG('T','W','I',' ')}, /* Akan [macrolanguage] -> Twi */ {"aln", HB_TAG('S','Q','I',' ')}, /* Gheg Albanian -> Albanian */ {"als", HB_TAG('S','Q','I',' ')}, /* Tosk Albanian -> Albanian */ - {"alt", HB_TAG('A','L','T',' ')}, /* Southern Altai -> Altai */ +/*{"alt", HB_TAG('A','L','T',' ')},*/ /* Southern Altai -> Altai */ {"am", HB_TAG('A','M','H',' ')}, /* Amharic */ {"amf", HB_TAG('H','B','N',' ')}, /* Hamer-Banna -> Hammer-Banna */ {"amw", HB_TAG('S','Y','R',' ')}, /* Western Neo-Aramaic -> Syriac */ {"an", HB_TAG('A','R','G',' ')}, /* Aragonese */ - {"ang", HB_TAG('A','N','G',' ')}, /* Old English (ca. 450-1100) -> Anglo-Saxon */ +/*{"ang", HB_TAG('A','N','G',' ')},*/ /* Old English (ca. 450-1100) -> Anglo-Saxon */ {"apc", HB_TAG('A','R','A',' ')}, /* North Levantine Arabic -> Arabic */ {"apd", HB_TAG('A','R','A',' ')}, /* Sudanese Arabic -> Arabic */ {"apj", HB_TAG('A','T','H',' ')}, /* Jicarilla Apache -> Athapaskan */ @@ -70,14 +70,14 @@ static const LangTag ot_languages[] = { {"ary", HB_TAG('M','O','R',' ')}, /* Moroccan Arabic -> Moroccan */ {"arz", HB_TAG('A','R','A',' ')}, /* Egyptian Arabic -> Arabic */ {"as", HB_TAG('A','S','M',' ')}, /* Assamese */ - {"ast", HB_TAG('A','S','T',' ')}, /* Asturian */ - {"ath", HB_TAG('A','T','H',' ')}, /* Athapascan [family] -> Athapaskan */ +/*{"ast", HB_TAG('A','S','T',' ')},*/ /* Asturian */ +/*{"ath", HB_TAG('A','T','H',' ')},*/ /* Athapascan [family] -> Athapaskan */ {"atj", HB_TAG('R','C','R',' ')}, /* Atikamekw -> R-Cree */ {"atv", HB_TAG('A','L','T',' ')}, /* Northern Altai -> Altai */ {"auz", HB_TAG('A','R','A',' ')}, /* Uzbeki Arabic -> Arabic */ {"av", HB_TAG('A','V','R',' ')}, /* Avaric -> Avar */ {"avl", HB_TAG('A','R','A',' ')}, /* Eastern Egyptian Bedawi Arabic -> Arabic */ - {"awa", HB_TAG('A','W','A',' ')}, /* Awadhi */ +/*{"awa", HB_TAG('A','W','A',' ')},*/ /* Awadhi */ {"ay", HB_TAG('A','Y','M',' ')}, /* Aymara [macrolanguage] */ {"ayc", HB_TAG('A','Y','M',' ')}, /* Southern Aymara -> Aymara */ {"ayh", HB_TAG('A','R','A',' ')}, /* Hadrami Arabic -> Arabic */ @@ -86,70 +86,70 @@ static const LangTag ot_languages[] = { {"ayp", HB_TAG('A','R','A',' ')}, /* North Mesopotamian Arabic -> Arabic */ {"ayr", HB_TAG('A','Y','M',' ')}, /* Central Aymara -> Aymara */ {"az", HB_TAG('A','Z','E',' ')}, /* Azerbaijani [macrolanguage] */ - {"azb", HB_TAG('A','Z','B',' ')}, /* South Azerbaijani -> Torki */ +/*{"azb", HB_TAG('A','Z','B',' ')},*/ /* South Azerbaijani -> Torki */ {"azj", HB_TAG('A','Z','E',' ')}, /* North Azerbaijani -> Azerbaijani */ {"ba", HB_TAG('B','S','H',' ')}, /* Bashkir */ {"bad", HB_TAG('B','A','D','0')}, /* Banda [family] */ {"bai", HB_TAG('B','M','L',' ')}, /* Bamileke [family] */ {"bal", HB_TAG('B','L','I',' ')}, /* Baluchi [macrolanguage] */ - {"ban", HB_TAG('B','A','N',' ')}, /* Balinese */ - {"bar", HB_TAG('B','A','R',' ')}, /* Bavarian */ - {"bbc", HB_TAG('B','B','C',' ')}, /* Batak Toba */ +/*{"ban", HB_TAG('B','A','N',' ')},*/ /* Balinese */ +/*{"bar", HB_TAG('B','A','R',' ')},*/ /* Bavarian */ +/*{"bbc", HB_TAG('B','B','C',' ')},*/ /* Batak Toba */ {"bbz", HB_TAG('A','R','A',' ')}, /* Babalia Creole Arabic -> Arabic */ {"bcc", HB_TAG('B','L','I',' ')}, /* Southern Balochi -> Baluchi */ {"bci", HB_TAG('B','A','U',' ')}, /* Baoulé -> Baulé */ {"bcl", HB_TAG('B','I','K',' ')}, /* Central Bikol -> Bikol */ {"bcq", HB_TAG('B','C','H',' ')}, /* Bench */ {"bcr", HB_TAG('A','T','H',' ')}, /* Babine -> Athapaskan */ - {"bdy", HB_TAG('B','D','Y',' ')}, /* Bandjalang */ +/*{"bdy", HB_TAG('B','D','Y',' ')},*/ /* Bandjalang */ {"be", HB_TAG('B','E','L',' ')}, /* Belarusian -> Belarussian */ {"bea", HB_TAG('A','T','H',' ')}, /* Beaver -> Athapaskan */ {"beb", HB_TAG('B','T','I',' ')}, /* Bebele -> Beti */ - {"bem", HB_TAG('B','E','M',' ')}, /* Bemba (Zambia) */ +/*{"bem", HB_TAG('B','E','M',' ')},*/ /* Bemba (Zambia) */ {"ber", HB_TAG('B','B','R',' ')}, /* Berber [family] */ {"bfq", HB_TAG('B','A','D',' ')}, /* Badaga */ {"bft", HB_TAG('B','L','T',' ')}, /* Balti */ {"bfu", HB_TAG('L','A','H',' ')}, /* Gahri -> Lahuli */ {"bfy", HB_TAG('B','A','G',' ')}, /* Bagheli -> Baghelkhandi */ {"bg", HB_TAG('B','G','R',' ')}, /* Bulgarian */ - {"bgc", HB_TAG('B','G','C',' ')}, /* Haryanvi */ +/*{"bgc", HB_TAG('B','G','C',' ')},*/ /* Haryanvi */ {"bgn", HB_TAG('B','L','I',' ')}, /* Western Balochi -> Baluchi */ {"bgp", HB_TAG('B','L','I',' ')}, /* Eastern Balochi -> Baluchi */ - {"bgq", HB_TAG('B','G','Q',' ')}, /* Bagri */ +/*{"bgq", HB_TAG('B','G','Q',' ')},*/ /* Bagri */ {"bgr", HB_TAG('Q','I','N',' ')}, /* Bawm Chin -> Chin */ {"bhb", HB_TAG('B','H','I',' ')}, /* Bhili */ - {"bhi", HB_TAG('B','H','I',' ')}, /* Bhilali -> Bhili */ +/*{"bhi", HB_TAG('B','H','I',' ')},*/ /* Bhilali -> Bhili */ {"bhk", HB_TAG('B','I','K',' ')}, /* Albay Bicolano (retired code) -> Bikol */ - {"bho", HB_TAG('B','H','O',' ')}, /* Bhojpuri */ +/*{"bho", HB_TAG('B','H','O',' ')},*/ /* Bhojpuri */ {"bhr", HB_TAG('M','L','G',' ')}, /* Bara Malagasy -> Malagasy */ {"bi", HB_TAG('B','I','S',' ')}, /* Bislama */ - {"bik", HB_TAG('B','I','K',' ')}, /* Bikol [macrolanguage] */ +/*{"bik", HB_TAG('B','I','K',' ')},*/ /* Bikol [macrolanguage] */ {"bin", HB_TAG('E','D','O',' ')}, /* Edo */ - {"bjj", HB_TAG('B','J','J',' ')}, /* Kanauji */ +/*{"bjj", HB_TAG('B','J','J',' ')},*/ /* Kanauji */ {"bjn", HB_TAG('M','L','Y',' ')}, /* Banjar -> Malay */ {"bjq", HB_TAG('M','L','G',' ')}, /* Southern Betsimisaraka Malagasy (retired code) -> Malagasy */ {"bjt", HB_TAG('B','L','N',' ')}, /* Balanta-Ganja -> Balante */ {"bla", HB_TAG('B','K','F',' ')}, /* Siksika -> Blackfoot */ {"ble", HB_TAG('B','L','N',' ')}, /* Balanta-Kentohe -> Balante */ - {"blk", HB_TAG('B','L','K',' ')}, /* Pa’o Karen */ +/*{"blk", HB_TAG('B','L','K',' ')},*/ /* Pa’o Karen */ {"bln", HB_TAG('B','I','K',' ')}, /* Southern Catanduanes Bikol -> Bikol */ {"bm", HB_TAG('B','M','B',' ')}, /* Bambara (Bamanankan) */ {"bmm", HB_TAG('M','L','G',' ')}, /* Northern Betsimisaraka Malagasy -> Malagasy */ {"bn", HB_TAG('B','E','N',' ')}, /* Bengali */ {"bo", HB_TAG('T','I','B',' ')}, /* Tibetan */ - {"bpy", HB_TAG('B','P','Y',' ')}, /* Bishnupriya -> Bishnupriya Manipuri */ +/*{"bpy", HB_TAG('B','P','Y',' ')},*/ /* Bishnupriya -> Bishnupriya Manipuri */ {"bqi", HB_TAG('L','R','C',' ')}, /* Bakhtiari -> Luri */ {"br", HB_TAG('B','R','E',' ')}, /* Breton */ {"bra", HB_TAG('B','R','I',' ')}, /* Braj -> Braj Bhasha */ - {"brh", HB_TAG('B','R','H',' ')}, /* Brahui */ - {"brx", HB_TAG('B','R','X',' ')}, /* Bodo (India) */ +/*{"brh", HB_TAG('B','R','H',' ')},*/ /* Brahui */ +/*{"brx", HB_TAG('B','R','X',' ')},*/ /* Bodo (India) */ {"bs", HB_TAG('B','O','S',' ')}, /* Bosnian */ - {"bsk", HB_TAG('B','S','K',' ')}, /* Burushaski */ +/*{"bsk", HB_TAG('B','S','K',' ')},*/ /* Burushaski */ {"btb", HB_TAG('B','T','I',' ')}, /* Beti (Cameroon) (retired code) */ {"btj", HB_TAG('M','L','Y',' ')}, /* Bacanese Malay -> Malay */ {"bto", HB_TAG('B','I','K',' ')}, /* Rinconada Bikol -> Bikol */ - {"bts", HB_TAG('B','T','S',' ')}, /* Batak Simalungun */ - {"bug", HB_TAG('B','U','G',' ')}, /* Buginese -> Bugis */ +/*{"bts", HB_TAG('B','T','S',' ')},*/ /* Batak Simalungun */ +/*{"bug", HB_TAG('B','U','G',' ')},*/ /* Buginese -> Bugis */ {"bum", HB_TAG('B','T','I',' ')}, /* Bulu (Cameroon) -> Beti */ {"bve", HB_TAG('M','L','Y',' ')}, /* Berau Malay -> Malay */ {"bvu", HB_TAG('M','L','Y',' ')}, /* Bukit Malay -> Malay */ @@ -157,35 +157,35 @@ static const LangTag ot_languages[] = { {"bxp", HB_TAG('B','T','I',' ')}, /* Bebil -> Beti */ {"bxr", HB_TAG('R','B','U',' ')}, /* Russia Buriat -> Russian Buriat */ {"byn", HB_TAG('B','I','L',' ')}, /* Bilin -> Bilen */ - {"byv", HB_TAG('B','Y','V',' ')}, /* Medumba */ +/*{"byv", HB_TAG('B','Y','V',' ')},*/ /* Medumba */ {"bzc", HB_TAG('M','L','G',' ')}, /* Southern Betsimisaraka Malagasy -> Malagasy */ {"ca", HB_TAG('C','A','T',' ')}, /* Catalan */ {"caf", HB_TAG('C','R','R',' ')}, /* Southern Carrier -> Carrier */ {"caf", HB_TAG('A','T','H',' ')}, /* Southern Carrier -> Athapaskan */ - {"cak", HB_TAG('C','A','K',' ')}, /* Kaqchikel */ - {"cbk", HB_TAG('C','B','K',' ')}, /* Chavacano -> Zamboanga Chavacano */ +/*{"cak", HB_TAG('C','A','K',' ')},*/ /* Kaqchikel */ +/*{"cbk", HB_TAG('C','B','K',' ')},*/ /* Chavacano -> Zamboanga Chavacano */ {"cbl", HB_TAG('Q','I','N',' ')}, /* Bualkhaw Chin -> Chin */ {"cco", HB_TAG('C','C','H','N')}, /* Comaltepec Chinantec -> Chinantec */ {"ccq", HB_TAG('A','R','K',' ')}, /* Chaungtha (retired code) -> Rakhine */ {"cdo", HB_TAG('Z','H','S',' ')}, /* Min Dong Chinese -> Chinese Simplified */ {"ce", HB_TAG('C','H','E',' ')}, /* Chechen */ - {"ceb", HB_TAG('C','E','B',' ')}, /* Cebuano */ +/*{"ceb", HB_TAG('C','E','B',' ')},*/ /* Cebuano */ {"cfm", HB_TAG('H','A','L',' ')}, /* Halam (Falam Chin) */ - {"cgg", HB_TAG('C','G','G',' ')}, /* Chiga */ +/*{"cgg", HB_TAG('C','G','G',' ')},*/ /* Chiga */ {"ch", HB_TAG('C','H','A',' ')}, /* Chamorro */ {"chj", HB_TAG('C','C','H','N')}, /* Ojitlán Chinantec -> Chinantec */ {"chk", HB_TAG('C','H','K','0')}, /* Chuukese */ - {"cho", HB_TAG('C','H','O',' ')}, /* Choctaw */ +/*{"cho", HB_TAG('C','H','O',' ')},*/ /* Choctaw */ {"chp", HB_TAG('C','H','P',' ')}, /* Chipewyan */ {"chp", HB_TAG('S','A','Y',' ')}, /* Chipewyan -> Sayisi */ {"chp", HB_TAG('A','T','H',' ')}, /* Chipewyan -> Athapaskan */ {"chq", HB_TAG('C','C','H','N')}, /* Quiotepec Chinantec -> Chinantec */ - {"chr", HB_TAG('C','H','R',' ')}, /* Cherokee */ - {"chy", HB_TAG('C','H','Y',' ')}, /* Cheyenne */ +/*{"chr", HB_TAG('C','H','R',' ')},*/ /* Cherokee */ +/*{"chy", HB_TAG('C','H','Y',' ')},*/ /* Cheyenne */ {"chz", HB_TAG('C','C','H','N')}, /* Ozumacín Chinantec -> Chinantec */ {"ciw", HB_TAG('O','J','B',' ')}, /* Chippewa -> Ojibway */ - {"cja", HB_TAG('C','J','A',' ')}, /* Western Cham */ - {"cjm", HB_TAG('C','J','M',' ')}, /* Eastern Cham */ +/*{"cja", HB_TAG('C','J','A',' ')},*/ /* Western Cham */ +/*{"cjm", HB_TAG('C','J','M',' ')},*/ /* Eastern Cham */ {"cjy", HB_TAG('Z','H','S',' ')}, /* Jinyu Chinese -> Chinese Simplified */ {"cka", HB_TAG('Q','I','N',' ')}, /* Khumi Awa Chin (retired code) -> Chin */ {"ckb", HB_TAG('K','U','R',' ')}, /* Central Kurdish -> Kurdish */ @@ -203,12 +203,12 @@ static const LangTag ot_languages[] = { {"cnw", HB_TAG('Q','I','N',' ')}, /* Ngawn Chin -> Chin */ {"co", HB_TAG('C','O','S',' ')}, /* Corsican */ {"coa", HB_TAG('M','L','Y',' ')}, /* Cocos Islands Malay -> Malay */ - {"cop", HB_TAG('C','O','P',' ')}, /* Coptic */ +/*{"cop", HB_TAG('C','O','P',' ')},*/ /* Coptic */ {"coq", HB_TAG('A','T','H',' ')}, /* Coquille -> Athapaskan */ {"cpa", HB_TAG('C','C','H','N')}, /* Palantla Chinantec -> Chinantec */ {"cpe", HB_TAG('C','P','P',' ')}, /* English-based creoles and pidgins [family] -> Creoles */ {"cpf", HB_TAG('C','P','P',' ')}, /* French-based creoles and pidgins [family] -> Creoles */ - {"cpp", HB_TAG('C','P','P',' ')}, /* Portuguese-based creoles and pidgins [family] -> Creoles */ +/*{"cpp", HB_TAG('C','P','P',' ')},*/ /* Portuguese-based creoles and pidgins [family] -> Creoles */ {"cpx", HB_TAG('Z','H','S',' ')}, /* Pu-Xian Chinese -> Chinese Simplified */ {"cqd", HB_TAG('H','M','N',' ')}, /* Chuanqiandian Cluster Miao -> Hmong */ {"cqu", HB_TAG('Q','U','H',' ')}, /* Chilean Quechua (retired code) -> Quechua (Bolivia) */ @@ -225,7 +225,7 @@ static const LangTag ot_languages[] = { {"crx", HB_TAG('A','T','H',' ')}, /* Carrier -> Athapaskan */ {"cs", HB_TAG('C','S','Y',' ')}, /* Czech */ {"csa", HB_TAG('C','C','H','N')}, /* Chiltepec Chinantec -> Chinantec */ - {"csb", HB_TAG('C','S','B',' ')}, /* Kashubian */ +/*{"csb", HB_TAG('C','S','B',' ')},*/ /* Kashubian */ {"csh", HB_TAG('Q','I','N',' ')}, /* Asho Chin -> Chin */ {"cso", HB_TAG('C','C','H','N')}, /* Sochiapam Chinantec -> Chinantec */ {"csw", HB_TAG('N','C','R',' ')}, /* Swampy Cree -> N-Cree */ @@ -234,12 +234,12 @@ static const LangTag ot_languages[] = { {"ctc", HB_TAG('A','T','H',' ')}, /* Chetco -> Athapaskan */ {"ctd", HB_TAG('Q','I','N',' ')}, /* Tedim Chin -> Chin */ {"cte", HB_TAG('C','C','H','N')}, /* Tepinapa Chinantec -> Chinantec */ - {"ctg", HB_TAG('C','T','G',' ')}, /* Chittagonian */ +/*{"ctg", HB_TAG('C','T','G',' ')},*/ /* Chittagonian */ {"ctl", HB_TAG('C','C','H','N')}, /* Tlacoatzintepec Chinantec -> Chinantec */ {"cts", HB_TAG('B','I','K',' ')}, /* Northern Catanduanes Bikol -> Bikol */ {"cu", HB_TAG('C','S','L',' ')}, /* Church Slavonic */ {"cuc", HB_TAG('C','C','H','N')}, /* Usila Chinantec -> Chinantec */ - {"cuk", HB_TAG('C','U','K',' ')}, /* San Blas Kuna */ +/*{"cuk", HB_TAG('C','U','K',' ')},*/ /* San Blas Kuna */ {"cv", HB_TAG('C','H','U',' ')}, /* Chuvash */ {"cvn", HB_TAG('C','C','H','N')}, /* Valle Nacional Chinantec -> Chinantec */ {"cwd", HB_TAG('D','C','R',' ')}, /* Woods Cree */ @@ -251,32 +251,32 @@ static const LangTag ot_languages[] = { {"da", HB_TAG('D','A','N',' ')}, /* Danish */ {"dao", HB_TAG('Q','I','N',' ')}, /* Daai Chin -> Chin */ {"dap", HB_TAG('N','I','S',' ')}, /* Nisi (India) (retired code) */ - {"dar", HB_TAG('D','A','R',' ')}, /* Dargwa */ - {"dax", HB_TAG('D','A','X',' ')}, /* Dayi */ +/*{"dar", HB_TAG('D','A','R',' ')},*/ /* Dargwa */ +/*{"dax", HB_TAG('D','A','X',' ')},*/ /* Dayi */ {"de", HB_TAG('D','E','U',' ')}, /* German */ {"den", HB_TAG('S','L','A',' ')}, /* Slave (Athapascan) [macrolanguage] -> Slavey */ {"den", HB_TAG('A','T','H',' ')}, /* Slave (Athapascan) [macrolanguage] -> Athapaskan */ - {"dgo", HB_TAG('D','G','O',' ')}, /* Dogri */ +/*{"dgo", HB_TAG('D','G','O',' ')},*/ /* Dogri */ {"dgr", HB_TAG('A','T','H',' ')}, /* Dogrib -> Athapaskan */ {"dhd", HB_TAG('M','A','W',' ')}, /* Dhundari -> Marwari */ - {"dhg", HB_TAG('D','H','G',' ')}, /* Dhangu */ +/*{"dhg", HB_TAG('D','H','G',' ')},*/ /* Dhangu */ {"dib", HB_TAG('D','N','K',' ')}, /* South Central Dinka -> Dinka */ {"dik", HB_TAG('D','N','K',' ')}, /* Southwestern Dinka -> Dinka */ {"din", HB_TAG('D','N','K',' ')}, /* Dinka [macrolanguage] */ {"dip", HB_TAG('D','N','K',' ')}, /* Northeastern Dinka -> Dinka */ - {"diq", HB_TAG('D','I','Q',' ')}, /* Dimli */ +/*{"diq", HB_TAG('D','I','Q',' ')},*/ /* Dimli */ {"diw", HB_TAG('D','N','K',' ')}, /* Northwestern Dinka -> Dinka */ {"dje", HB_TAG('D','J','R',' ')}, /* Zarma */ {"djr", HB_TAG('D','J','R','0')}, /* Djambarrpuyngu */ {"dks", HB_TAG('D','N','K',' ')}, /* Southeastern Dinka -> Dinka */ {"dng", HB_TAG('D','U','N',' ')}, /* Dungan */ - {"dnj", HB_TAG('D','N','J',' ')}, /* Dan */ +/*{"dnj", HB_TAG('D','N','J',' ')},*/ /* Dan */ {"doi", HB_TAG('D','G','R',' ')}, /* Dogri [macrolanguage] */ {"drh", HB_TAG('M','N','G',' ')}, /* Darkhat (retired code) -> Mongolian */ {"drw", HB_TAG('D','R','I',' ')}, /* Darwazi (retired code) -> Dari */ {"dsb", HB_TAG('L','S','B',' ')}, /* Lower Sorbian */ {"dty", HB_TAG('N','E','P',' ')}, /* Dotyali -> Nepali */ - {"duj", HB_TAG('D','U','J',' ')}, /* Dhuwal (retired code) */ +/*{"duj", HB_TAG('D','U','J',' ')},*/ /* Dhuwal (retired code) */ {"dup", HB_TAG('M','L','Y',' ')}, /* Duano -> Malay */ {"dv", HB_TAG('D','I','V',' ')}, /* Divehi (Dhivehi, Maldivian) */ {"dv", HB_TAG('D','H','V',' ')}, /* Divehi (Dhivehi, Maldivian) (deprecated) */ @@ -285,7 +285,7 @@ static const LangTag ot_languages[] = { {"dyu", HB_TAG('J','U','L',' ')}, /* Dyula -> Jula */ {"dz", HB_TAG('D','Z','N',' ')}, /* Dzongkha */ {"ee", HB_TAG('E','W','E',' ')}, /* Ewe */ - {"efi", HB_TAG('E','F','I',' ')}, /* Efik */ +/*{"efi", HB_TAG('E','F','I',' ')},*/ /* Efik */ {"ekk", HB_TAG('E','T','I',' ')}, /* Standard Estonian -> Estonian */ {"el", HB_TAG('E','L','L',' ')}, /* Modern Greek (1453-) -> Greek */ {"emk", HB_TAG('E','M','K',' ')}, /* Eastern Maninkakan */ @@ -299,7 +299,7 @@ static const LangTag ot_languages[] = { {"esg", HB_TAG('G','O','N',' ')}, /* Aheri Gondi -> Gondi */ {"esi", HB_TAG('I','P','K',' ')}, /* North Alaskan Inupiatun -> Inupiat */ {"esk", HB_TAG('I','P','K',' ')}, /* Northwest Alaska Inupiatun -> Inupiat */ - {"esu", HB_TAG('E','S','U',' ')}, /* Central Yupik */ +/*{"esu", HB_TAG('E','S','U',' ')},*/ /* Central Yupik */ {"et", HB_TAG('E','T','I',' ')}, /* Estonian [macrolanguage] */ {"eto", HB_TAG('B','T','I',' ')}, /* Eton (Cameroon) -> Beti */ {"eu", HB_TAG('E','U','Q',' ')}, /* Basque */ @@ -309,7 +309,7 @@ static const LangTag ot_languages[] = { {"eyo", HB_TAG('K','A','L',' ')}, /* Keiyo -> Kalenjin */ {"fa", HB_TAG('F','A','R',' ')}, /* Persian [macrolanguage] */ {"fan", HB_TAG('F','A','N','0')}, /* Fang (Equatorial Guinea) */ - {"fat", HB_TAG('F','A','T',' ')}, /* Fanti */ +/*{"fat", HB_TAG('F','A','T',' ')},*/ /* Fanti */ {"fbl", HB_TAG('B','I','K',' ')}, /* West Albay Bikol -> Bikol */ {"ff", HB_TAG('F','U','L',' ')}, /* Fulah [macrolanguage] */ {"ffm", HB_TAG('F','U','L',' ')}, /* Maasina Fulfulde -> Fulah */ @@ -318,12 +318,12 @@ static const LangTag ot_languages[] = { {"fj", HB_TAG('F','J','I',' ')}, /* Fijian */ {"flm", HB_TAG('H','A','L',' ')}, /* Halam (Falam Chin) (retired code) */ {"flm", HB_TAG('Q','I','N',' ')}, /* Falam Chin (retired code) -> Chin */ - {"fmp", HB_TAG('F','M','P',' ')}, /* Fe’fe’ */ +/*{"fmp", HB_TAG('F','M','P',' ')},*/ /* Fe’fe’ */ {"fo", HB_TAG('F','O','S',' ')}, /* Faroese */ - {"fon", HB_TAG('F','O','N',' ')}, /* Fon */ +/*{"fon", HB_TAG('F','O','N',' ')},*/ /* Fon */ {"fr", HB_TAG('F','R','A',' ')}, /* French */ - {"frc", HB_TAG('F','R','C',' ')}, /* Cajun French */ - {"frp", HB_TAG('F','R','P',' ')}, /* Arpitan */ +/*{"frc", HB_TAG('F','R','C',' ')},*/ /* Cajun French */ +/*{"frp", HB_TAG('F','R','P',' ')},*/ /* Arpitan */ {"fub", HB_TAG('F','U','L',' ')}, /* Adamawa Fulfulde -> Fulah */ {"fuc", HB_TAG('F','U','L',' ')}, /* Pulaar -> Fulah */ {"fue", HB_TAG('F','U','L',' ')}, /* Borgu Fulfulde -> Fulah */ @@ -332,11 +332,11 @@ static const LangTag ot_languages[] = { {"fui", HB_TAG('F','U','L',' ')}, /* Bagirmi Fulfulde -> Fulah */ {"fuq", HB_TAG('F','U','L',' ')}, /* Central-Eastern Niger Fulfulde -> Fulah */ {"fur", HB_TAG('F','R','L',' ')}, /* Friulian */ - {"fuv", HB_TAG('F','U','V',' ')}, /* Nigerian Fulfulde */ +/*{"fuv", HB_TAG('F','U','V',' ')},*/ /* Nigerian Fulfulde */ {"fy", HB_TAG('F','R','I',' ')}, /* Western Frisian -> Frisian */ {"ga", HB_TAG('I','R','I',' ')}, /* Irish */ {"gaa", HB_TAG('G','A','D',' ')}, /* Ga */ - {"gag", HB_TAG('G','A','G',' ')}, /* Gagauz */ +/*{"gag", HB_TAG('G','A','G',' ')},*/ /* Gagauz */ {"gan", HB_TAG('Z','H','S',' ')}, /* Gan Chinese -> Chinese Simplified */ {"gax", HB_TAG('O','R','O',' ')}, /* Borana-Arsi-Guji Oromo -> Oromo */ {"gaz", HB_TAG('O','R','O',' ')}, /* West Central Oromo -> Oromo */ @@ -344,34 +344,34 @@ static const LangTag ot_languages[] = { {"gce", HB_TAG('A','T','H',' ')}, /* Galice -> Athapaskan */ {"gd", HB_TAG('G','A','E',' ')}, /* Scottish Gaelic (Gaelic) */ {"gda", HB_TAG('R','A','J',' ')}, /* Gade Lohar -> Rajasthani */ - {"gez", HB_TAG('G','E','Z',' ')}, /* Geez */ +/*{"gez", HB_TAG('G','E','Z',' ')},*/ /* Geez */ {"ggo", HB_TAG('G','O','N',' ')}, /* Southern Gondi (retired code) -> Gondi */ - {"gih", HB_TAG('G','I','H',' ')}, /* Githabul */ +/*{"gih", HB_TAG('G','I','H',' ')},*/ /* Githabul */ {"gil", HB_TAG('G','I','L','0')}, /* Kiribati (Gilbertese) */ {"gju", HB_TAG('R','A','J',' ')}, /* Gujari -> Rajasthani */ - {"gkp", HB_TAG('G','K','P',' ')}, /* Guinea Kpelle -> Kpelle (Guinea) */ +/*{"gkp", HB_TAG('G','K','P',' ')},*/ /* Guinea Kpelle -> Kpelle (Guinea) */ {"gl", HB_TAG('G','A','L',' ')}, /* Galician */ {"gld", HB_TAG('N','A','N',' ')}, /* Nanai */ - {"glk", HB_TAG('G','L','K',' ')}, /* Gilaki */ +/*{"glk", HB_TAG('G','L','K',' ')},*/ /* Gilaki */ {"gn", HB_TAG('G','U','A',' ')}, /* Guarani [macrolanguage] */ - {"gnn", HB_TAG('G','N','N',' ')}, /* Gumatj */ +/*{"gnn", HB_TAG('G','N','N',' ')},*/ /* Gumatj */ {"gno", HB_TAG('G','O','N',' ')}, /* Northern Gondi -> Gondi */ {"gnw", HB_TAG('G','U','A',' ')}, /* Western Bolivian Guaraní -> Guarani */ - {"gog", HB_TAG('G','O','G',' ')}, /* Gogo */ +/*{"gog", HB_TAG('G','O','G',' ')},*/ /* Gogo */ {"gom", HB_TAG('K','O','K',' ')}, /* Goan Konkani -> Konkani */ - {"gon", HB_TAG('G','O','N',' ')}, /* Gondi [macrolanguage] */ +/*{"gon", HB_TAG('G','O','N',' ')},*/ /* Gondi [macrolanguage] */ {"grt", HB_TAG('G','R','O',' ')}, /* Garo */ {"gru", HB_TAG('S','O','G',' ')}, /* Kistane -> Sodo Gurage */ {"gsw", HB_TAG('A','L','S',' ')}, /* Alsatian */ {"gu", HB_TAG('G','U','J',' ')}, /* Gujarati */ - {"guc", HB_TAG('G','U','C',' ')}, /* Wayuu */ - {"guf", HB_TAG('G','U','F',' ')}, /* Gupapuyngu */ +/*{"guc", HB_TAG('G','U','C',' ')},*/ /* Wayuu */ +/*{"guf", HB_TAG('G','U','F',' ')},*/ /* Gupapuyngu */ {"gug", HB_TAG('G','U','A',' ')}, /* Paraguayan Guaraní -> Guarani */ {"gui", HB_TAG('G','U','A',' ')}, /* Eastern Bolivian Guaraní -> Guarani */ {"guk", HB_TAG('G','M','Z',' ')}, /* Gumuz */ {"guk", HB_TAG('G','U','K',' ')}, /* Gumuz (SIL fonts) */ {"gun", HB_TAG('G','U','A',' ')}, /* Mbyá Guaraní -> Guarani */ - {"guz", HB_TAG('G','U','Z',' ')}, /* Gusii */ +/*{"guz", HB_TAG('G','U','Z',' ')},*/ /* Gusii */ {"gv", HB_TAG('M','N','X',' ')}, /* Manx */ {"gwi", HB_TAG('A','T','H',' ')}, /* Gwichʼin -> Athapaskan */ {"ha", HB_TAG('H','A','U',' ')}, /* Hausa */ @@ -379,13 +379,13 @@ static const LangTag ot_languages[] = { {"hae", HB_TAG('O','R','O',' ')}, /* Eastern Oromo -> Oromo */ {"hak", HB_TAG('Z','H','S',' ')}, /* Hakka Chinese -> Chinese Simplified */ {"har", HB_TAG('H','R','I',' ')}, /* Harari */ - {"haw", HB_TAG('H','A','W',' ')}, /* Hawaiian */ - {"hay", HB_TAG('H','A','Y',' ')}, /* Haya */ - {"haz", HB_TAG('H','A','Z',' ')}, /* Hazaragi */ +/*{"haw", HB_TAG('H','A','W',' ')},*/ /* Hawaiian */ +/*{"hay", HB_TAG('H','A','Y',' ')},*/ /* Haya */ +/*{"haz", HB_TAG('H','A','Z',' ')},*/ /* Hazaragi */ {"he", HB_TAG('I','W','R',' ')}, /* Hebrew */ {"hea", HB_TAG('H','M','N',' ')}, /* Northern Qiandong Miao -> Hmong */ {"hi", HB_TAG('H','I','N',' ')}, /* Hindi */ - {"hil", HB_TAG('H','I','L',' ')}, /* Hiligaynon */ +/*{"hil", HB_TAG('H','I','L',' ')},*/ /* Hiligaynon */ {"hji", HB_TAG('M','L','Y',' ')}, /* Haji -> Malay */ {"hlt", HB_TAG('Q','I','N',' ')}, /* Matu Chin -> Chin */ {"hma", HB_TAG('H','M','N',' ')}, /* Southern Mashan Hmong -> Hmong */ @@ -398,14 +398,14 @@ static const LangTag ot_languages[] = { {"hmj", HB_TAG('H','M','N',' ')}, /* Ge -> Hmong */ {"hml", HB_TAG('H','M','N',' ')}, /* Luopohe Hmong -> Hmong */ {"hmm", HB_TAG('H','M','N',' ')}, /* Central Mashan Hmong -> Hmong */ - {"hmn", HB_TAG('H','M','N',' ')}, /* Hmong [macrolanguage] */ +/*{"hmn", HB_TAG('H','M','N',' ')},*/ /* Hmong [macrolanguage] */ {"hmp", HB_TAG('H','M','N',' ')}, /* Northern Mashan Hmong -> Hmong */ {"hmq", HB_TAG('H','M','N',' ')}, /* Eastern Qiandong Miao -> Hmong */ {"hms", HB_TAG('H','M','N',' ')}, /* Southern Qiandong Miao -> Hmong */ {"hmw", HB_TAG('H','M','N',' ')}, /* Western Mashan Hmong -> Hmong */ {"hmy", HB_TAG('H','M','N',' ')}, /* Southern Guiyang Hmong -> Hmong */ {"hmz", HB_TAG('H','M','N',' ')}, /* Hmong Shua -> Hmong */ - {"hnd", HB_TAG('H','N','D',' ')}, /* Southern Hindko -> Hindko */ +/*{"hnd", HB_TAG('H','N','D',' ')},*/ /* Southern Hindko -> Hindko */ {"hne", HB_TAG('C','H','H',' ')}, /* Chhattisgarhi -> Chattisgarhi */ {"hnj", HB_TAG('H','M','N',' ')}, /* Hmong Njua -> Hmong */ {"hno", HB_TAG('H','N','D',' ')}, /* Northern Hindko -> Hindko */ @@ -426,8 +426,8 @@ static const LangTag ot_languages[] = { {"hyw", HB_TAG('H','Y','E',' ')}, /* Western Armenian -> Armenian */ {"hz", HB_TAG('H','E','R',' ')}, /* Herero */ {"ia", HB_TAG('I','N','A',' ')}, /* Interlingua (International Auxiliary Language Association) */ - {"iba", HB_TAG('I','B','A',' ')}, /* Iban */ - {"ibb", HB_TAG('I','B','B',' ')}, /* Ibibio */ +/*{"iba", HB_TAG('I','B','A',' ')},*/ /* Iban */ +/*{"ibb", HB_TAG('I','B','B',' ')},*/ /* Ibibio */ {"id", HB_TAG('I','N','D',' ')}, /* Indonesian */ {"ida", HB_TAG('L','U','H',' ')}, /* Idakho-Isukha-Tiriki -> Luyia */ {"ie", HB_TAG('I','L','E',' ')}, /* Interlingue */ @@ -435,11 +435,11 @@ static const LangTag ot_languages[] = { {"igb", HB_TAG('E','B','I',' ')}, /* Ebira */ {"ii", HB_TAG('Y','I','M',' ')}, /* Sichuan Yi -> Yi Modern */ {"ijc", HB_TAG('I','J','O',' ')}, /* Izon -> Ijo */ - {"ijo", HB_TAG('I','J','O',' ')}, /* Ijo [family] */ +/*{"ijo", HB_TAG('I','J','O',' ')},*/ /* Ijo [family] */ {"ik", HB_TAG('I','P','K',' ')}, /* Inupiaq [macrolanguage] -> Inupiat */ {"ike", HB_TAG('I','N','U',' ')}, /* Eastern Canadian Inuktitut -> Inuktitut */ {"ikt", HB_TAG('I','N','U',' ')}, /* Inuinnaqtun -> Inuktitut */ - {"ilo", HB_TAG('I','L','O',' ')}, /* Iloko -> Ilokano */ +/*{"ilo", HB_TAG('I','L','O',' ')},*/ /* Iloko -> Ilokano */ {"in", HB_TAG('I','N','D',' ')}, /* Indonesian (retired code) */ {"ing", HB_TAG('A','T','H',' ')}, /* Degexit'an -> Athapaskan */ {"inh", HB_TAG('I','N','G',' ')}, /* Ingush */ @@ -450,10 +450,10 @@ static const LangTag ot_languages[] = { {"iw", HB_TAG('I','W','R',' ')}, /* Hebrew (retired code) */ {"ja", HB_TAG('J','A','N',' ')}, /* Japanese */ {"jak", HB_TAG('M','L','Y',' ')}, /* Jakun -> Malay */ - {"jam", HB_TAG('J','A','M',' ')}, /* Jamaican Creole English -> Jamaican Creole */ +/*{"jam", HB_TAG('J','A','M',' ')},*/ /* Jamaican Creole English -> Jamaican Creole */ {"jax", HB_TAG('M','L','Y',' ')}, /* Jambi Malay -> Malay */ - {"jbo", HB_TAG('J','B','O',' ')}, /* Lojban */ - {"jct", HB_TAG('J','C','T',' ')}, /* Krymchak */ +/*{"jbo", HB_TAG('J','B','O',' ')},*/ /* Lojban */ +/*{"jct", HB_TAG('J','C','T',' ')},*/ /* Krymchak */ {"ji", HB_TAG('J','I','I',' ')}, /* Yiddish (retired code) */ {"jv", HB_TAG('J','A','V',' ')}, /* Javanese */ {"jw", HB_TAG('J','A','V',' ')}, /* Javanese (retired code) */ @@ -467,11 +467,11 @@ static const LangTag ot_languages[] = { {"kca", HB_TAG('K','H','K',' ')}, /* Khanty -> Khanty-Kazim */ {"kca", HB_TAG('K','H','S',' ')}, /* Khanty -> Khanty-Shurishkar */ {"kca", HB_TAG('K','H','V',' ')}, /* Khanty -> Khanty-Vakhi */ - {"kde", HB_TAG('K','D','E',' ')}, /* Makonde */ +/*{"kde", HB_TAG('K','D','E',' ')},*/ /* Makonde */ {"kdr", HB_TAG('K','R','M',' ')}, /* Karaim */ {"kdt", HB_TAG('K','U','Y',' ')}, /* Kuy */ - {"kea", HB_TAG('K','E','A',' ')}, /* Kabuverdianu (Crioulo) */ - {"kek", HB_TAG('K','E','K',' ')}, /* Kekchi */ +/*{"kea", HB_TAG('K','E','A',' ')},*/ /* Kabuverdianu (Crioulo) */ +/*{"kek", HB_TAG('K','E','K',' ')},*/ /* Kekchi */ {"kex", HB_TAG('K','K','N',' ')}, /* Kukna -> Kokni */ {"kfa", HB_TAG('K','O','D',' ')}, /* Kodava -> Kodagu */ {"kfr", HB_TAG('K','A','C',' ')}, /* Kachhi -> Kachchi */ @@ -483,14 +483,14 @@ static const LangTag ot_languages[] = { {"khk", HB_TAG('M','N','G',' ')}, /* Halh Mongolian -> Mongolian */ {"kht", HB_TAG('K','H','N',' ')}, /* Khamti -> Khamti Shan (Microsoft fonts) */ {"kht", HB_TAG('K','H','T',' ')}, /* Khamti -> Khamti Shan (OpenType spec and SIL fonts) */ - {"khw", HB_TAG('K','H','W',' ')}, /* Khowar */ +/*{"khw", HB_TAG('K','H','W',' ')},*/ /* Khowar */ {"ki", HB_TAG('K','I','K',' ')}, /* Kikuyu (Gikuyu) */ - {"kiu", HB_TAG('K','I','U',' ')}, /* Kirmanjki */ +/*{"kiu", HB_TAG('K','I','U',' ')},*/ /* Kirmanjki */ {"kj", HB_TAG('K','U','A',' ')}, /* Kuanyama */ - {"kjd", HB_TAG('K','J','D',' ')}, /* Southern Kiwai */ +/*{"kjd", HB_TAG('K','J','D',' ')},*/ /* Southern Kiwai */ {"kjh", HB_TAG('K','H','A',' ')}, /* Khakas -> Khakass */ - {"kjp", HB_TAG('K','J','P',' ')}, /* Pwo Eastern Karen -> Eastern Pwo Karen */ - {"kjz", HB_TAG('K','J','Z',' ')}, /* Bumthangkha */ +/*{"kjp", HB_TAG('K','J','P',' ')},*/ /* Pwo Eastern Karen -> Eastern Pwo Karen */ +/*{"kjz", HB_TAG('K','J','Z',' ')},*/ /* Bumthangkha */ {"kk", HB_TAG('K','A','Z',' ')}, /* Kazakh */ {"kkz", HB_TAG('A','T','H',' ')}, /* Kaska -> Athapaskan */ {"kl", HB_TAG('G','R','N',' ')}, /* Greenlandic */ @@ -499,15 +499,15 @@ static const LangTag ot_languages[] = { {"kmb", HB_TAG('M','B','N',' ')}, /* Kimbundu -> Mbundu */ {"kmr", HB_TAG('K','U','R',' ')}, /* Northern Kurdish -> Kurdish */ {"kmw", HB_TAG('K','M','O',' ')}, /* Komo (Democratic Republic of Congo) */ - {"kmz", HB_TAG('K','M','Z',' ')}, /* Khorasani Turkish -> Khorasani Turkic */ +/*{"kmz", HB_TAG('K','M','Z',' ')},*/ /* Khorasani Turkish -> Khorasani Turkic */ {"kn", HB_TAG('K','A','N',' ')}, /* Kannada */ {"knc", HB_TAG('K','N','R',' ')}, /* Central Kanuri -> Kanuri */ {"kng", HB_TAG('K','O','N','0')}, /* Koongo -> Kongo */ {"knn", HB_TAG('K','O','K',' ')}, /* Konkani */ {"ko", HB_TAG('K','O','R',' ')}, /* Korean */ {"koi", HB_TAG('K','O','P',' ')}, /* Komi-Permyak */ - {"kok", HB_TAG('K','O','K',' ')}, /* Konkani [macrolanguage] */ - {"kos", HB_TAG('K','O','S',' ')}, /* Kosraean */ +/*{"kok", HB_TAG('K','O','K',' ')},*/ /* Konkani [macrolanguage] */ +/*{"kos", HB_TAG('K','O','S',' ')},*/ /* Kosraean */ {"koy", HB_TAG('A','T','H',' ')}, /* Koyukon -> Athapaskan */ {"kpe", HB_TAG('K','P','L',' ')}, /* Kpelle [macrolanguage] */ {"kpv", HB_TAG('K','O','Z',' ')}, /* Komi-Zyrian */ @@ -517,19 +517,19 @@ static const LangTag ot_languages[] = { {"kr", HB_TAG('K','N','R',' ')}, /* Kanuri [macrolanguage] */ {"krc", HB_TAG('K','A','R',' ')}, /* Karachay-Balkar -> Karachay */ {"krc", HB_TAG('B','A','L',' ')}, /* Karachay-Balkar -> Balkar */ - {"kri", HB_TAG('K','R','I',' ')}, /* Krio */ - {"krl", HB_TAG('K','R','L',' ')}, /* Karelian */ +/*{"kri", HB_TAG('K','R','I',' ')},*/ /* Krio */ +/*{"krl", HB_TAG('K','R','L',' ')},*/ /* Karelian */ {"krt", HB_TAG('K','N','R',' ')}, /* Tumari Kanuri -> Kanuri */ {"kru", HB_TAG('K','U','U',' ')}, /* Kurukh */ {"ks", HB_TAG('K','S','H',' ')}, /* Kashmiri */ {"ksh", HB_TAG('K','S','H','0')}, /* Kölsch -> Ripuarian */ {"kss", HB_TAG('K','I','S',' ')}, /* Southern Kisi -> Kisii */ - {"ksw", HB_TAG('K','S','W',' ')}, /* S’gaw Karen */ +/*{"ksw", HB_TAG('K','S','W',' ')},*/ /* S’gaw Karen */ {"ktb", HB_TAG('K','E','B',' ')}, /* Kambaata -> Kebena */ {"ktu", HB_TAG('K','O','N',' ')}, /* Kituba (Democratic Republic of Congo) -> Kikongo */ {"ktw", HB_TAG('A','T','H',' ')}, /* Kato -> Athapaskan */ {"ku", HB_TAG('K','U','R',' ')}, /* Kurdish [macrolanguage] */ - {"kum", HB_TAG('K','U','M',' ')}, /* Kumyk */ +/*{"kum", HB_TAG('K','U','M',' ')},*/ /* Kumyk */ {"kuu", HB_TAG('A','T','H',' ')}, /* Upper Kuskokwim -> Athapaskan */ {"kv", HB_TAG('K','O','M',' ')}, /* Komi [macrolanguage] */ {"kvb", HB_TAG('M','L','Y',' ')}, /* Kubu -> Malay */ @@ -540,7 +540,7 @@ static const LangTag ot_languages[] = { {"kxd", HB_TAG('M','L','Y',' ')}, /* Brunei -> Malay */ {"kxu", HB_TAG('K','U','I',' ')}, /* Kui (India) */ {"ky", HB_TAG('K','I','R',' ')}, /* Kirghiz (Kyrgyz) */ - {"kyu", HB_TAG('K','Y','U',' ')}, /* Western Kayah */ +/*{"kyu", HB_TAG('K','Y','U',' ')},*/ /* Western Kayah */ {"la", HB_TAG('L','A','T',' ')}, /* Latin */ {"lad", HB_TAG('J','U','D',' ')}, /* Ladino */ {"lb", HB_TAG('L','T','Z',' ')}, /* Luxembourgish */ @@ -550,25 +550,25 @@ static const LangTag ot_languages[] = { {"lce", HB_TAG('M','L','Y',' ')}, /* Loncong -> Malay */ {"lcf", HB_TAG('M','L','Y',' ')}, /* Lubu -> Malay */ {"ldi", HB_TAG('K','O','N','0')}, /* Laari -> Kongo */ - {"lez", HB_TAG('L','E','Z',' ')}, /* Lezghian -> Lezgi */ +/*{"lez", HB_TAG('L','E','Z',' ')},*/ /* Lezghian -> Lezgi */ {"lg", HB_TAG('L','U','G',' ')}, /* Ganda */ {"li", HB_TAG('L','I','M',' ')}, /* Limburgish */ {"lif", HB_TAG('L','M','B',' ')}, /* Limbu */ - {"lij", HB_TAG('L','I','J',' ')}, /* Ligurian */ - {"lis", HB_TAG('L','I','S',' ')}, /* Lisu */ +/*{"lij", HB_TAG('L','I','J',' ')},*/ /* Ligurian */ +/*{"lis", HB_TAG('L','I','S',' ')},*/ /* Lisu */ {"liw", HB_TAG('M','L','Y',' ')}, /* Col -> Malay */ - {"ljp", HB_TAG('L','J','P',' ')}, /* Lampung Api -> Lampung */ +/*{"ljp", HB_TAG('L','J','P',' ')},*/ /* Lampung Api -> Lampung */ {"lkb", HB_TAG('L','U','H',' ')}, /* Kabras -> Luyia */ - {"lki", HB_TAG('L','K','I',' ')}, /* Laki */ +/*{"lki", HB_TAG('L','K','I',' ')},*/ /* Laki */ {"lko", HB_TAG('L','U','H',' ')}, /* Khayo -> Luyia */ {"lks", HB_TAG('L','U','H',' ')}, /* Kisa -> Luyia */ {"lld", HB_TAG('L','A','D',' ')}, /* Ladin */ {"lmn", HB_TAG('L','A','M',' ')}, /* Lambadi -> Lambani */ - {"lmo", HB_TAG('L','M','O',' ')}, /* Lombard */ +/*{"lmo", HB_TAG('L','M','O',' ')},*/ /* Lombard */ {"ln", HB_TAG('L','I','N',' ')}, /* Lingala */ {"lo", HB_TAG('L','A','O',' ')}, /* Lao */ - {"lom", HB_TAG('L','O','M',' ')}, /* Loma (Liberia) */ - {"lrc", HB_TAG('L','R','C',' ')}, /* Northern Luri -> Luri */ +/*{"lom", HB_TAG('L','O','M',' ')},*/ /* Loma (Liberia) */ +/*{"lrc", HB_TAG('L','R','C',' ')},*/ /* Northern Luri -> Luri */ {"lri", HB_TAG('L','U','H',' ')}, /* Marachi -> Luyia */ {"lrm", HB_TAG('L','U','H',' ')}, /* Marama -> Luyia */ {"lsm", HB_TAG('L','U','H',' ')}, /* Saamia -> Luyia */ @@ -577,8 +577,8 @@ static const LangTag ot_languages[] = { {"lto", HB_TAG('L','U','H',' ')}, /* Tsotso -> Luyia */ {"lts", HB_TAG('L','U','H',' ')}, /* Tachoni -> Luyia */ {"lu", HB_TAG('L','U','B',' ')}, /* Luba-Katanga */ - {"lua", HB_TAG('L','U','A',' ')}, /* Luba-Lulua */ - {"luo", HB_TAG('L','U','O',' ')}, /* Luo (Kenya and Tanzania) */ +/*{"lua", HB_TAG('L','U','A',' ')},*/ /* Luba-Lulua */ +/*{"luo", HB_TAG('L','U','O',' ')},*/ /* Luo (Kenya and Tanzania) */ {"lus", HB_TAG('M','I','Z',' ')}, /* Lushai -> Mizo */ {"luy", HB_TAG('L','U','H',' ')}, /* Luyia [macrolanguage] */ {"luz", HB_TAG('L','R','C',' ')}, /* Southern Luri -> Luri */ @@ -587,33 +587,33 @@ static const LangTag ot_languages[] = { {"lwg", HB_TAG('L','U','H',' ')}, /* Wanga -> Luyia */ {"lzh", HB_TAG('Z','H','T',' ')}, /* Literary Chinese -> Chinese Traditional */ {"lzz", HB_TAG('L','A','Z',' ')}, /* Laz */ - {"mad", HB_TAG('M','A','D',' ')}, /* Madurese -> Madura */ - {"mag", HB_TAG('M','A','G',' ')}, /* Magahi */ +/*{"mad", HB_TAG('M','A','D',' ')},*/ /* Madurese -> Madura */ +/*{"mag", HB_TAG('M','A','G',' ')},*/ /* Magahi */ {"mai", HB_TAG('M','T','H',' ')}, /* Maithili */ {"mak", HB_TAG('M','K','R',' ')}, /* Makasar */ - {"mam", HB_TAG('M','A','M',' ')}, /* Mam */ +/*{"mam", HB_TAG('M','A','M',' ')},*/ /* Mam */ {"man", HB_TAG('M','N','K',' ')}, /* Mandingo [macrolanguage] -> Maninka */ {"max", HB_TAG('M','L','Y',' ')}, /* North Moluccan Malay -> Malay */ - {"mbo", HB_TAG('M','B','O',' ')}, /* Mbo (Cameroon) */ +/*{"mbo", HB_TAG('M','B','O',' ')},*/ /* Mbo (Cameroon) */ {"mct", HB_TAG('B','T','I',' ')}, /* Mengisa -> Beti */ {"mdf", HB_TAG('M','O','K',' ')}, /* Moksha */ - {"mdr", HB_TAG('M','D','R',' ')}, /* Mandar */ +/*{"mdr", HB_TAG('M','D','R',' ')},*/ /* Mandar */ {"mdy", HB_TAG('M','L','E',' ')}, /* Male (Ethiopia) */ {"men", HB_TAG('M','D','E',' ')}, /* Mende (Sierra Leone) */ {"meo", HB_TAG('M','L','Y',' ')}, /* Kedah Malay -> Malay */ - {"mer", HB_TAG('M','E','R',' ')}, /* Meru */ - {"mfa", HB_TAG('M','F','A',' ')}, /* Pattani Malay */ +/*{"mer", HB_TAG('M','E','R',' ')},*/ /* Meru */ +/*{"mfa", HB_TAG('M','F','A',' ')},*/ /* Pattani Malay */ {"mfb", HB_TAG('M','L','Y',' ')}, /* Bangka -> Malay */ - {"mfe", HB_TAG('M','F','E',' ')}, /* Morisyen */ +/*{"mfe", HB_TAG('M','F','E',' ')},*/ /* Morisyen */ {"mg", HB_TAG('M','L','G',' ')}, /* Malagasy [macrolanguage] */ {"mh", HB_TAG('M','A','H',' ')}, /* Marshallese */ {"mhr", HB_TAG('L','M','A',' ')}, /* Eastern Mari -> Low Mari */ {"mhv", HB_TAG('A','R','K',' ')}, /* Arakanese (retired code) -> Rakhine */ {"mi", HB_TAG('M','R','I',' ')}, /* Maori */ - {"min", HB_TAG('M','I','N',' ')}, /* Minangkabau */ +/*{"min", HB_TAG('M','I','N',' ')},*/ /* Minangkabau */ {"mk", HB_TAG('M','K','D',' ')}, /* Macedonian */ {"mku", HB_TAG('M','N','K',' ')}, /* Konyanka Maninka -> Maninka */ - {"mkw", HB_TAG('M','K','W',' ')}, /* Kituba (Congo) */ +/*{"mkw", HB_TAG('M','K','W',' ')},*/ /* Kituba (Congo) */ {"ml", HB_TAG('M','A','L',' ')}, /* Malayalam -> Malayalam Traditional */ {"ml", HB_TAG('M','L','R',' ')}, /* Malayalam -> Malayalam Reformed */ {"mlq", HB_TAG('M','L','N',' ')}, /* Western Maninkakan -> Malinke */ @@ -621,15 +621,15 @@ static const LangTag ot_languages[] = { {"mmr", HB_TAG('H','M','N',' ')}, /* Western Xiangxi Miao -> Hmong */ {"mn", HB_TAG('M','N','G',' ')}, /* Mongolian [macrolanguage] */ {"mnc", HB_TAG('M','C','H',' ')}, /* Manchu */ - {"mni", HB_TAG('M','N','I',' ')}, /* Manipuri */ +/*{"mni", HB_TAG('M','N','I',' ')},*/ /* Manipuri */ {"mnk", HB_TAG('M','N','D',' ')}, /* Mandinka */ {"mnk", HB_TAG('M','N','K',' ')}, /* Mandinka -> Maninka */ {"mnp", HB_TAG('Z','H','S',' ')}, /* Min Bei Chinese -> Chinese Simplified */ {"mns", HB_TAG('M','A','N',' ')}, /* Mansi */ {"mnw", HB_TAG('M','O','N',' ')}, /* Mon */ {"mo", HB_TAG('M','O','L',' ')}, /* Moldavian (retired code) */ - {"moh", HB_TAG('M','O','H',' ')}, /* Mohawk */ - {"mos", HB_TAG('M','O','S',' ')}, /* Mossi */ +/*{"moh", HB_TAG('M','O','H',' ')},*/ /* Mohawk */ +/*{"mos", HB_TAG('M','O','S',' ')},*/ /* Mossi */ {"mpe", HB_TAG('M','A','J',' ')}, /* Majang */ {"mqg", HB_TAG('M','L','Y',' ')}, /* Kota Bangun Kutai Malay -> Malay */ {"mr", HB_TAG('M','A','R',' ')}, /* Marathi */ @@ -644,38 +644,38 @@ static const LangTag ot_languages[] = { {"mui", HB_TAG('M','L','Y',' ')}, /* Musi -> Malay */ {"mup", HB_TAG('R','A','J',' ')}, /* Malvi -> Rajasthani */ {"muq", HB_TAG('H','M','N',' ')}, /* Eastern Xiangxi Miao -> Hmong */ - {"mus", HB_TAG('M','U','S',' ')}, /* Creek -> Muscogee */ +/*{"mus", HB_TAG('M','U','S',' ')},*/ /* Creek -> Muscogee */ {"mvb", HB_TAG('A','T','H',' ')}, /* Mattole -> Athapaskan */ {"mve", HB_TAG('M','A','W',' ')}, /* Marwari (Pakistan) */ {"mvf", HB_TAG('M','N','G',' ')}, /* Peripheral Mongolian -> Mongolian */ {"mwk", HB_TAG('M','N','K',' ')}, /* Kita Maninkakan -> Maninka */ - {"mwl", HB_TAG('M','W','L',' ')}, /* Mirandese */ +/*{"mwl", HB_TAG('M','W','L',' ')},*/ /* Mirandese */ {"mwr", HB_TAG('M','A','W',' ')}, /* Marwari [macrolanguage] */ - {"mww", HB_TAG('M','W','W',' ')}, /* Hmong Daw */ +/*{"mww", HB_TAG('M','W','W',' ')},*/ /* Hmong Daw */ {"my", HB_TAG('B','R','M',' ')}, /* Burmese */ {"mym", HB_TAG('M','E','N',' ')}, /* Me’en */ - {"myn", HB_TAG('M','Y','N',' ')}, /* Mayan [family] */ +/*{"myn", HB_TAG('M','Y','N',' ')},*/ /* Mayan [family] */ {"myq", HB_TAG('M','N','K',' ')}, /* Forest Maninka (retired code) -> Maninka */ {"myv", HB_TAG('E','R','Z',' ')}, /* Erzya */ - {"mzn", HB_TAG('M','Z','N',' ')}, /* Mazanderani */ +/*{"mzn", HB_TAG('M','Z','N',' ')},*/ /* Mazanderani */ {"na", HB_TAG('N','A','U',' ')}, /* Nauru -> Nauruan */ - {"nag", HB_TAG('N','A','G',' ')}, /* Naga Pidgin -> Naga-Assamese */ - {"nah", HB_TAG('N','A','H',' ')}, /* Nahuatl [family] */ +/*{"nag", HB_TAG('N','A','G',' ')},*/ /* Naga Pidgin -> Naga-Assamese */ +/*{"nah", HB_TAG('N','A','H',' ')},*/ /* Nahuatl [family] */ {"nan", HB_TAG('Z','H','S',' ')}, /* Min Nan Chinese -> Chinese Simplified */ - {"nap", HB_TAG('N','A','P',' ')}, /* Neapolitan */ +/*{"nap", HB_TAG('N','A','P',' ')},*/ /* Neapolitan */ {"nb", HB_TAG('N','O','R',' ')}, /* Norwegian Bokmål -> Norwegian */ {"nd", HB_TAG('N','D','B',' ')}, /* North Ndebele -> Ndebele */ - {"ndc", HB_TAG('N','D','C',' ')}, /* Ndau */ - {"nds", HB_TAG('N','D','S',' ')}, /* Low Saxon */ +/*{"ndc", HB_TAG('N','D','C',' ')},*/ /* Ndau */ +/*{"nds", HB_TAG('N','D','S',' ')},*/ /* Low Saxon */ {"ne", HB_TAG('N','E','P',' ')}, /* Nepali [macrolanguage] */ - {"new", HB_TAG('N','E','W',' ')}, /* Newari */ +/*{"new", HB_TAG('N','E','W',' ')},*/ /* Newari */ {"ng", HB_TAG('N','D','G',' ')}, /* Ndonga */ - {"nga", HB_TAG('N','G','A',' ')}, /* Ngbaka */ +/*{"nga", HB_TAG('N','G','A',' ')},*/ /* Ngbaka */ {"ngl", HB_TAG('L','M','W',' ')}, /* Lomwe */ {"ngo", HB_TAG('S','X','T',' ')}, /* Ngoni -> Sutu */ {"nhd", HB_TAG('G','U','A',' ')}, /* Chiripá -> Guarani */ {"niq", HB_TAG('K','A','L',' ')}, /* Nandi -> Kalenjin */ - {"niu", HB_TAG('N','I','U',' ')}, /* Niuean */ +/*{"niu", HB_TAG('N','I','U',' ')},*/ /* Niuean */ {"niv", HB_TAG('G','I','L',' ')}, /* Gilyak */ {"njz", HB_TAG('N','I','S',' ')}, /* Nyishi -> Nisi */ {"nl", HB_TAG('N','L','D',' ')}, /* Dutch */ @@ -683,24 +683,24 @@ static const LangTag ot_languages[] = { {"nn", HB_TAG('N','Y','N',' ')}, /* Norwegian Nynorsk (Nynorsk, Norwegian) */ {"no", HB_TAG('N','O','R',' ')}, /* Norwegian [macrolanguage] */ {"nod", HB_TAG('N','T','A',' ')}, /* Northern Thai -> Northern Tai */ - {"noe", HB_TAG('N','O','E',' ')}, /* Nimadi */ - {"nog", HB_TAG('N','O','G',' ')}, /* Nogai */ - {"nov", HB_TAG('N','O','V',' ')}, /* Novial */ +/*{"noe", HB_TAG('N','O','E',' ')},*/ /* Nimadi */ +/*{"nog", HB_TAG('N','O','G',' ')},*/ /* Nogai */ +/*{"nov", HB_TAG('N','O','V',' ')},*/ /* Novial */ {"npi", HB_TAG('N','E','P',' ')}, /* Nepali */ {"nqo", HB_TAG('N','K','O',' ')}, /* N’Ko */ {"nr", HB_TAG('N','D','B',' ')}, /* South Ndebele -> Ndebele */ {"nsk", HB_TAG('N','A','S',' ')}, /* Naskapi */ - {"nso", HB_TAG('N','S','O',' ')}, /* Pedi -> Sotho, Northern */ +/*{"nso", HB_TAG('N','S','O',' ')},*/ /* Pedi -> Sotho, Northern */ {"nv", HB_TAG('N','A','V',' ')}, /* Navajo */ {"nv", HB_TAG('A','T','H',' ')}, /* Navajo -> Athapaskan */ {"ny", HB_TAG('C','H','I',' ')}, /* Chichewa (Chewa, Nyanja) */ {"nyd", HB_TAG('L','U','H',' ')}, /* Nyore -> Luyia */ - {"nym", HB_TAG('N','Y','M',' ')}, /* Nyamwezi */ +/*{"nym", HB_TAG('N','Y','M',' ')},*/ /* Nyamwezi */ {"nyn", HB_TAG('N','K','L',' ')}, /* Nyankole */ - {"nza", HB_TAG('N','Z','A',' ')}, /* Tigon Mbembe -> Mbembe Tigon */ +/*{"nza", HB_TAG('N','Z','A',' ')},*/ /* Tigon Mbembe -> Mbembe Tigon */ {"oc", HB_TAG('O','C','I',' ')}, /* Occitan (post 1500) */ {"oj", HB_TAG('O','J','B',' ')}, /* Ojibwa [macrolanguage] -> Ojibway */ - {"ojb", HB_TAG('O','J','B',' ')}, /* Northwestern Ojibwa -> Ojibway */ +/*{"ojb", HB_TAG('O','J','B',' ')},*/ /* Northwestern Ojibwa -> Ojibway */ {"ojc", HB_TAG('O','J','B',' ')}, /* Central Ojibwa -> Ojibway */ {"ojg", HB_TAG('O','J','B',' ')}, /* Eastern Ojibwa -> Ojibway */ {"ojs", HB_TAG('O','C','R',' ')}, /* Severn Ojibwa -> Oji-Cree */ @@ -716,47 +716,47 @@ static const LangTag ot_languages[] = { {"os", HB_TAG('O','S','S',' ')}, /* Ossetian */ {"otw", HB_TAG('O','J','B',' ')}, /* Ottawa -> Ojibway */ {"pa", HB_TAG('P','A','N',' ')}, /* Punjabi */ - {"pag", HB_TAG('P','A','G',' ')}, /* Pangasinan */ - {"pam", HB_TAG('P','A','M',' ')}, /* Pampanga -> Pampangan */ +/*{"pag", HB_TAG('P','A','G',' ')},*/ /* Pangasinan */ +/*{"pam", HB_TAG('P','A','M',' ')},*/ /* Pampanga -> Pampangan */ {"pap", HB_TAG('P','A','P','0')}, /* Papiamento -> Papiamentu */ - {"pau", HB_TAG('P','A','U',' ')}, /* Palauan */ +/*{"pau", HB_TAG('P','A','U',' ')},*/ /* Palauan */ {"pbt", HB_TAG('P','A','S',' ')}, /* Southern Pashto -> Pashto */ {"pbu", HB_TAG('P','A','S',' ')}, /* Northern Pashto -> Pashto */ - {"pcc", HB_TAG('P','C','C',' ')}, /* Bouyei */ - {"pcd", HB_TAG('P','C','D',' ')}, /* Picard */ +/*{"pcc", HB_TAG('P','C','C',' ')},*/ /* Bouyei */ +/*{"pcd", HB_TAG('P','C','D',' ')},*/ /* Picard */ {"pce", HB_TAG('P','L','G',' ')}, /* Ruching Palaung -> Palaung */ {"pck", HB_TAG('Q','I','N',' ')}, /* Paite Chin -> Chin */ - {"pdc", HB_TAG('P','D','C',' ')}, /* Pennsylvania German */ +/*{"pdc", HB_TAG('P','D','C',' ')},*/ /* Pennsylvania German */ {"pel", HB_TAG('M','L','Y',' ')}, /* Pekal -> Malay */ {"pes", HB_TAG('F','A','R',' ')}, /* Iranian Persian -> Persian */ {"pga", HB_TAG('A','R','A',' ')}, /* Sudanese Creole Arabic -> Arabic */ - {"phk", HB_TAG('P','H','K',' ')}, /* Phake */ +/*{"phk", HB_TAG('P','H','K',' ')},*/ /* Phake */ {"pi", HB_TAG('P','A','L',' ')}, /* Pali */ - {"pih", HB_TAG('P','I','H',' ')}, /* Pitcairn-Norfolk -> Norfolk */ +/*{"pih", HB_TAG('P','I','H',' ')},*/ /* Pitcairn-Norfolk -> Norfolk */ {"pko", HB_TAG('K','A','L',' ')}, /* Pökoot -> Kalenjin */ {"pl", HB_TAG('P','L','K',' ')}, /* Polish */ {"pll", HB_TAG('P','L','G',' ')}, /* Shwe Palaung -> Palaung */ {"plp", HB_TAG('P','A','P',' ')}, /* Palpa */ {"plt", HB_TAG('M','L','G',' ')}, /* Plateau Malagasy -> Malagasy */ - {"pms", HB_TAG('P','M','S',' ')}, /* Piemontese */ - {"pnb", HB_TAG('P','N','B',' ')}, /* Western Panjabi */ - {"poh", HB_TAG('P','O','H',' ')}, /* Poqomchi' -> Pocomchi */ - {"pon", HB_TAG('P','O','N',' ')}, /* Pohnpeian */ +/*{"pms", HB_TAG('P','M','S',' ')},*/ /* Piemontese */ +/*{"pnb", HB_TAG('P','N','B',' ')},*/ /* Western Panjabi */ +/*{"poh", HB_TAG('P','O','H',' ')},*/ /* Poqomchi' -> Pocomchi */ +/*{"pon", HB_TAG('P','O','N',' ')},*/ /* Pohnpeian */ {"ppa", HB_TAG('B','A','G',' ')}, /* Pao (retired code) -> Baghelkhandi */ - {"pro", HB_TAG('P','R','O',' ')}, /* Old Provençal (to 1500) -> Provençal / Old Provençal */ +/*{"pro", HB_TAG('P','R','O',' ')},*/ /* Old Provençal (to 1500) -> Provençal / Old Provençal */ {"prs", HB_TAG('D','R','I',' ')}, /* Dari */ {"ps", HB_TAG('P','A','S',' ')}, /* Pashto [macrolanguage] */ {"pse", HB_TAG('M','L','Y',' ')}, /* Central Malay -> Malay */ {"pst", HB_TAG('P','A','S',' ')}, /* Central Pashto -> Pashto */ {"pt", HB_TAG('P','T','G',' ')}, /* Portuguese */ - {"pwo", HB_TAG('P','W','O',' ')}, /* Pwo Western Karen -> Western Pwo Karen */ +/*{"pwo", HB_TAG('P','W','O',' ')},*/ /* Pwo Western Karen -> Western Pwo Karen */ {"qu", HB_TAG('Q','U','Z',' ')}, /* Quechua [macrolanguage] */ {"qub", HB_TAG('Q','W','H',' ')}, /* Huallaga Huánuco Quechua -> Quechua (Peru) */ - {"quc", HB_TAG('Q','U','C',' ')}, /* K’iche’ */ +/*{"quc", HB_TAG('Q','U','C',' ')},*/ /* K’iche’ */ {"qud", HB_TAG('Q','V','I',' ')}, /* Calderón Highland Quichua -> Quechua (Ecuador) */ {"quf", HB_TAG('Q','U','Z',' ')}, /* Lambayeque Quechua -> Quechua */ {"qug", HB_TAG('Q','V','I',' ')}, /* Chimborazo Highland Quichua -> Quechua (Ecuador) */ - {"quh", HB_TAG('Q','U','H',' ')}, /* South Bolivian Quechua -> Quechua (Bolivia) */ +/*{"quh", HB_TAG('Q','U','H',' ')},*/ /* South Bolivian Quechua -> Quechua (Bolivia) */ {"quk", HB_TAG('Q','U','Z',' ')}, /* Chachapoyas Quechua -> Quechua */ {"qul", HB_TAG('Q','U','Z',' ')}, /* North Bolivian Quechua -> Quechua */ {"qup", HB_TAG('Q','V','I',' ')}, /* Southern Pastaza Quechua -> Quechua (Ecuador) */ @@ -765,12 +765,12 @@ static const LangTag ot_languages[] = { {"quw", HB_TAG('Q','V','I',' ')}, /* Tena Lowland Quichua -> Quechua (Ecuador) */ {"qux", HB_TAG('Q','W','H',' ')}, /* Yauyos Quechua -> Quechua (Peru) */ {"quy", HB_TAG('Q','U','Z',' ')}, /* Ayacucho Quechua -> Quechua */ - {"quz", HB_TAG('Q','U','Z',' ')}, /* Cusco Quechua -> Quechua */ +/*{"quz", HB_TAG('Q','U','Z',' ')},*/ /* Cusco Quechua -> Quechua */ {"qva", HB_TAG('Q','W','H',' ')}, /* Ambo-Pasco Quechua -> Quechua (Peru) */ {"qvc", HB_TAG('Q','U','Z',' ')}, /* Cajamarca Quechua -> Quechua */ {"qve", HB_TAG('Q','U','Z',' ')}, /* Eastern Apurímac Quechua -> Quechua */ {"qvh", HB_TAG('Q','W','H',' ')}, /* Huamalíes-Dos de Mayo Huánuco Quechua -> Quechua (Peru) */ - {"qvi", HB_TAG('Q','V','I',' ')}, /* Imbabura Highland Quichua -> Quechua (Ecuador) */ +/*{"qvi", HB_TAG('Q','V','I',' ')},*/ /* Imbabura Highland Quichua -> Quechua (Ecuador) */ {"qvj", HB_TAG('Q','V','I',' ')}, /* Loja Highland Quichua -> Quechua (Ecuador) */ {"qvl", HB_TAG('Q','W','H',' ')}, /* Cajatambo North Lima Quechua -> Quechua (Peru) */ {"qvm", HB_TAG('Q','W','H',' ')}, /* Margos-Yarowilca-Lauricocha Quechua -> Quechua (Peru) */ @@ -782,7 +782,7 @@ static const LangTag ot_languages[] = { {"qvz", HB_TAG('Q','V','I',' ')}, /* Northern Pastaza Quichua -> Quechua (Ecuador) */ {"qwa", HB_TAG('Q','W','H',' ')}, /* Corongo Ancash Quechua -> Quechua (Peru) */ {"qwc", HB_TAG('Q','U','Z',' ')}, /* Classical Quechua -> Quechua */ - {"qwh", HB_TAG('Q','W','H',' ')}, /* Huaylas Ancash Quechua -> Quechua (Peru) */ +/*{"qwh", HB_TAG('Q','W','H',' ')},*/ /* Huaylas Ancash Quechua -> Quechua (Peru) */ {"qws", HB_TAG('Q','W','H',' ')}, /* Sihuas Ancash Quechua -> Quechua (Peru) */ {"qxa", HB_TAG('Q','W','H',' ')}, /* Chiquián Ancash Quechua -> Quechua (Peru) */ {"qxc", HB_TAG('Q','W','H',' ')}, /* Chincha Quechua -> Quechua (Peru) */ @@ -796,16 +796,16 @@ static const LangTag ot_languages[] = { {"qxu", HB_TAG('Q','U','Z',' ')}, /* Arequipa-La Unión Quechua -> Quechua */ {"qxw", HB_TAG('Q','W','H',' ')}, /* Jauja Wanca Quechua -> Quechua (Peru) */ {"rag", HB_TAG('L','U','H',' ')}, /* Logooli -> Luyia */ - {"raj", HB_TAG('R','A','J',' ')}, /* Rajasthani [macrolanguage] */ - {"rar", HB_TAG('R','A','R',' ')}, /* Rarotongan */ +/*{"raj", HB_TAG('R','A','J',' ')},*/ /* Rajasthani [macrolanguage] */ +/*{"rar", HB_TAG('R','A','R',' ')},*/ /* Rarotongan */ {"rbb", HB_TAG('P','L','G',' ')}, /* Rumai Palaung -> Palaung */ {"rbl", HB_TAG('B','I','K',' ')}, /* Miraya Bikol -> Bikol */ - {"rej", HB_TAG('R','E','J',' ')}, /* Rejang */ - {"ria", HB_TAG('R','I','A',' ')}, /* Riang (India) */ - {"rif", HB_TAG('R','I','F',' ')}, /* Tarifit */ - {"rit", HB_TAG('R','I','T',' ')}, /* Ritarungo */ +/*{"rej", HB_TAG('R','E','J',' ')},*/ /* Rejang */ +/*{"ria", HB_TAG('R','I','A',' ')},*/ /* Riang (India) */ +/*{"rif", HB_TAG('R','I','F',' ')},*/ /* Tarifit */ +/*{"rit", HB_TAG('R','I','T',' ')},*/ /* Ritarungo */ {"rki", HB_TAG('A','R','K',' ')}, /* Rakhine */ - {"rkw", HB_TAG('R','K','W',' ')}, /* Arakwal */ +/*{"rkw", HB_TAG('R','K','W',' ')},*/ /* Arakwal */ {"rm", HB_TAG('R','M','S',' ')}, /* Romansh */ {"rmc", HB_TAG('R','O','Y',' ')}, /* Carpathian Romani -> Romany */ {"rmf", HB_TAG('R','O','Y',' ')}, /* Kalo Finnish Romani -> Romany */ @@ -813,27 +813,27 @@ static const LangTag ot_languages[] = { {"rmn", HB_TAG('R','O','Y',' ')}, /* Balkan Romani -> Romany */ {"rmo", HB_TAG('R','O','Y',' ')}, /* Sinte Romani -> Romany */ {"rmw", HB_TAG('R','O','Y',' ')}, /* Welsh Romani -> Romany */ - {"rmy", HB_TAG('R','M','Y',' ')}, /* Vlax Romani */ +/*{"rmy", HB_TAG('R','M','Y',' ')},*/ /* Vlax Romani */ {"rmz", HB_TAG('A','R','K',' ')}, /* Marma -> Rakhine */ {"rn", HB_TAG('R','U','N',' ')}, /* Rundi */ {"rnl", HB_TAG('H','A','L',' ')}, /* Ranglong -> Halam (Falam Chin) */ {"ro", HB_TAG('R','O','M',' ')}, /* Romanian */ {"rom", HB_TAG('R','O','Y',' ')}, /* Romany [macrolanguage] */ - {"rtm", HB_TAG('R','T','M',' ')}, /* Rotuman */ +/*{"rtm", HB_TAG('R','T','M',' ')},*/ /* Rotuman */ {"ru", HB_TAG('R','U','S',' ')}, /* Russian */ {"rue", HB_TAG('R','S','Y',' ')}, /* Rusyn */ - {"rup", HB_TAG('R','U','P',' ')}, /* Aromanian */ +/*{"rup", HB_TAG('R','U','P',' ')},*/ /* Aromanian */ {"rw", HB_TAG('R','U','A',' ')}, /* Kinyarwanda */ {"rwr", HB_TAG('M','A','W',' ')}, /* Marwari (India) */ {"sa", HB_TAG('S','A','N',' ')}, /* Sanskrit */ {"sah", HB_TAG('Y','A','K',' ')}, /* Yakut -> Sakha */ {"sam", HB_TAG('P','A','A',' ')}, /* Samaritan Aramaic -> Palestinian Aramaic */ - {"sas", HB_TAG('S','A','S',' ')}, /* Sasak */ - {"sat", HB_TAG('S','A','T',' ')}, /* Santali */ +/*{"sas", HB_TAG('S','A','S',' ')},*/ /* Sasak */ +/*{"sat", HB_TAG('S','A','T',' ')},*/ /* Santali */ {"sc", HB_TAG('S','R','D',' ')}, /* Sardinian [macrolanguage] */ {"sck", HB_TAG('S','A','D',' ')}, /* Sadri */ - {"scn", HB_TAG('S','C','N',' ')}, /* Sicilian */ - {"sco", HB_TAG('S','C','O',' ')}, /* Scots */ +/*{"scn", HB_TAG('S','C','N',' ')},*/ /* Sicilian */ +/*{"sco", HB_TAG('S','C','O',' ')},*/ /* Scots */ {"scs", HB_TAG('S','C','S',' ')}, /* North Slavey */ {"scs", HB_TAG('S','L','A',' ')}, /* North Slavey -> Slavey */ {"scs", HB_TAG('A','T','H',' ')}, /* North Slavey -> Athapaskan */ @@ -844,20 +844,20 @@ static const LangTag ot_languages[] = { {"se", HB_TAG('N','S','M',' ')}, /* Northern Sami */ {"seh", HB_TAG('S','N','A',' ')}, /* Sena */ {"sek", HB_TAG('A','T','H',' ')}, /* Sekani -> Athapaskan */ - {"sel", HB_TAG('S','E','L',' ')}, /* Selkup */ +/*{"sel", HB_TAG('S','E','L',' ')},*/ /* Selkup */ {"sez", HB_TAG('Q','I','N',' ')}, /* Senthang Chin -> Chin */ {"sfm", HB_TAG('H','M','N',' ')}, /* Small Flowery Miao -> Hmong */ {"sg", HB_TAG('S','G','O',' ')}, /* Sango */ - {"sga", HB_TAG('S','G','A',' ')}, /* Old Irish (to 900) */ +/*{"sga", HB_TAG('S','G','A',' ')},*/ /* Old Irish (to 900) */ {"sgc", HB_TAG('K','A','L',' ')}, /* Kipsigis -> Kalenjin */ - {"sgs", HB_TAG('S','G','S',' ')}, /* Samogitian */ +/*{"sgs", HB_TAG('S','G','S',' ')},*/ /* Samogitian */ {"sgw", HB_TAG('C','H','G',' ')}, /* Sebat Bet Gurage -> Chaha Gurage */ {"sgw", HB_TAG('S','G','W',' ')}, /* Sebat Bet Gurage -> Chaha Gurage (SIL fonts) */ - {"shi", HB_TAG('S','H','I',' ')}, /* Tachelhit */ - {"shn", HB_TAG('S','H','N',' ')}, /* Shan */ +/*{"shi", HB_TAG('S','H','I',' ')},*/ /* Tachelhit */ +/*{"shn", HB_TAG('S','H','N',' ')},*/ /* Shan */ {"shu", HB_TAG('A','R','A',' ')}, /* Chadian Arabic -> Arabic */ {"si", HB_TAG('S','N','H',' ')}, /* Sinhala (Sinhalese) */ - {"sid", HB_TAG('S','I','D',' ')}, /* Sidamo */ +/*{"sid", HB_TAG('S','I','D',' ')},*/ /* Sidamo */ {"sjd", HB_TAG('K','S','M',' ')}, /* Kildin Sami */ {"sjo", HB_TAG('S','I','B',' ')}, /* Xibe -> Sibe */ {"sk", HB_TAG('S','K','Y',' ')}, /* Slovak */ @@ -870,40 +870,40 @@ static const LangTag ot_languages[] = { {"smn", HB_TAG('I','S','M',' ')}, /* Inari Sami */ {"sms", HB_TAG('S','K','S',' ')}, /* Skolt Sami */ {"sn", HB_TAG('S','N','A','0')}, /* Shona */ - {"snk", HB_TAG('S','N','K',' ')}, /* Soninke */ +/*{"snk", HB_TAG('S','N','K',' ')},*/ /* Soninke */ {"so", HB_TAG('S','M','L',' ')}, /* Somali */ - {"sop", HB_TAG('S','O','P',' ')}, /* Songe */ +/*{"sop", HB_TAG('S','O','P',' ')},*/ /* Songe */ {"spv", HB_TAG('O','R','I',' ')}, /* Sambalpuri -> Odia (formerly Oriya) */ {"spy", HB_TAG('K','A','L',' ')}, /* Sabaot -> Kalenjin */ {"sq", HB_TAG('S','Q','I',' ')}, /* Albanian [macrolanguage] */ {"sr", HB_TAG('S','R','B',' ')}, /* Serbian */ {"src", HB_TAG('S','R','D',' ')}, /* Logudorese Sardinian -> Sardinian */ {"sro", HB_TAG('S','R','D',' ')}, /* Campidanese Sardinian -> Sardinian */ - {"srr", HB_TAG('S','R','R',' ')}, /* Serer */ +/*{"srr", HB_TAG('S','R','R',' ')},*/ /* Serer */ {"srs", HB_TAG('A','T','H',' ')}, /* Sarsi -> Athapaskan */ {"ss", HB_TAG('S','W','Z',' ')}, /* Swati */ {"ssh", HB_TAG('A','R','A',' ')}, /* Shihhi Arabic -> Arabic */ {"st", HB_TAG('S','O','T',' ')}, /* Southern Sotho -> Sotho, Southern */ - {"stq", HB_TAG('S','T','Q',' ')}, /* Saterfriesisch -> Saterland Frisian */ +/*{"stq", HB_TAG('S','T','Q',' ')},*/ /* Saterfriesisch -> Saterland Frisian */ {"stv", HB_TAG('S','I','G',' ')}, /* Silt'e -> Silte Gurage */ {"su", HB_TAG('S','U','N',' ')}, /* Sundanese */ - {"suk", HB_TAG('S','U','K',' ')}, /* Sukuma */ +/*{"suk", HB_TAG('S','U','K',' ')},*/ /* Sukuma */ {"suq", HB_TAG('S','U','R',' ')}, /* Suri */ {"sv", HB_TAG('S','V','E',' ')}, /* Swedish */ - {"sva", HB_TAG('S','V','A',' ')}, /* Svan */ +/*{"sva", HB_TAG('S','V','A',' ')},*/ /* Svan */ {"sw", HB_TAG('S','W','K',' ')}, /* Swahili [macrolanguage] */ {"swb", HB_TAG('C','M','R',' ')}, /* Maore Comorian -> Comorian */ {"swc", HB_TAG('S','W','K',' ')}, /* Congo Swahili -> Swahili */ {"swh", HB_TAG('S','W','K',' ')}, /* Swahili */ {"swv", HB_TAG('M','A','W',' ')}, /* Shekhawati -> Marwari */ - {"sxu", HB_TAG('S','X','U',' ')}, /* Upper Saxon */ +/*{"sxu", HB_TAG('S','X','U',' ')},*/ /* Upper Saxon */ {"syc", HB_TAG('S','Y','R',' ')}, /* Classical Syriac -> Syriac */ - {"syl", HB_TAG('S','Y','L',' ')}, /* Sylheti */ - {"syr", HB_TAG('S','Y','R',' ')}, /* Syriac [macrolanguage] */ - {"szl", HB_TAG('S','Z','L',' ')}, /* Silesian */ +/*{"syl", HB_TAG('S','Y','L',' ')},*/ /* Sylheti */ +/*{"syr", HB_TAG('S','Y','R',' ')},*/ /* Syriac [macrolanguage] */ +/*{"szl", HB_TAG('S','Z','L',' ')},*/ /* Silesian */ {"ta", HB_TAG('T','A','M',' ')}, /* Tamil */ {"taa", HB_TAG('A','T','H',' ')}, /* Lower Tanana -> Athapaskan */ - {"tab", HB_TAG('T','A','B',' ')}, /* Tabassaran -> Tabasaran */ +/*{"tab", HB_TAG('T','A','B',' ')},*/ /* Tabassaran -> Tabasaran */ {"taq", HB_TAG('T','M','H',' ')}, /* Tamasheq -> Tamashek */ {"tau", HB_TAG('A','T','H',' ')}, /* Upper Tanana -> Athapaskan */ {"tcb", HB_TAG('A','T','H',' ')}, /* Tanacross -> Athapaskan */ @@ -911,12 +911,12 @@ static const LangTag ot_languages[] = { {"tcp", HB_TAG('Q','I','N',' ')}, /* Tawr Chin -> Chin */ {"tcy", HB_TAG('T','U','L',' ')}, /* Tulu -> Tumbuka */ {"tcz", HB_TAG('Q','I','N',' ')}, /* Thado Chin -> Chin */ - {"tdd", HB_TAG('T','D','D',' ')}, /* Tai Nüa -> Dehong Dai */ +/*{"tdd", HB_TAG('T','D','D',' ')},*/ /* Tai Nüa -> Dehong Dai */ {"tdx", HB_TAG('M','L','G',' ')}, /* Tandroy-Mahafaly Malagasy -> Malagasy */ {"te", HB_TAG('T','E','L',' ')}, /* Telugu */ {"tec", HB_TAG('K','A','L',' ')}, /* Terik -> Kalenjin */ {"tem", HB_TAG('T','M','N',' ')}, /* Timne -> Temne */ - {"tet", HB_TAG('T','E','T',' ')}, /* Tetum */ +/*{"tet", HB_TAG('T','E','T',' ')},*/ /* Tetum */ {"tfn", HB_TAG('A','T','H',' ')}, /* Tanaina -> Athapaskan */ {"tg", HB_TAG('T','A','J',' ')}, /* Tajik -> Tajiki */ {"tgj", HB_TAG('N','I','S',' ')}, /* Tagin -> Nisi */ @@ -927,11 +927,11 @@ static const LangTag ot_languages[] = { {"thz", HB_TAG('T','M','H',' ')}, /* Tayart Tamajeq -> Tamashek */ {"ti", HB_TAG('T','G','Y',' ')}, /* Tigrinya */ {"tig", HB_TAG('T','G','R',' ')}, /* Tigre */ - {"tiv", HB_TAG('T','I','V',' ')}, /* Tiv */ +/*{"tiv", HB_TAG('T','I','V',' ')},*/ /* Tiv */ {"tk", HB_TAG('T','K','M',' ')}, /* Turkmen */ {"tkg", HB_TAG('M','L','G',' ')}, /* Tesaka Malagasy -> Malagasy */ {"tl", HB_TAG('T','G','L',' ')}, /* Tagalog */ - {"tmh", HB_TAG('T','M','H',' ')}, /* Tamashek [macrolanguage] */ +/*{"tmh", HB_TAG('T','M','H',' ')},*/ /* Tamashek [macrolanguage] */ {"tmw", HB_TAG('M','L','Y',' ')}, /* Temuan -> Malay */ {"tn", HB_TAG('T','N','A',' ')}, /* Tswana */ {"tnf", HB_TAG('D','R','I',' ')}, /* Tangshewi (retired code) -> Dari */ @@ -939,33 +939,33 @@ static const LangTag ot_languages[] = { {"tod", HB_TAG('T','O','D','0')}, /* Toma */ {"toi", HB_TAG('T','N','G',' ')}, /* Tonga (Zambia) */ {"tol", HB_TAG('A','T','H',' ')}, /* Tolowa -> Athapaskan */ - {"tpi", HB_TAG('T','P','I',' ')}, /* Tok Pisin */ +/*{"tpi", HB_TAG('T','P','I',' ')},*/ /* Tok Pisin */ {"tr", HB_TAG('T','R','K',' ')}, /* Turkish */ {"tru", HB_TAG('T','U','A',' ')}, /* Turoyo -> Turoyo Aramaic */ {"tru", HB_TAG('S','Y','R',' ')}, /* Turoyo -> Syriac */ {"ts", HB_TAG('T','S','G',' ')}, /* Tsonga */ - {"tsj", HB_TAG('T','S','J',' ')}, /* Tshangla */ +/*{"tsj", HB_TAG('T','S','J',' ')},*/ /* Tshangla */ {"tt", HB_TAG('T','A','T',' ')}, /* Tatar */ {"ttm", HB_TAG('A','T','H',' ')}, /* Northern Tutchone -> Athapaskan */ {"ttq", HB_TAG('T','M','H',' ')}, /* Tawallammat Tamajaq -> Tamashek */ - {"tum", HB_TAG('T','U','M',' ')}, /* Tumbuka -> Tulu */ +/*{"tum", HB_TAG('T','U','M',' ')},*/ /* Tumbuka -> Tulu */ {"tuu", HB_TAG('A','T','H',' ')}, /* Tututni -> Athapaskan */ {"tuy", HB_TAG('K','A','L',' ')}, /* Tugen -> Kalenjin */ - {"tvl", HB_TAG('T','V','L',' ')}, /* Tuvalu */ +/*{"tvl", HB_TAG('T','V','L',' ')},*/ /* Tuvalu */ {"tw", HB_TAG('T','W','I',' ')}, /* Twi */ {"tw", HB_TAG('A','K','A',' ')}, /* Twi -> Akan */ {"txc", HB_TAG('A','T','H',' ')}, /* Tsetsaut -> Athapaskan */ {"txy", HB_TAG('M','L','G',' ')}, /* Tanosy Malagasy -> Malagasy */ {"ty", HB_TAG('T','H','T',' ')}, /* Tahitian */ {"tyv", HB_TAG('T','U','V',' ')}, /* Tuvinian -> Tuvin */ - {"tyz", HB_TAG('T','Y','Z',' ')}, /* Tày */ - {"tzm", HB_TAG('T','Z','M',' ')}, /* Central Atlas Tamazight -> Tamazight */ - {"tzo", HB_TAG('T','Z','O',' ')}, /* Tzotzil */ +/*{"tyz", HB_TAG('T','Y','Z',' ')},*/ /* Tày */ +/*{"tzm", HB_TAG('T','Z','M',' ')},*/ /* Central Atlas Tamazight -> Tamazight */ +/*{"tzo", HB_TAG('T','Z','O',' ')},*/ /* Tzotzil */ {"ubl", HB_TAG('B','I','K',' ')}, /* Buhi'non Bikol -> Bikol */ - {"udm", HB_TAG('U','D','M',' ')}, /* Udmurt */ +/*{"udm", HB_TAG('U','D','M',' ')},*/ /* Udmurt */ {"ug", HB_TAG('U','Y','G',' ')}, /* Uyghur */ {"uk", HB_TAG('U','K','R',' ')}, /* Ukrainian */ - {"umb", HB_TAG('U','M','B',' ')}, /* Umbundu */ +/*{"umb", HB_TAG('U','M','B',' ')},*/ /* Umbundu */ {"unr", HB_TAG('M','U','N',' ')}, /* Mundari */ {"ur", HB_TAG('U','R','D',' ')}, /* Urdu */ {"urk", HB_TAG('M','L','Y',' ')}, /* Urak Lawoi' -> Malay */ @@ -973,16 +973,16 @@ static const LangTag ot_languages[] = { {"uzn", HB_TAG('U','Z','B',' ')}, /* Northern Uzbek -> Uzbek */ {"uzs", HB_TAG('U','Z','B',' ')}, /* Southern Uzbek -> Uzbek */ {"ve", HB_TAG('V','E','N',' ')}, /* Venda */ - {"vec", HB_TAG('V','E','C',' ')}, /* Venetian */ +/*{"vec", HB_TAG('V','E','C',' ')},*/ /* Venetian */ {"vi", HB_TAG('V','I','T',' ')}, /* Vietnamese */ {"vkk", HB_TAG('M','L','Y',' ')}, /* Kaur -> Malay */ {"vkt", HB_TAG('M','L','Y',' ')}, /* Tenggarong Kutai Malay -> Malay */ {"vls", HB_TAG('F','L','E',' ')}, /* Vlaams -> Dutch (Flemish) */ {"vmw", HB_TAG('M','A','K',' ')}, /* Makhuwa */ {"vo", HB_TAG('V','O','L',' ')}, /* Volapük */ - {"vro", HB_TAG('V','R','O',' ')}, /* Võro */ +/*{"vro", HB_TAG('V','R','O',' ')},*/ /* Võro */ {"wa", HB_TAG('W','L','N',' ')}, /* Walloon */ - {"war", HB_TAG('W','A','R',' ')}, /* Waray (Philippines) -> Waray-Waray */ +/*{"war", HB_TAG('W','A','R',' ')},*/ /* Waray (Philippines) -> Waray-Waray */ {"wbm", HB_TAG('W','A',' ',' ')}, /* Wa */ {"wbr", HB_TAG('W','A','G',' ')}, /* Wagdi */ {"wlc", HB_TAG('C','M','R',' ')}, /* Mwali Comorian -> Comorian */ @@ -992,27 +992,27 @@ static const LangTag ot_languages[] = { {"wo", HB_TAG('W','L','F',' ')}, /* Wolof */ {"wry", HB_TAG('M','A','W',' ')}, /* Merwari -> Marwari */ {"wsg", HB_TAG('G','O','N',' ')}, /* Adilabad Gondi -> Gondi */ - {"wtm", HB_TAG('W','T','M',' ')}, /* Mewati */ +/*{"wtm", HB_TAG('W','T','M',' ')},*/ /* Mewati */ {"wuu", HB_TAG('Z','H','S',' ')}, /* Wu Chinese -> Chinese Simplified */ {"xal", HB_TAG('K','L','M',' ')}, /* Kalmyk */ {"xal", HB_TAG('T','O','D',' ')}, /* Kalmyk -> Todo */ {"xan", HB_TAG('S','E','K',' ')}, /* Xamtanga -> Sekota */ {"xh", HB_TAG('X','H','S',' ')}, /* Xhosa */ - {"xjb", HB_TAG('X','J','B',' ')}, /* Minjungbal -> Minjangbal */ - {"xkf", HB_TAG('X','K','F',' ')}, /* Khengkha */ +/*{"xjb", HB_TAG('X','J','B',' ')},*/ /* Minjungbal -> Minjangbal */ +/*{"xkf", HB_TAG('X','K','F',' ')},*/ /* Khengkha */ {"xmm", HB_TAG('M','L','Y',' ')}, /* Manado Malay -> Malay */ {"xmv", HB_TAG('M','L','G',' ')}, /* Antankarana Malagasy -> Malagasy */ {"xmw", HB_TAG('M','L','G',' ')}, /* Tsimihety Malagasy -> Malagasy */ {"xnr", HB_TAG('D','G','R',' ')}, /* Kangri -> Dogri */ - {"xog", HB_TAG('X','O','G',' ')}, /* Soga */ - {"xpe", HB_TAG('X','P','E',' ')}, /* Liberia Kpelle -> Kpelle (Liberia) */ +/*{"xog", HB_TAG('X','O','G',' ')},*/ /* Soga */ +/*{"xpe", HB_TAG('X','P','E',' ')},*/ /* Liberia Kpelle -> Kpelle (Liberia) */ {"xsl", HB_TAG('S','S','L',' ')}, /* South Slavey */ {"xsl", HB_TAG('S','L','A',' ')}, /* South Slavey -> Slavey */ {"xsl", HB_TAG('A','T','H',' ')}, /* South Slavey -> Athapaskan */ {"xst", HB_TAG('S','I','G',' ')}, /* Silt'e (retired code) -> Silte Gurage */ {"xwo", HB_TAG('T','O','D',' ')}, /* Written Oirat -> Todo */ - {"yao", HB_TAG('Y','A','O',' ')}, /* Yao */ - {"yap", HB_TAG('Y','A','P',' ')}, /* Yapese */ +/*{"yao", HB_TAG('Y','A','O',' ')},*/ /* Yao */ +/*{"yap", HB_TAG('Y','A','P',' ')},*/ /* Yapese */ {"ybd", HB_TAG('A','R','K',' ')}, /* Yangbye (retired code) -> Rakhine */ {"ydd", HB_TAG('J','I','I',' ')}, /* Eastern Yiddish -> Yiddish */ {"yi", HB_TAG('J','I','I',' ')}, /* Yiddish [macrolanguage] */ @@ -1025,10 +1025,10 @@ static const LangTag ot_languages[] = { {"za", HB_TAG('Z','H','A',' ')}, /* Zhuang [macrolanguage] */ {"zch", HB_TAG('Z','H','A',' ')}, /* Central Hongshuihe Zhuang -> Zhuang */ {"zdj", HB_TAG('C','M','R',' ')}, /* Ngazidja Comorian -> Comorian */ - {"zea", HB_TAG('Z','E','A',' ')}, /* Zeeuws -> Zealandic */ +/*{"zea", HB_TAG('Z','E','A',' ')},*/ /* Zeeuws -> Zealandic */ {"zeh", HB_TAG('Z','H','A',' ')}, /* Eastern Hongshuihe Zhuang -> Zhuang */ {"zgb", HB_TAG('Z','H','A',' ')}, /* Guibei Zhuang -> Zhuang */ - {"zgh", HB_TAG('Z','G','H',' ')}, /* Standard Moroccan Tamazight */ +/*{"zgh", HB_TAG('Z','G','H',' ')},*/ /* Standard Moroccan Tamazight */ {"zgm", HB_TAG('Z','H','A',' ')}, /* Minz Zhuang -> Zhuang */ {"zgn", HB_TAG('Z','H','A',' ')}, /* Guibian Zhuang -> Zhuang */ {"zh", HB_TAG('Z','H','S',' ')}, /* Chinese [macrolanguage] -> Chinese Simplified */ @@ -1049,7 +1049,7 @@ static const LangTag ot_languages[] = { {"zyg", HB_TAG('Z','H','A',' ')}, /* Yang Zhuang -> Zhuang */ {"zyj", HB_TAG('Z','H','A',' ')}, /* Youjiang Zhuang -> Zhuang */ {"zyn", HB_TAG('Z','H','A',' ')}, /* Yongnan Zhuang -> Zhuang */ - {"zza", HB_TAG('Z','Z','A',' ')}, /* Zazaki [macrolanguage] */ +/*{"zza", HB_TAG('Z','Z','A',' ')},*/ /* Zazaki [macrolanguage] */ {"zzj", HB_TAG('Z','H','A',' ')}, /* Zuojiang Zhuang -> Zhuang */ }; @@ -1932,7 +1932,8 @@ hb_ot_tags_from_complex_language (const char *lang_str, * * Converts @tag to a BCP 47 language tag if it is ambiguous (it corresponds to * many language tags) and the best tag is not the alphabetically first, or if - * the best tag consists of multiple subtags. + * the best tag consists of multiple subtags, or if the best tag does not appear + * in #ot_languages. * * Return value: The #hb_language_t corresponding to the BCP 47 language tag, * or #HB_LANGUAGE_INVALID if @tag is not ambiguous. @@ -1942,6 +1943,8 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag) { switch (tag) { + case HB_TAG('A','L','T',' '): /* Altai */ + return hb_language_from_string ("alt", -1); /* Southern Altai */ case HB_TAG('A','P','P','H'): /* Phonetic transcription—Americanist conventions */ return hb_language_from_string ("und-fonnapa", -1); /* Undetermined; North American Phonetic Alphabet */ case HB_TAG('A','R','A',' '): /* Arabic */ @@ -1960,8 +1963,6 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag) return hb_language_from_string ("din", -1); /* Dinka */ case HB_TAG('D','R','I',' '): /* Dari */ return hb_language_from_string ("prs", -1); /* Dari */ - case HB_TAG('D','U','J',' '): /* Dhuwal */ - return hb_language_from_string ("dwu", -1); /* Dhuwal */ case HB_TAG('D','Z','N',' '): /* Dzongkha */ return hb_language_from_string ("dz", -1); /* Dzongkha */ case HB_TAG('E','T','I',' '): /* Estonian */ @@ -1970,6 +1971,8 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag) return hb_language_from_string ("gon", -1); /* Gondi */ case HB_TAG('H','M','N',' '): /* Hmong */ return hb_language_from_string ("hmn", -1); /* Hmong */ + case HB_TAG('H','N','D',' '): /* Hindko */ + return hb_language_from_string ("hnd", -1); /* Southern Hindko */ case HB_TAG('I','J','O',' '): /* Ijo */ return hb_language_from_string ("ijo", -1); /* Ijo */ case HB_TAG('I','N','U',' '): /* Inuktitut */ diff --git a/src/hb-ot-tag.cc b/src/hb-ot-tag.cc index c8a57c472..c57c688d4 100644 --- a/src/hb-ot-tag.cc +++ b/src/hb-ot-tag.cc @@ -426,17 +426,30 @@ hb_ot_tag_to_language (hb_tag_t tag) if (ot_languages[i].tag == tag) return hb_language_from_string (ot_languages[i].language, -1); - /* Else return a custom language in the form of "x-hbotABCD" */ + /* If it's three letters long, assume it's ISO 639-3 and lower-case and use it + * (if it's not a registered tag, calling hb_ot_tag_from_language on the + * result might not return the same tag as the original tag). + * Else return a custom language in the form of "x-hbotABCD". */ { - unsigned char buf[11] = "x-hbot"; + char buf[11] = "x-hbot"; + char *str = buf; buf[6] = tag >> 24; buf[7] = (tag >> 16) & 0xFF; buf[8] = (tag >> 8) & 0xFF; buf[9] = tag & 0xFF; if (buf[9] == 0x20) + { buf[9] = '\0'; + if (ISALPHA (buf[6]) && ISALPHA (buf[7]) && ISALPHA (buf[8])) + { + buf[6] = TOLOWER (buf[6]); + buf[7] = TOLOWER (buf[7]); + buf[8] = TOLOWER (buf[8]); + str += 6; + } + } buf[10] = '\0'; - return hb_language_from_string ((char *) buf, -1); + return hb_language_from_string (str, -1); } } diff --git a/test/api/test-ot-tag.c b/test/api/test-ot-tag.c index 60231afe9..66c69caf7 100644 --- a/test/api/test-ot-tag.c +++ b/test/api/test-ot-tag.c @@ -281,6 +281,8 @@ test_ot_tag_language (void) g_assert_cmphex (HB_TAG_CHAR4 ("dflt"), ==, HB_OT_TAG_DEFAULT_LANGUAGE); test_language_two_way ("dflt", NULL); + test_language_two_way ("ALT", "alt"); + test_language_two_way ("ARA", "ar"); test_language_two_way ("AZE", "az"); @@ -353,7 +355,8 @@ test_ot_tag_language (void) test_tag_from_language ("ZHS", "zh"); /* Chinese */ test_tag_from_language ("ZHS", "zh-xx"); - test_language_two_way ("ABC", "x-hbotabc"); + test_language_two_way ("ABC", "abc"); + test_language_two_way ("ABCD", "x-hbotabcd"); test_tag_from_language ("ABC", "asdf-asdf-wer-x-hbotabc-zxc"); test_tag_from_language ("ABC", "asdf-asdf-wer-x-hbotabc"); test_tag_from_language ("ABCD", "asdf-asdf-wer-x-hbotabcd"); From c67a0d581fcc50df5563c23060b4fcd9dac4c87c Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 17 Apr 2019 10:20:02 -0400 Subject: [PATCH 12/12] Add HB_RETURN --- src/hb-algs.hh | 13 ++++++------- src/hb-meta.hh | 34 ++++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/hb-algs.hh b/src/hb-algs.hh index 232467e49..93677435b 100644 --- a/src/hb-algs.hh +++ b/src/hb-algs.hh @@ -50,7 +50,7 @@ struct { private: template auto - impl (const T& v, hb_priority<1>) const HB_AUTO_RETURN (hb_deref_pointer (v).hash ()) + impl (const T& v, hb_priority<1>) const HB_RETURN (uint32_t, hb_deref_pointer (v).hash ()) template auto @@ -63,7 +63,7 @@ struct public: template auto - operator () (const T& v) const HB_AUTO_RETURN ((uint32_t) impl (v, hb_prioritize)) + operator () (const T& v) const HB_RETURN (uint32_t, impl (v, hb_prioritize)) } HB_FUNCOBJ (hb_hash); struct @@ -114,11 +114,10 @@ struct public: template auto - operator () (Pred&& p, Val &&v) const HB_AUTO_RETURN - ( - (bool) impl (hb_forward (p), - hb_forward (v), - hb_prioritize) + operator () (Pred&& p, Val &&v) const HB_RETURN (bool, + impl (hb_forward (p), + hb_forward (v), + hb_prioritize) ) } HB_FUNCOBJ (hb_has); diff --git a/src/hb-meta.hh b/src/hb-meta.hh index 4a141ce92..0dcf79320 100644 --- a/src/hb-meta.hh +++ b/src/hb-meta.hh @@ -34,8 +34,27 @@ * C++ template meta-programming & fundamentals used with them. */ +/* Void! For when we need a expression-type of void. */ +struct hb_void_t { typedef void value; }; + +/* Void meta-function ala std::void_t + * https://en.cppreference.com/w/cpp/types/void_t */ +template struct _hb_void_tt { typedef void type; }; +template using hb_void_tt = typename _hb_void_tt::type; + +template struct _hb_head_tt { typedef Head type; }; +template using hb_head_tt = typename _hb_head_tt::type; + +/* Bool! For when we need to evaluate type-dependent expressions + * in a template argument. */ +template struct hb_bool_tt { enum { value = b }; }; +typedef hb_bool_tt hb_true_t; +typedef hb_bool_tt hb_false_t; + + /* Function overloading SFINAE and priority. */ +#define HB_RETURN(Ret, E) -> hb_head_tt { return (E); } #define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); } #define HB_VOID_RETURN(E) -> hb_void_tt { (E); } @@ -45,6 +64,7 @@ template <> struct hb_priority<0> {}; #define HB_FUNCOBJ(x) static_const x HB_UNUSED + struct { template @@ -98,20 +118,6 @@ struct } HB_FUNCOBJ (hb_deref_pointer); -/* Void! For when we need a expression-type of void. */ -struct hb_void_t { typedef void value; }; - -/* Void meta-function ala std::void_t - * https://en.cppreference.com/w/cpp/types/void_t */ -template struct _hb_void_tt { typedef void type; }; -template using hb_void_tt = typename _hb_void_tt::type; - -/* Bool! For when we need to evaluate type-dependent expressions - * in a template argument. */ -template struct hb_bool_tt { enum { value = b }; }; -typedef hb_bool_tt hb_true_t; -typedef hb_bool_tt hb_false_t; - template struct hb_enable_if {}; template struct hb_enable_if { typedef T type; }; #define hb_enable_if(Cond) typename hb_enable_if<(Cond)>::type* = nullptr