We're updating the issue view to help you get more done. 

Add data for language subtag validity

Description

With CLDR data alone, you can't test for unicode_language_id validity. You need to get a copy of the language subtag registry. With a small addition, we can rectify that, and provide a snapshot of the registry that is valid for the particular version of CLDR.

  • We already handle deprecation and alias replacement.

  • We have the set of scripts, in <variable id="$script" type="choice">, but which is meant for internal testing.

  • We have the set of variants, in <variable id="$variant" type="choice">, but which is meant for internal testing.

  • We have the set of regions, in <variable id="$territory" type="choice">, but which is meant for internal testing.

  • What we are missing are the language subtags. We have <variable id="$language" type="choice">, but it is a small subset, and is meant for internal testing.

  • We distinguish certain private use codes, but the data is only in text in LDML, in some tables. They should be in a machine-readable form.

1. The variables are intended for internal use in our validity checks. Those may not be the same as what the valid subtags—and in the case of <variable id="$language" type="choice"> they are definitely not. We should add new structure that is guaranteed to be the right values. We can reuse them in our validity checking where we do want the full set (or not).

1 2 <unicodeSubtags> <unicodeSubtag type="script">Afak Ahom Aghb Arab Armi Armn Avst...

This should be not be in <metadata>, but instead a regular supplemental data file.

2. Language subtags are a large set (currently 8,612 elements, which would be a space-delimited list of 34,258 characters). We could just dump these in a list, but rather than an explicit list, we could do some compaction.
a. Ranges. We can compact sequences, ending up with 12,897 characters.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 <unicodeSubtag type="language" format="ranges"> aa ab ae af ak am an ar as av ay-ba be bg-bi bm-bo br bs ca ce ch co cr cs cu cv cy da de dv dz ee el en eo es-eu fa ff fi fj fo fr fy ga gd gl gn gu gv ha he hi ho hr ht hu hy-ia id ie ig ii ik in io is-iu iw ja ji jv jw ka kg ki-ko kr ks ku-kw ky la lb lg li ln lo lt-lv mg-mi mk ml mn mo mr-mt my na nb nd ne ng nl nn no nr nv ny oc oj om or os pa pi pl ps pt qu rm-ro ru rw sa sc-se sg-si sk-so sq-sw ta te tg-ti tk tl tn to tr-tt tw ty ug uk ur uz ve vi vo wa wo xh yi yo za zh zu aaa-aai aak-aaq aas-aax aaz-abj abl-acb acd-acf ach aci ack-acn acp-adb add-adj adl adn-adu adw-aee aek-aen aeq-aes aeu aew aey-afb afd afe afg-afi afk afn-afp afs-afu afz-ahb ahg-ahi ahk-ahp ahr-aht aia-ait aiw-aiy aja ajg aji ajn ajp ajt aju ajw ajz akb-akm ako-ala alc-amc ame-amg ami-aon aor-aou aox aoz-aqa aqc aqd aqg aql-aqn aqp aqr aqt aqz arb-are arh-arl arn-asl asn-ate atg-auu auw-auz avb avd avi avk-avo avs-avv awa-awe awg-awi awk awm-awo awr-awy axb axe axg axk-axm axx aya-aye ayg-ayi ayk ayl ayn-ayu ayx-azd azg azj azm-azo azt azz-baj bal ban-bap bar-bcw bcy-bek bem beo-bfu bfw-bgg bgi-big bij-bir bit-bkd bkf-blt blv-bng bni-bob boe-bor bot-bpb bpd bpg-bqd bqf-brd brf-bsc bse-bsy bta-buk bum-buq bus-bvr bvt-bwu bww-bxs bxu-bxx bxz-byt byv-cas cau-cbe cbg-cbl cbn cbo cbq-cbw cby cca ccc-cce ccg cch ccj ccl-ccs cda cdc-cdj cdm-cdo cdr cds cdy-ceb ceg cek cel cen cet cfa cfd cfg cfm cga cgc cgg cgk chb-chd chf-chh chj-chr cht chw-cie cih cik cim cin cip cir ciw ciy cja cje cjh cji cjk cjm-cjp cjr cjs cjv cjy cka ckb ckh ckl ckn cko ckq-ckv ckx-cla clc-cle clh-clm clo clt clu clw cly cma cmc cme cmg cmi cmk-cmo cmr-cmt cna-cnc cng-cni cnk cnl cno cns-cnu cnw cnx coa-coh coj-coq cot-cpc cpe-cpg cpi cpn-cpp cps cpu cpx cpy cqd cqu cra-crd crf-crt crv-cso csq-csw csy-cta ctc-cte ctg cth ctl-ctp cts-ctu ctz-cuc cug-cum cuo-cux cvg cvn cwa cwb cwd cwe cwg cwt cya cyb cyo czh czk czn czo czt daa dac-dam dao-das dau-dbb dbd-dbg dbi dbj dbl-dbr dbt-dbw dby dcc dcr dda ddd dde ddg ddi ddj ddn ddo ddr dds ddw dec-dei dek-den dep-des dev dez dga-dge dgg-dgi dgk dgl dgn dgo dgr-dgu dgw dgx dgz dha dhd dhg dhi dhl-dho dhr dhs dhu-dhx dia-did dif-diu diw-djf dji-djo djr dju djw dka dkk dkl dkr dks dkx dlg dlk dlm dln dma-dme dmg dmk-dmo dmr dms dmu-dmy dna dnd dne dng dni-dnk dnn dnr dnt-dnw dny doa-doc doe dof doh doi dok dol don-dot dov-doz dpp dra-dre drg-dri drl drn dro drq-dru drw dry dsb dse dsh dsi dsl dsn dso dsq dta dtb dtd dth dti dtk dtm dto dtp dtr-dtu dty dua-dus duu-dva dwa dwl dwr dws dww dya dyb dyd dyg dyi dym-dyo dyu dyy dza dzd dze dzg dzl dzn eaa ebg ebk ebo ebr ebu ecr ecs ecy eee efa efe efi ega egl ego egx egy ehu eip eit eiv eja eka ekc eke ekg eki ekk-ekm eko ekp ekr eky ele elh eli elk elm elo elp elu elx ema emb eme emg emi emk emm-emp ems emu emw-emy ena-end enf enh enl-eno enq enr enu-enx eot epi era erg-eri erk ero err-ert erw ese esh esi esk-eso esq ess esu esx esy etb etc eth etn eto etr-etu etx etz euq eve evh evn ewo ext eya eyo eza eze faa fab fad faf-fan fap far fat fau fax-faz fbl fcs fer ffi ffm fgr fia fie fil fip fir fit fiu fiw fkk fkv fla flh fli fll fln flr fly fmp fmu fng fni fod foi fom fon for fos fox fpe fqs frc frd frk frm fro-frt fse fsl fss fub-fuf fuh-fuj fum fun fuq fur fut-fuv fuy fvr fwa fwe gaa-gbs gbu-gbz gcc-gcf gcl gcn gcr gct gda-gdo gdq-gdu gdx gea-ged geg-gem geq ges gev-gez gfk gft gfx gga ggb ggd gge ggg ggk ggl ggn ggo ggr ggt ggu ggw gha ghc ghe ghh ghk ghl ghn gho ghr-ght gia-gid gig gih gil-giu giw-giz gji gjk gjm gjn gju gka gke gkn-gkp gku glc gld glh-gll glo glr glu glw gly gma gmb gmd gme gmg gmh gml-gmn gmq gmu-gne gng-gni gnk-gno gnq gnr gnt gnu gnw gnz-gou gow-gpa gpe gpn gqa gqi gqn gqr gqu gra-grd grg-grk grm gro grq-grz gse gsg gsl-gsp gss gsw gta gti gtu gua-gui guk-gux guz gva gvc gve gvf gvj gvl-gvp gvr gvs gvy gwa-gwg gwi gwj gwm gwn gwr gwt gwu gww gwx gxx gya gyb gyd-gyg gyi gyl-gyn gyr gyy gza gzi gzn haa-has hav-hbb hbn hbo hbu hca hch hdn hds hdy hea hed heg-hei hem hgm hgw hhi hhr hhy hia hib hid hif-him hio hir hit hiw hix hji hka hke hkk hks hla hlb hld hle hlt hlu hma-hmn hmp-hna hnd hne hnh-hnj hnn hno hns hnu hoa-hoe hoh-hom hoo hop hor-hot hov how hoy hoz hpo hps hra hrc hre hrk hrm hro hrp hrr hrt hru hrw hrx hrz hsb hsh hsl hsn hss hti hto hts htu htx hub-hum huo-huz hvc hve hvk hvn hvv hwa hwc hwo hya hyx iai ian iap iar iba ibb ibd ibe ibg ibi ibl-ibn ibr ibu iby ica ich icl icr ida-ide idi idr-idu ifa ifb ife iff ifk ifm ifu ify igb ige igg igl-igo igs igw ihb ihi ihp ihw iin iir ijc ije ijj ijn ijo ijs ike iki ikk ikl iko ikp ikr-ikt ikv-ikx ikz-ilb ilg ili ilk ill ilo ils ilu-ilw ima ime imi iml imn imo imr ims imy inb inc ine ing inh inj inl-inp ins int inz ior iou iow ipi ipo iqu iqw ira ire irh iri irk irn iro irr iru irx iry isa isc-ise isg-isi isk ism-iso isr ist isu itb itc ite iti itk-itm ito itr-itt itv-itz ium ivb ivv iwk iwm iwo iws ixc ixl iya iyo iyx izh izi izr izz-jaf jah jaj-jao jaq-jau jax-jaz jbe jbi-jbk jbn jbo jbr jbt jbu jbw jcs jct jda jdg jdt jeb jee jeg-jei jek jel jen jer jet jeu jgb jge jgk jgo jhi jhs jia-jie jig-jii jil jim jio jiq jit-jiv jiy jje jjr jkm jko jkp jkr jku jle jls jma-jmd jmi jml jmn jmr jms jmw jmx jna jnd jng jni jnj jnl jns job jod jor jos jow jpa jpr jpx jqr jra jrb jrr jrt jru jsl jua-jud juh jui juk-jup jur-juu juw juy jvd jvn jwi jya jye jyy kaa-kak kam kao-kar kav-kay kba-kda kdc-kdr kdt-kgy kha-khl khn-kij kil kim kio-kiq kis-kjv kjx-kng kni-koa koc-kol koo-koq kos-krf krh-krp krr-ktz kub-kuq kus-kxf kxh-lan lap-las lau law-lbc lbe-lbg lbi-lbo lbq-lbz lcc-lcf lch lcl lcm lcp lcq lcs lda ldb ldd ldg-ldq lea-lfa lfn lga lgb lgg-lgi lgk-lgn lgq lgr lgt lgu lgz lha lhh lhi lhl-lhn lhp lhs-lhu lia-lil lio-lis liu-lja lje lji ljl ljp ljw ljx lka-lke lkh-lkj lkl-lko lkr-lku lky lla-llq lls llu llx lma-lmr lmu-lnb lnd lng-lnj lnl-lno lns lnu lnw lnz-loc loe-lpa lpe lpn lpo lpx lra lrc lre lrg lri lrk-lro lrr lrt lrv lrz lsa lsd lse lsg-lsi lsl lsm lso lsp lsr-lst lsy ltc ltg lti ltn lto lts ltu lua luc-luf lui-luw luy-lva lvk lvs lvu lwa lwe lwg lwh lwl lwm lwo lwt lwu lww lya lyg lyn lzh lzl lzn lzz-mab mad-mag mai-mak mam man map maq mas-max maz-mbf mbh-mdn mdp-mew mey-mhu mhw-miu miw-mja mjc-mje mjg-mkc mke-mlf mlh-mls mlu-mlx mlz-mmr mmt-moa moc-mok mom moo-mpe mpg-mqc mqe-mrh mrj-mrz msb-mty mua-mue mug-muv mux-mvb mvd-mvi mvk-mxz myb-mze mzg-nat naw-nbk nbm-nby nca-ncp ncr-ncu ncx ncz-ndd ndf-ndn ndp-nek nem-neo neq-nfa nfd nfl nfr nfu nga-nhi nhk nhm-nhr nht-nio niq-njb njd njh-njj njl-njo njr-nju njx-nkk nkm-nkx nkz nla nlc nle nlg nli-nll nln nlo nlq nlr nlu-nnn nnp-noa noc-noq nos-now noy-npb npg-npi npl npn npo nps npu npy nqg nqk nqm-nqo nqq nqy nra-nrc nre-nrg nri nrk-nrn nrp nrr nrt nru nrx nrz nsa nsc-nsi nsk-nsz nte ntg nti-ntk ntm nto ntp ntr nts ntu ntw-nuz nvh nvm nvo nwa-nwc nwe nwg nwi nwm nwo nwr nwx nwy nxa nxd nxe nxg nxi nxk-nxo nxq nxr nxu nxx nyb-nyy nza nzb nzi nzk nzm nzs nzu nzy-oaa oac oar oav obi obk-obm obo obr obt obu oca och oco ocu oda odk odt odu ofo ofs ofu ogb ogc oge ogg ogo ogu oht ohu oia oin ojb ojc ojg ojp ojs ojv ojw oka okb okd oke okg-oko okr oks oku okv okx ola old ole olk olm olo olr olt oma-omc ome omg omi omk oml omn-omr omt-omx ona onb one ong oni-onk onn-onp onr-onu onw onx ood oog oon oor oos opa opk opm opo opt opy ora orc ore org orh orn oro orr-osa osc osi oso osp ost osu osx ota otb otd ote oti otk-oto otq-otu otw-oub oue oui oum oun owi owl oyb oyd oym oyy ozm paa-pai pak-pam pao-paz pbb pbc pbe-pbi pbl pbn-pbp pbr-pbv pby-pcn pcp pcr pcw pda pdc pdi pdn pdo pdt pdu pea peb ped-pem peo-peq pes pev pex-pfa pfe pfl pga pgd pgg pgi pgk pgl pgn pgs pgu pgy pha phd phg-phi phk-pho phq phr pht-phw pia-pij pil-pip pir-piz pjt pka-pkc pkg pkh pkn-pkp pkr-pku pla-plh plj-pll pln-plw ply-pmf pmh-pmo pmq-pmu pmw-pnc pne png-pnz poc-poi pok pom-poq pos pot pov-ppa ppe ppi ppk-ppu pqa pqe pqm pqw pra-pri prk-pru prw-psa psc-pse psg-psi psl-psu psw psy pta pth pti ptn-ptr ptt-ptw pty pua-pug pui-puk pum puo-pur put puu puw-puz pwa pwb pwg pwi pwm-pwo pwr pww pxm pye pym pyn pys pyu pyx pyy pzn qaa-qud quf-qui quk-qun qup-qus quv-qva qvc qve qvh-qvj qvl-qvp qvs qvw qvy-qwa qwc qwe qwh qwm qws qwt qxa qxc qxh qxl qxn-qxu qxw qya qyp raa-rad raf-raz rbb rbk rbl rbp rcf rdb rea reb ree reg rei rej rel-ren rer-ret rey rga rge rgk rgn rgr rgs rgu rhg rhp ria rie rif ril-rin rir rit riu rjg rji rjs rka rkb rkh rki rkm rkt rkw rma-rmi rmk-rna rnd rng rnl rnn rnp rnr rnw roa-rog rol rom roo rop ror rou row rpn rpt rri rro rrt rsb rsi rsl rtc rth rtm rts rtw rub ruc rue-rui ruk ruo-ruq rut ruu ruy ruz rwa rwk rwm rwo rwr rxd rxw ryn rys ryu saa-saf sah-sam sao-scb sce-sci sck scl scn-scq scs scu-scx sda-sdc sde-sdh sdj-sdp sdr-sdv sdx sdz-sew sey sez sfb sfe sfm sfs sfw sga-sge sgg-sgp sgr-sgu sgw-she shg-sib sid-sim sio-sjb sjd sje sjg sjk-sjp sjr-sju sjw ska-skk skm-sla slc-slj sll-sln slp-slu slw-smd smf-smn smp-smz snb snc sne-sns snu-soe sog-sol son-sos sou-soz spb-spe spg spi spk-spv spx spy sqa sqh sqj sqk sqm-sqo sqq-squ sra-src sre-sri srk-sro srq-ssv ssx-stb std-stw sty sua-suc sue sug sui-sum suq-sut suv-svc sve svk svm svr svs svx swb swc swf-swy sxb sxc sxe sxg sxk-sxo sxr sxs sxu sxw sya-syd syi syk-syo syr sys syw-syy sza-sze szg szl szn szp szv szw taa-tag tai-tal tan-tas tau-tci tck-tcq tcs-tcu tcw-tdl tdn tdo tdq-tdv tdx tdy tea-tei tek tem-tey tfi tfn tfo tfr tft tga-tgj tgn-tgz thc-thf thh thi thk-thn thp-tia tic-tiq tis-tja tjg tji tjl-tjo tjs tju tjw tka tkb tkd-tkg tkk-tkn tkp-tkx tkz-tld tlf-tly tma-tmw tmy-tni tnk-tnz tob-toj tol tom too-tos tou-tpa tpc tpe-tpg tpi-tpr tpt-tpz tqb tql-tqr tqt tqu tqw tra-tsm tsp-ttw tty-tuj tul-tuq tus-tva tvd tve tvk-tvo tvs-tvu tvw tvy twa-twh twl-twr twt twu tww-twy txa-txc txe txg-txj txm-txo txq-txu txx txy tya tye tyh-tyj tyl tyn typ tyr-tyv tyx tyz tza tzh tzj tzl-tzo tzx uam uan uar uba ubi ubl ubr ubu uby uda ude udg udi udj udl udm udu ues ufi uga ugb uge ugn ugo ugy uha uhn uis uiv uji uka ukg ukh ukl ukp ukq uks uku ukw uky ula-ulc ule ulf uli ulk-uln ulu ulw uma-umd umg umi umm-ump umr ums umu una und une ung unk unm unn unp unr unu unx unz uok upi upv ura-urc ure-urp urr urt-usa ush usi usk usp usu uta ute utp utr utu uum uun uur uuu uve uvh uvl uwa uya uzn uzs vaa vae-vaj val-vap var vas vau vav vay vbb vbk vec ved vel vem veo vep ver vgr vgt vic vid vif vig vil vin vis vit viv vka vki-vkm vko vkp vkt vku vlp vls vma-vmm vmp-vms vmu-vmz vnk vnm vnp vor vot vra vro vrs vrt vsi vsl vsv vto vum vun vut vwa waa-wbb wbe wbf wbh-wbm wbp-wbr wbt wbv wbw wca wci wdd wdg wdj wdk wdu wdy wea wec wed weg-wei wem-wep wer-weu wew wfg wga wgb wgg wgi wgo wgu wgw wgy wha whg whk whu wib wic wie-win wir wit-wiw wiy wja wji wka wkb wkd wkl wku wkw wky wla wlc wle wlg wli wlk-wlm wlo wlr wls wlu-wly wma-wme wmh wmi wmm-wmo wms wmt wmw wmx wnb-wne wng wni wnk wnm-wnp wnu wnw wny woa-wog woi wok wom-woo wor wos wow woy wpc wra wrb wrd wrg-wri wrk-wrp wrr wrs wru-wsa wsi wsk wsr wss wsu wsv wtf wth wti wtk wtm wtw wua wub wud wuh wul-wun wur wut-wuv wux wuy wwa wwb wwo wwr www wxa wxw wya wyb wyi wym wyr wyy xaa-xae xag xai xaj xal-xaw xay xba-xbe xbg xbi xbj xbm-xbp xbr xbw-xby xcb xcc xce xcg xch xcl-xco xcr xct-xcw xcy xda xdc xdk xdm xdy xeb xed xeg xel xem xep xer-xeu xfa xga xgb xgd xgf xgg xgi xgl-xgn xgr xgu xgw xha xhc-xhe xhr xht-xhv xia xib xii xil xin xip xir xis xiv xiy xjb xjt xka-xkl xkn-xle xlg xli xln-xlp xls xlu xly xma-xmh xmj-xnb xnd xng-xni xnk xnn xno xnr-xnu xny xnz xoc xod xog xoi xok xom-xop xor xow xpa xpc xpe xpg xpi-xpk xpm-xpu xpy xqa xqt xra xrb xrd xre xrg xri xrm xrn xrq xrr xrt xru xrw xsa-xse xsh-xsj xsl-xss xsu xsv xsy xta-xte xtg-xtj xtl-xtw xty-xub xud xug xuj xul-xup xur xut xuu xve xvi xvn xvo xvs xwa xwc-xwe xwg xwj-xwl xwo xwr xwt xww xxb xxk xxm xxr xxt xya xyb xyj-xyl xyt xyy xzh xzm xzp yaa-ybb ybd ybe ybh-ybo ybx yby ych ycl ycn ycp yda ydd yde ydg ydk yds yea yec yee yei yej yel yen yer-yev yey yga ygi ygl ygm ygp ygr ygs ygu ygw yha yhd yhl yia yif-yin yip-yiv yix-yiz yka ykg yki ykk-yko ykr ykt yku yky yla ylb yle ylg yli yll-ylo ylr ylu yly yma-yme ymg-ymi ymk-ymt ymx ymz yna ynd yne yng ynh ynk ynl ynn yno ynq yns ynu yob yog yoi yok-yon yos yot yox yoy ypa ypb ypg yph ypk ypm-ypp ypz yra yrb yre yri yrk-yrn yrs yrw yry ysc ysd ysg ysl ysn-ysp ysr yss ysy yta ytl ytp ytw yty yua-yug yui-yun yup-yur yut yuu yuw-yva yvt ywa ywg ywl ywn ywq ywr ywt ywu yww yxa yxg yxl yxm yxu yxy yyr yyu yyz yzg yzk zaa-zam zao-zaz zbc zbe zbl zbt zbw zca zch zdj zea zeg zeh zen zga zgb zgh zgm zgn zgr zhb zhd zhi zhn zhw zhx zia zib zik-zin zir ziw ziz zka zkb zkd zkg zkh zkk zkn-zkp zkr zkt-zkv zkz zle zlj zlm zln zlq zls zlw zma-zna znd zne zng znk zns zoc zoh zom zoo zoq-zos zpa-zpz zqe zra zrg zrn-zrp zrs zsa zsk-zsm zsr zsu zte ztg ztl-ztn ztp ztq zts-ztu ztx zty zua zuh zum zun zuy zwa zxx zyb zyg zyj zyn zyp zza zzj</unicodeSubtag>

b. Bitpacking. Some time ago we came up with a compact format for testing validity. We have a bitset with:

  • The first 26*26 values are the 2-letter codes

  • The next 26*26*26 values are the 3-letter codes
    We can express this as a hex value, which is more compact, about 4,631 characters (less than half that many bytes in memory). It is also directly usable in APIs for a very fast validity check or iteration, just a bit of arithmetic and a bit lookup.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 <unicodeSubtag type="language" format="bitset"> 33342647C7191009645304008810681C840C09948002434490C659655C040480 11F467D750180EC06D0E6DA1894420614040020300001000C041D1DDF747749B 5340040242040110000400200000004100040240F0DFDFEFFFFEFFBBBDFFEFAF 7FFFC173F5763987FFFFFF0FF73BF0FFFF5C502896FEDFFFF7FFFF7FF7FFFFFF FFFFFF3F9EFEFFFFDF84ABA0E7FBFFFFEFFF7FFFFFFFFFFFBD421F0FDF75FE49 7100F2DDFEF9931C82FFEBFEFFFFFFFFFFFFF7FFFFFFFFD7FFFFFF7FFFF7FFFF FFFFFF7FFEFBFFFFFFFFFEFFFFFFFFFBFFFFFFFFFDFF3FFFBFFFF2FFFFEFFFFF BFFFFF7FFFFFDFFFFFFFFFF7FDFFFFEFFFFFFFFDFFFFBDFFFFEFFFFFFFFFFF7F FFF7DB5FDDFA07F4CF193CC48240120400450400B8FB2FFF492B5464BD498368 BF777E6155D5E7C0711337FFFEF9DF8553860000C1FBFFFBFF7F7F77E37378FC FD0F1008005B000800000030000400201902FDDFF7EFEDEF45002040D69811FC BD27020000F0DDE66D529E3DEFFFDFFFFC4911C06008100D005F7CF6659DE875 DBFE3E0020000000007CA77D259916C062B547FFFFF707000010806004000000 4B711065A1001000000010910400000601000000010040440000014880010040 0000884200000055DD0241564332554FDD2BDE3C000008000400000000407091 13907D951982790A00100024080000400000002010000440040000EBBF9A0320 00000040000000000000020044000000200000000011885A0000000040004260 8A400080100005008010630804000000000430503F00814000000000BE333B01 000810010000000000000000000000F0FFFFFFFFFFFD3C280AFCFF7DF2FC513E 0001225B6C5A54B239F08CFF3D400D0411E010303E49B58D13FF77DF96FFFFDF 478000101022C1F3D5FF50F844040440F0DFFF6F8DBE417F33DA000000B29723 50400800FFFFE70F804110080000000841C9110000000000000104408040EB5F CA000400104140C0060006FFBFFF678E51F0F9ED3600100100000054506B2B88 4200401025FEDFFF5390805000040000000001008000000000102AC0568E4481 08027C0478000000C00C05445278440804020100220085180110CDEE0E35D111 916690B53E8300005200040100000045649964DD751A5874B90F000180000008 00540410200010000408608080BF7E9F439C690100C040100002D22D1A000000 20410400400001DF593941000800002D010400010F29C6242D10A00060440080 200000020C0068008000000000008FFD5E218000001000000000001100000100 00F07F3DDEFFFFFFFFFFFFF7FFEFFFFFFFFFFFFFFFFFFFFFFDBFFFFFBFDDFFFF FFEFFFFFFFFFFFFFFFFFFFFFDFFFFFFDCFFDFFFFFFFFFFFFFFEFBFFFFFFFFFFF FFFFEFFFDFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFBFD7DFFDFDCF8B59C0 F27F00FFFFFF07800030DCB361602E07FFCFF7472402F3B9E7D1FF7F25FFFFF3 2FEF5179FFFF7F04182000000054F5A9989DED105118053DFF7F071050108D85 0500000041200000A200B877DBEFEFFFFFFFFFFFFFFFFEFFFFFFF7FFFFFFFFFF FFFFFF7FFFFFFF7DF7FFFFF7FFFFFFFEDFFBFFBFFFFFFFFFFDD7FF7FFFFF7FFF FFFFBFFFFFFEFFFFFFFFFFF7FDFFFB7EFFFFFFFFFFFFFFFFEFFFFFFFF7FFFFFF FFCFFFDFFFF7FFEFE9FBEFFFFF77FF272048F0FFFFFF7FFDFEFF7FFF2FEE79FE 7FFF6FD5DBFCFFFFFFFFFFFEDFFFDFF7701A45407401DDF56ADADFFF3FD4B5F5 FFFFFF0342017015255856DF24FEFFFF0D54505C002002409706814010041060 0000000000100556401000006010000280112019DB7FB664502970D5BECFD4B9 37482006045021040000403598FF05C1986CF47D3F1103000000000009000000 00A0000110000400FFDDFFDBA7FBFCFF2B44411806FBDFA547200090D4425172 DF1EFFFBFE030020700CEEC1BFFBDFBF7FDF5FFFFFCF5FDF7E44FF07111040FC F77FDF9DFF5560F85E7FD7DB03000030142704000400103094018000F0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE7B 7EE53ED195100C14A27F11000800000000EFFFFF0B300200020080000000533B 0E0100001041620110200031381A00051030188104000000FFFDFF27A10AF187 2D0500080200000000042120900000210411F6C5190300001040250002001000 2014000000F0FBFDFFFFFFFFF3EDF5DCFBFBFAFFFFB7040411DFFFDE7FFFFFBF FFFDFF16BF17FFF7FFF7EF7EFFFEFBBFFDFFFDDFEFF77BF5FF1668F7C17DDFFF FFFFBFEFFFFF75F5F1FE058521E6FFFF59F159F1D067DC172A187FEFF7FFFFFF FFDFDFFDFFDB6FFFF5FF018429F03FFE3F6FEFFFFDFFFD07E551B1C7FBEFFBFF 7FFFFF7FFFF7FFEFBF7D7FDDFFFE02F85BFCFFFFFFFFF9FFFFFFDFFFFBFD67F0 71F58FBFDDF5DC6791ABBE06EA0102002340408244000000446D400000400040 000013600005800000004002400000C18855DDF440F1146F4116ADA400040000 0480000000C0FDBFFE81851044004A0000230124020001000000000010000000 000801F1FB36091000000000000000000CD8020000000000A0000000006C282C 00000010F08D01002001FF9FF70350020000A000000000000000040031009000 0200100000300800000010000000000000000000000000F0FFFFFFECE71A0101 00201940D41CEF0510000043415005114060FFA3574000000B08505575D9F719 C78C573D547F7546110000000000C072BFFD010536805600B188A31B00000003 4042040000311021100000005FFB7F7DCD0B678DA7570105404A981E040000B0 96234507800E03A926090020F0FFFEFF573845FFFEFF2F9779CC542F44D5FD47 0100086CC56CF1B97FD3F7FEDF4BFA1A408411D0E5A484008502030E08014202 F0FFFFFFE61F6080A80064111050B1E21300000001995624200010FEFB3B0000 00417D1A4DE549F4DDFF68365B05423D8C0DD303080000C0440F514CE8060520 02F5F7BB7D00000241285B04614004002021100100FFDFFF5320201108000080 0000C1200000000030082380420830033C42020000B04CAE23844C11FFFFFF67 1110400875C0FFFFFF10000004811310C02101146E6781300001000010000000 00002042A2000408</unicodeSubtag>

3. Private Use subtags are special, and right now we distinguish certain of them. But the data is only in text in LDML. http://unicode.org/reports/tr35/#Private_Use_CLDR. We can clean that up by providing a status value that matches what's in LDML

1 2 3 4 5 6 7 <unicodeSubtag type="script" privateUseStatus="defined">Qaai</unicodeSubtag> <unicodeSubtag type="script" privateUseStatus="reserved"> Qaaa Qaab Qaac Qaad Qaae Qaaf Qaag Qaah Qaaj Qaak Qaal Qaam Qaan Qaao Qaap</unicodeSubtag> <unicodeSubtag type="script" privateUseStatus="excluded">Qaaq Qaar Qaas Qaat Qaau Qaav Qaaw Qaax Qaay Qaaz Qaba Qabb Qabc Qabd Qabe Qabf Qabg Qabh Qabi Qabj Qabk Qabl Qabm Qabn Qabo Qabp Qabq Qabr Qabs Qabt Qabu Qabv Qabw Qabx</unicodeSubtag>

Environment

xpath

None

locale

None

Status

Assignee

Mark Davis

Reporter

Mark Davis

tracReporter

mark

tracOwner

mark

tracResolution

fixed

tracStatus

closed

Reviewer

Peter Edberg

phase

rc

tracCreated

Apr 30, 2015, 1:41 PM

Components

Fix versions

Priority

medium