OpenType Test: Localized Forms

THIS IS A DRAFT, DO NOT USE YET

Look at the sea of faces below. If they all look like OT:FRA, the test is passing. If any face looks like OT:ENG, your browser has failed to select the correct letter form for a language. In that case, please hover over that face and report the appearing text as a bug to your browser vendor. For example, cy → WEL means the browser was told to render the text in Welsh, whose IETF BCP47 language tag is cy. For rendering text with localized letter forms, the browser needs to convert this to an OpenType language system tag, which would be WEL for the Welsh language. See here for background.

TODO: Add many, many more test cases.

TODO: Resolve what mapping should be done for these BCP47 codes: ak → AKA,TWI · chp → CHP,SAY · cr → CRE,YCR,DCR,TCR · crm → LCR,MCR · csw → NCR,NHC · den → SLA,SSL · ga → IRI,IRT · hy → HYE,HYE0 · kca → KHK,KHS,KHV · krc → BAL,KAR · man → EMK,MNK,MND · ml → MAL,MLR · mlq → MLN,MNK · scs → SCS,SLA · xal → KLM,TOD · zh → ZHH,ZHP,ZHS,ZHT

TODO: Systematically add BCP47 macrolanguages, collections, deprecated codes, and grandfathered codes. Add test cases for extensions T and U.

TODO: Test cases for Garshuni (Arabic languages written in Syriac)

TODO: Register a BCP47 variant subtag for the North American Phonetic Alphabet (Americanist), so that web browsers can select OpenType localized forms for APPH.

TODO: The OpenType spec gives a language code HAL for Halam, and says it corresponds to ISO 639 code flm. However, ISO 639-3 has retired flm as a language code; it got split into Ranglong [rnl], and Falam Chin (new identifier [cfm]). Suggestion: In the OpenType registry, change ISO column for Halam/HAL to cfm,flm,rnl. However, BCP47 has only cfm and rnl, but not flm.

TODO: The OpenType spec gives a language code SIG for Silte Gurage, and says it corresponds to ISO 639 code xst. However, ISO 639-3 has retired xst as a language code; it got split into Wolane [wle] and Silt'e [stv]. Suggestion: In the OpenType registry, change the ISO column for SIG to wle,stv,xst. However, BCP47 has only wle and stv, but not xst.

A: OT:AFROT:ABKOT:ABAOT:FANOT:ACHOT:DNGOT:ADYOT:AFKOT:AGWOT:SWAOT:AIOOT:ARIOT:FATOT:ALTOT:AMHOT:HBNOT:ARGOT:ANGOT:ARAOT:MAPOT:ASMOT:ASTOT:RCROT:ALTOT:AVROT:AWAOT:AYMOT:AZEOT:AZB
B: OT:BSHOT:BAD0OT:BMLOT:BLIOT:BANOT:BAROT:BBCOT:BAUOT:BCHOT:BDYOT:BELOT:BELOT:BEMOT:BADOT:BLTOT:LAHOT:BAGOT:BGROT:BGCOT:BGQOT:BHIOT:BHIOT:BIKOT:BHOOT:BISOT:BIKOT:BIKOT:EDOOT:BJJOT:BLNOT:BKFOT:BLNOT:BLKOT:BIKOT:BMBOT:BENOT:TIBOT:BPYOT:LRCOT:BREOT:BRIOT:BRHOT:BRXOT:BOSOT:BSKOT:BTIOT:BIKOT:BTSOT:RBUOT:BUGOT:BILOT:BYV
C: OT:CATOT:CRROT:CAKOT:CBKOT:CHEOT:CEBOT:HALOT:CGGOT:CHAOT:CHK0OT:LMAOT:CHOOT:CHROT:CHYOT:CHKOT:COSOT:COPOT:CPPOT:CRTOT:ECROT:WCROT:ECROT:CRROT:CSYOT:CSBOT:CTGOT:BIKOT:CSLOT:CUKOT:CHUOT:WELOT:IPPH
D: OT:DANOT:NISOT:DAROT:DAXOT:DEUOT:DEUOT:DEUOT:IPPHOT:DHGOT:DNKOT:DJROT:DJR0OT:DUNOT:DNJOT:DGOOT:DGROT:LSBOT:DUJOT:DIVOT:JULOT:DZN
E: OT:EWEOT:EFIOT:ELLOT:ELLOT:IPPHOT:ELLOT:PGROT:IPPHOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:ENGOT:IPPHOT:IPPHOT:ENGOT:FNEOT:TNEOT:NTOOT:ESPOT:ESUOT:ETIOT:EUQOT:EVNOT:EVK
F: OT:FAROT:FAN0OT:FULOT:FINOT:PILOT:FJIOT:FMPOT:FOSOT:FONOT:FRAOT:FRCOT:FRPOT:FTAOT:FRLOT:FUVOT:FRI
G: OT:GADOT:GAGOT:GAWOT:GAEOT:GEZOT:GIHOT:GIL0OT:GKPOT:GALOT:NANOT:GLKOT:GUAOT:GNNOT:GOGOT:GONOT:GROOT:SOGOT:ALSOT:ALSOT:ALSOT:GUJOT:GUCOT:GUFOT:GMZOT:GUZOT:MNX
H: OT:HAUOT:HRIOT:HAWOT:HAYOT:HAZOT:IWROT:HINOT:HILOT:HMNOT:HNDOT:CHHOT:HNDOT:HMOOT:HOOT:HAROT:HRVOT:USBOT:HAIOT:HUNOT:HER
I: OT:INAOT:IBAOT:IBBOT:INDOT:ILEOT:IBOOT:EBIOT:YIMOT:IJOOT:IPKOT:ILOOT:LTZOT:NAVOT:INDOT:INGOT:IDOOT:ISLOT:ITAOT:INUOT:IWR
J: OT:JANOT:JANOT:JANOT:JANOT:JANOT:JANOT:JANOT:JANOT:JANOT:JAMOT:JBOOT:JCTOT:JIIOT:JAV
K: OT:KRKOT:KAB0OT:KMBOT:KATOT:KATOT:KGEOT:KATOT:KRNOT:KABOT:KDEOT:KRMOT:KUYOT:KEAOT:KEAOT:KEKOT:KKNOT:KODOT:KACOT:KULOT:KMNOT:KON0OT:KSIOT:XBDOT:KHTOT:KHWOT:KIKOT:KIUOT:KUAOT:KJDOT:KHAOT:KJPOT:KAZOT:GRNOT:KALOT:KHMOT:MBNOT:KMOOT:KMZOT:KANOT:KOROT:KOPOT:KOKOT:KOSOT:KPLOT:XPEOT:KYKOT:KISOT:KRTOT:KNROT:KRIOT:KRLOT:KUUOT:KSHOT:KSH0OT:KISOT:KSWOT:KEBOT:KONOT:KUROT:KUMOT:KOMOT:KOZOT:COROT:COROT:COROT:KMSOT:KUIOT:KIROT:KYU
L: OT:LATOT:JUDOT:PNBOT:LTZOT:LAKOT:LDKOT:LEZOT:LUGOT:LIMOT:LMBOT:LIJOT:LISOT:LJPOT:LKIOT:LADOT:LAMOT:LMOOT:LINOT:LAOOT:LOMOT:LRCOT:LTHOT:LUBOT:LUAOT:LUOOT:MIZOT:LUHOT:LRCOT:LVIOT:LAZ
M: OT:MADOT:MAGOT:MTHOT:MKROT:MAMOT:MNKOT:MBOOT:MOKOT:MDROT:MLEOT:MDEOT:MEROT:MFEOT:MLGOT:MAHOT:ARKOT:MRIOT:MINOT:MKDOT:MNKOT:MKWOT:MNGOT:MCHOT:MNIOT:MANOT:MONOT:MOHOT:MOSOT:MAJOT:MAROT:HMAOT:MLYOT:MNKOT:MTSOT:MAWOT:MUSOT:MAWOT:MNKOT:MWLOT:MAWOT:MAWOT:MWWOT:BRMOT:MENOT:MYNOT:MNKOT:ERZOT:MZN
N: OT:NAUOT:NAGOT:NAHOT:NAPOT:NDBOT:NDCOT:NDSOT:NEPOT:NEWOT:NDGOT:NGAOT:LMWOT:SXTOT:NIUOT:GILOT:NLDOT:NYNOT:NOROT:NTAOT:NOEOT:NOGOT:NOVOT:NKOOT:NDBOT:NASOT:NSOOT:NAVOT:CHIOT:NYMOT:NKLOT:NZA
O: OT:OCIOT:OJBOT:OCROT:KOHOT:OROOT:ORIOT:OSS
P: OT:PANOT:PAGOT:PAMOT:PAP0OT:PAUOT:PCCOT:PCDOT:PLGOT:PDCOT:PHKOT:PALOT:PIHOT:PLKOT:PLGOT:PAPOT:PMSOT:POHOT:PONOT:PROOT:DRIOT:PASOT:PTGOT:PWO
Q: OT:QUZOT:QUCOT:QUHOT:QVIOT:QWH
R: OT:RAJOT:RAROT:PLGOT:REJOT:RIAOT:RIFOT:RITOT:ARKOT:RKWOT:RMSOT:RMSOT:RMSOT:RMSOT:RMSOT:RMSOT:RMSOT:ARKOT:RUNOT:HALOT:ROMOT:MOLOT:RMYOT:ROYOT:RTMOT:RUSOT:RSYOT:RUPOT:RUAOT:MAW
S: OT:SANOT:YAKOT:PAAOT:SASOT:SATOT:SRDOT:SADOT:SCNOT:SCOOT:SCOOT:SNDOT:NSMOT:SNAOT:SELOT:SGOOT:SGAOT:SGSOT:CHGOT:SHIOT:SHNOT:SNHOT:SIDOT:KSMOT:SIBOT:SKYOT:SRKOT:SLVOT:SLVOT:SLVOT:SLVOT:SLVOT:SMOOT:SSMOT:LSMOT:ISMOT:SKSOT:SNA0OT:SNKOT:SMLOT:SOPOT:SQIOT:SRBOT:SRROT:SWZOT:SOTOT:STQOT:SIGOT:SUNOT:SUKOT:SUROT:SVEOT:SVAOT:SWKOT:CMROT:MAWOT:SXUOT:SYLOT:SYROT:SZL
T: OT:TAMOT:TABOT:TULOT:TDDOT:TELOT:TMNOT:TETOT:TAJOT:THAOT:TGYOT:TGROT:TIVOT:TKMOT:TGLOT:TMHOT:TNAOT:TGNOT:TOD0OT:TNGOT:TPIOT:TRKOT:TUAOT:TSGOT:TATOT:TUMOT:TVLOT:THTOT:TUVOT:TYZOT:TZMOT:TZO
U: OT:UDMOT:UYGOT:UKROT:UMBOT:MUNOT:URDOT:UZB
V: OT:VENOT:VECOT:VITOT:FLEOT:MAKOT:VOLOT:VOLOT:VRO
W: OT:WLNOT:WAROT:WAOT:WAGOT:CMROT:SIGOT:CMROT:WLFOT:MAWOT:WTM
X: OT:SEKOT:XHSOT:XJBOT:XOGOT:YAOOT:YAP
Y: OT:JIIOT:JIIOT:JIIOT:YBAOT:ZHA
Z: OT:CMROT:ZEAOT:ZGHOT:ZHSOT:IPPHOT:ZHPOT:ZHTOT:ZHSOT:ZHTOT:ZNDOT:ZULOT:LRCOT:DIQOT:ZZA