2009-11-05 01:45:39 +01:00
|
|
|
/*
|
2011-04-21 23:14:28 +02:00
|
|
|
* Copyright © 2009 Red Hat, Inc.
|
2009-11-05 01:45:39 +01:00
|
|
|
*
|
2010-04-22 06:11:43 +02:00
|
|
|
* This is part of HarfBuzz, a text shaping library.
|
2009-11-05 01:45:39 +01:00
|
|
|
*
|
|
|
|
* Permission is hereby granted, without written agreement and without
|
|
|
|
* license or royalty fees, to use, copy, modify, and distribute this
|
|
|
|
* software and its documentation for any purpose, provided that the
|
|
|
|
* above copyright notice and the following two paragraphs appear in
|
|
|
|
* all copies of this software.
|
|
|
|
*
|
|
|
|
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
|
|
|
|
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
|
|
|
|
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
|
|
|
|
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
|
|
* DAMAGE.
|
|
|
|
*
|
|
|
|
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
|
|
|
|
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
|
|
|
|
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
|
|
|
|
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
|
|
|
*
|
|
|
|
* Red Hat Author(s): Behdad Esfahbod
|
|
|
|
*/
|
|
|
|
|
2012-04-12 19:17:44 +02:00
|
|
|
#ifndef HB_OT_H_IN
|
|
|
|
#error "Include <hb-ot.h> instead."
|
|
|
|
#endif
|
|
|
|
|
2009-11-05 01:45:39 +01:00
|
|
|
#ifndef HB_OT_TAG_H
|
|
|
|
#define HB_OT_TAG_H
|
|
|
|
|
2012-04-12 19:17:44 +02:00
|
|
|
#include "hb.h"
|
2009-11-05 01:45:39 +01:00
|
|
|
|
|
|
|
HB_BEGIN_DECLS
|
|
|
|
|
2010-07-23 21:11:18 +02:00
|
|
|
|
2009-11-05 01:45:39 +01:00
|
|
|
#define HB_OT_TAG_DEFAULT_SCRIPT HB_TAG ('D', 'F', 'L', 'T')
|
|
|
|
#define HB_OT_TAG_DEFAULT_LANGUAGE HB_TAG ('d', 'f', 'l', 't')
|
|
|
|
|
2018-10-11 20:16:55 +02:00
|
|
|
/**
|
|
|
|
* HB_OT_MAX_TAGS_PER_SCRIPT:
|
|
|
|
*
|
|
|
|
* Since: REPLACEME
|
|
|
|
**/
|
2018-09-10 19:15:00 +02:00
|
|
|
#define HB_OT_MAX_TAGS_PER_SCRIPT 3u
|
2018-10-11 20:16:55 +02:00
|
|
|
/**
|
|
|
|
* HB_OT_MAX_TAGS_PER_LANGUAGE:
|
|
|
|
*
|
|
|
|
* Since: REPLACEME
|
|
|
|
**/
|
Autogenerate the BCP 47 to OpenType mappings
The new script, gen-tag-table.py, generates `ot_languages` automatically
from the [OpenType language system tag registry][ot] and the [IANA
Language Subtag Registry][bcp47] with some manual modifications. If an
OpenType tag maps to a BCP 47 macrolanguage, all the macrolanguage's
individual languages are mapped to the same OpenType tag, except for
individual languages with their own OpenType mappings. Deprecated
BCP 47 tags are canonicalized.
[ot]: https://docs.microsoft.com/en-us/typography/opentype/spec/languagetags
[bcp47]: https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
Some OpenType tags correspond to multiple ISO 639 codes. The mapping
from ISO 639 codes lists OpenType tags in priority order, such that more
specific or more likely tags appear first.
Some OpenType tags have no corresponding ISO 639 code in the registry so
their mappings use BCP 47 subtags besides the language. For example, any
BCP 47 tag with a fonipa variant subtag is mapped to 'IPPH', and 'IPPH'
is mapped back to und-fonipa.
Other OpenType tags have no corresponding ISO 639 code because it is not
clear what they are for. HarfBuzz just ignores these tags.
One such ignored tag is 'ZHP ' (Chinese Phonetic). It probably means
zh-Latn. However, it is used in Microsoft JhengHei and Microsoft YaHei
with the script tag 'hani', implying that it is not a romanization
scheme after all. It would be simple enough to add this mapping to
gen-tag-table.py once a definitive mapping is determined.
The manual modifications are mainly either obvious mappings that the
OpenType registry omits or mappings for compatibility with previous
versions of HarfBuzz. Some of the old mappings were discarded, though,
for homophonous language names. For example, OpenType maps 'KUI ' to
kxu; previous versions of HarfBuzz also mapped it to kvd, because kvd
and kxu both happen to be called "Kui".
gen-tag-table.py also generates a function to convert multi-subtag tags
like el-polyton and zh-HK to OpenType tags, replacing `ot_languages_zh`
and the hard-coded list of special cases in `hb_ot_tags_from_language`.
It also generates a function to convert OpenType tags to BCP 47,
replacing the hard-coded list of special cases in
`hb_ot_tag_to_language`.
2017-12-09 04:45:52 +01:00
|
|
|
#define HB_OT_MAX_TAGS_PER_LANGUAGE 3u
|
2017-12-08 17:21:14 +01:00
|
|
|
|
|
|
|
HB_EXTERN void
|
2018-07-24 03:19:23 +02:00
|
|
|
hb_ot_tags_from_script_and_language (hb_script_t script,
|
|
|
|
hb_language_t language,
|
|
|
|
unsigned int *script_count /* IN/OUT */,
|
|
|
|
hb_tag_t *script_tags /* OUT */,
|
|
|
|
unsigned int *language_count /* IN/OUT */,
|
|
|
|
hb_tag_t *language_tags /* OUT */);
|
2017-12-08 17:21:14 +01:00
|
|
|
|
2015-11-19 11:34:12 +01:00
|
|
|
HB_EXTERN hb_script_t
|
2010-05-21 12:15:07 +02:00
|
|
|
hb_ot_tag_to_script (hb_tag_t tag);
|
|
|
|
|
2015-11-19 11:34:12 +01:00
|
|
|
HB_EXTERN hb_language_t
|
2009-11-05 01:45:39 +01:00
|
|
|
hb_ot_tag_to_language (hb_tag_t tag);
|
|
|
|
|
2018-07-24 03:19:23 +02:00
|
|
|
HB_EXTERN void
|
|
|
|
hb_ot_tags_to_script_and_language (hb_tag_t script_tag,
|
|
|
|
hb_tag_t language_tag,
|
|
|
|
hb_script_t *script /* OUT */,
|
|
|
|
hb_language_t *language /* OUT */);
|
|
|
|
|
2010-07-23 21:11:18 +02:00
|
|
|
|
2009-11-05 01:45:39 +01:00
|
|
|
HB_END_DECLS
|
|
|
|
|
|
|
|
#endif /* HB_OT_TAG_H */
|