Handle language tags that indicate phonetic IPA transcription
The BCP-47 registry defines a variant subtag "fonipa" that can be used in combination with arbitrary other language tags. For example, "rm-CH-fonipa-sursilv" indicates the Sursilvan dialect of Romansh as used in Switzerland, transcribed used the International Phonetic Alphabet. http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
This commit is contained in:
parent
b8811429b6
commit
f2ad935e19
|
@ -733,7 +733,6 @@ static const LangTag ot_languages[] = {
|
||||||
/*{"fuf?", HB_TAG('F','T','A',' ')},*/ /* Futa */
|
/*{"fuf?", HB_TAG('F','T','A',' ')},*/ /* Futa */
|
||||||
/*{"ar-Syrc?", HB_TAG('G','A','R',' ')},*/ /* Garshuni */
|
/*{"ar-Syrc?", HB_TAG('G','A','R',' ')},*/ /* Garshuni */
|
||||||
/*{"cfm/rnl?", HB_TAG('H','A','L',' ')},*/ /* Halam */
|
/*{"cfm/rnl?", HB_TAG('H','A','L',' ')},*/ /* Halam */
|
||||||
/*{"fonipa", HB_TAG('I','P','P','H')},*/ /* Phonetic transcription—IPA conventions */
|
|
||||||
/*{"ga-Latg?/Latg?", HB_TAG('I','R','T',' ')},*/ /* Irish Traditional */
|
/*{"ga-Latg?/Latg?", HB_TAG('I','R','T',' ')},*/ /* Irish Traditional */
|
||||||
/*{"krc", HB_TAG('K','A','R',' ')},*/ /* Karachay */
|
/*{"krc", HB_TAG('K','A','R',' ')},*/ /* Karachay */
|
||||||
/*{"alw?/ktb?", HB_TAG('K','E','B',' ')},*/ /* Kebena */
|
/*{"alw?/ktb?", HB_TAG('K','E','B',' ')},*/ /* Kebena */
|
||||||
|
@ -832,6 +831,14 @@ hb_ot_tag_from_language (hb_language_t language)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The International Phonetic Alphabet is a variant tag in BCP-47,
|
||||||
|
* which can be applied to any language.
|
||||||
|
*/
|
||||||
|
if (strstr (lang_str, "-fonipa")) {
|
||||||
|
return HB_TAG('I','P','P','H'); /* Phonetic transcription—IPA conventions */
|
||||||
|
}
|
||||||
|
|
||||||
/* Find a language matching in the first component */
|
/* Find a language matching in the first component */
|
||||||
{
|
{
|
||||||
const LangTag *lang_tag;
|
const LangTag *lang_tag;
|
||||||
|
@ -901,6 +908,12 @@ hb_ot_tag_to_language (hb_tag_t tag)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* struct LangTag has only room for 3-letter language tags. */
|
||||||
|
switch (tag) {
|
||||||
|
case HB_TAG('I','P','P','H'): /* Phonetic transcription—IPA conventions */
|
||||||
|
return hb_language_from_string ("und-fonipa", -1);
|
||||||
|
}
|
||||||
|
|
||||||
/* Else return a custom language in the form of "x-hbotABCD" */
|
/* Else return a custom language in the form of "x-hbotABCD" */
|
||||||
{
|
{
|
||||||
unsigned char buf[11] = "x-hbot";
|
unsigned char buf[11] = "x-hbot";
|
||||||
|
|
|
@ -222,6 +222,13 @@ test_ot_tag_language (void)
|
||||||
test_tag_from_language ("XYZ", "xyz"); /* Unknown ISO 639-3 */
|
test_tag_from_language ("XYZ", "xyz"); /* Unknown ISO 639-3 */
|
||||||
test_tag_from_language ("XYZ", "xyz-qw"); /* Unknown ISO 639-3 */
|
test_tag_from_language ("XYZ", "xyz-qw"); /* Unknown ISO 639-3 */
|
||||||
|
|
||||||
|
/* International Phonetic Alphabet */
|
||||||
|
test_tag_from_language ("IPPH", "en-fonipa");
|
||||||
|
test_tag_from_language ("IPPH", "rm-CH-fonipa-sursilv-x-foobar");
|
||||||
|
test_tag_from_language ("IPPH", "und-fonipa");
|
||||||
|
test_tag_from_language ("IPPH", "zh-fonipa");
|
||||||
|
test_tag_to_language ("IPPH", "und-fonipa");
|
||||||
|
|
||||||
/* Test that x-hbot overrides the base language */
|
/* Test that x-hbot overrides the base language */
|
||||||
test_tag_from_language ("ABC", "fa-x-hbotabc-zxc");
|
test_tag_from_language ("ABC", "fa-x-hbotabc-zxc");
|
||||||
test_tag_from_language ("ABC", "fa-ir-x-hbotabc-zxc");
|
test_tag_from_language ("ABC", "fa-ir-x-hbotabc-zxc");
|
||||||
|
|
Loading…
Reference in New Issue