Version bump.
[librarian.git] / librarian / font-optimizer / ext / Font-TTF / lib / Font / TTF / OTTags.pm
1 package Font::TTF::OTTags;
2
3 =head1 NAME
4
5 Font::TTF::OTTags - Utilities for TrueType/OpenType tags
6
7 =head1 SYNOPSIS
8
9   use Font::TTF::OTTags qw( %tttags %ttnames readtagsfile );
10   
11   # Look at built-in stuff:
12   $script_tag = $tttags{'SCRIPT'}{'Cypriot Syllabary'};
13   $lang_name = $ttnames{'LANGUAGE'}{'AFK '}
14   
15   # Read latest tags file to add to built-in definitions
16   readtagsfile ("C:\\Program Files\\Microsoft VOLT\\TAGS.txt");
17   
18 First-level keys to %tttags and %ttnames are:
19
20 =over
21
22 'SCRIPT' -- retrieve script tag or name
23
24 'LANGUAGE' -- retrieve language tag or name
25
26 'FEATURE' -- retrieve feature tag or name
27
28 =back
29
30 Built-in data has been derived from Microsoft's tag registry at
31 L<http://www.microsoft.com/typography/otspec/ttoreg.htm>, 
32 updated to draft v1.5 of the OpenType Spec.
33
34 =head1 METHODS
35
36 =cut
37
38 use strict;
39 use vars qw( %tttags %ttnames @EXPORT_OK @ISA );
40 require Exporter;
41 @ISA = qw( Exporter );
42 @EXPORT_OK = qw( %tttags %ttnames readtagsfile);
43
44
45 %tttags = (
46
47 # All data below derived from VOLT 1.3 TAGS.txt file.
48 # For conveninence of human checking, these are now sorted alphabetically.
49
50 'SCRIPT' => {
51     "Arabic" => "arab",
52     "Armenian" => "armn",
53     "Balinese" => "bali",
54     "Bengali v.2" => "bng2",
55     "Bengali" => "beng",
56     "Bopomofo" => "bopo",
57     "Braille" => "brai",
58     "Buginese" => "bugi",
59     "Buhid" => "buhd",
60     "Byzantine Music" => "byzm",
61     "CJK Ideographic" => "hani",
62     "Canadian Syllabics" => "cans",
63     "Carian" => "cari",
64     "Cham" => "cham",
65     "Cherokee" => "cher",
66     "Coptic" => "copt",
67     "Cypriot Syllabary" => "cprt",
68     "Cyrillic" => "cyrl",
69     "Default" => "DFLT",
70     "Deseret" => "dsrt",
71     "Devanagari v.2" => "dev2",
72     "Devanagari" => "deva",
73     "Ethiopic" => "ethi",
74     "Georgian" => "geor",
75     "Glagolitic" => "glag",
76     "Gothic" => "goth",
77     "Greek" => "grek",
78     "Gujarati v.2" => "gjr2",
79     "Gujarati" => "gujr",
80     "Gurmukhi v.2" => "gur2",
81     "Gurmukhi" => "guru",
82     "Hangul Jamo" => "jamo",
83     "Hangul" => "hang",
84     "Hanunoo" => "hano",
85     "Hebrew" => "hebr",
86     "Hiragana" => "kana",
87     "Javanese" => "java",
88     "Kannada v.2" => "knd2",
89     "Kannada" => "knda",
90     "Katakana" => "kana",
91     "Kayah Li" => "kali",
92     "Kharosthi" => "khar",
93     "Khmer" => "khmr",
94     "Lao" => "lao ",
95     "Latin" => "latn",
96     "Lepcha" => "lepc",
97     "Limbu" => "limb",
98     "Linear B" => "linb",
99     "Lycian" => "lyci",
100     "Lydian" => "lydi",
101     "Malayalam v.2" => "mlm2",
102     "Malayalam" => "mlym",
103     "Mathematical Alphanumeric Symbols" => "math",
104     "Mongolian" => "mong",
105     "Musical Symbols" => "musc",
106     "Myanmar" => "mymr",
107     "N'Ko" => "nko ",
108     "New Tai Lue" => "talu",
109     "Ogham" => "ogam",
110     "Ol Chiki" => "olck",
111     "Old Italic" => "ital",
112     "Old Persian Cuneiform" => "xpeo",
113     "Oriya v.2" => "ory2",
114     "Oriya" => "orya",
115     "Osmanya" => "osma",
116     "Phags-pa" => "phag",
117     "Phoenician" => "phnx",
118     "Rejang" => "rjng",
119     "Runic" => "runr",
120     "Saurashtra" => "saur",
121     "Shavian" => "shaw",
122     "Sinhala" => "sinh",
123     "Sumero-Akkadian Cuneiform" => "xsux",
124     "Sundanese" => "sund",
125     "Syloti Nagri" => "sylo",
126     "Syriac" => "syrc",
127     "Tagalog" => "tglg",
128     "Tagbanwa" => "tagb",
129     "Tai Le" => "tale",
130     "Tamil v.2" => "tml2",
131     "Tamil" => "taml",
132     "Telugu v.2" => "tel2",
133     "Telugu" => "telu",
134     "Thaana" => "thaa",
135     "Thai" => "thai",
136     "Tibetan" => "tibt",
137     "Tifinagh" => "tfng",
138     "Ugaritic Cuneiform" => "ugar",
139     "Vai" => "vai ",
140     "Yi" => "yi  ",
141     }, 
142
143 'LANGUAGE' => {
144     "Aari" => "ARI ",
145     "Abaza" => "ABA ",
146     "Abkhazian" => "ABK ",
147     "Adyghe" => "ADY ",
148     "Afar" => "AFR ",
149     "Afrikaans" => "AFK ",
150     "Agaw" => "AGW ",
151     "Albanian" => "SQI ",
152     "Alsatian" => "ALS ",
153     "Altai" => "ALT ",
154     "Amharic" => "AMH ",
155     "Arabic" => "ARA ",
156     "Arakanese" => "ARK ",
157     "Armenian" => "HYE ",
158     "Assamese" => "ASM ",
159     "Athapaskan" => "ATH ",
160     "Avar" => "AVR ",
161     "Awadhi" => "AWA ",
162     "Aymara" => "AYM ",
163     "Azeri" => "AZE ",
164     "Badaga" => "BAD ",
165     "Baghelkhandi" => "BAG ",
166     "Balante" => "BLN ",
167     "Balkar" => "BAL ",
168     "Balochi" => "BLI ",
169     "Balti" => "BLT ",
170     "Bambara" => "BMB ",
171     "Bamileke" => "BML ",
172     "Bashkir" => "BSH ",
173     "Basque" => "EUQ ",
174     "Baule" => "BAU ",
175     "Belarussian" => "BEL ",
176     "Bemba" => "BEM ",
177     "Bench" => "BCH ",
178     "Bengali" => "BEN ",
179     "Berber" => "BBR ",
180     "Beti" => "BTI ",
181     "Bhili" => "BHI ",
182     "Bhojpuri" => "BHO ",
183     "Bible Cree" => "BCR ",
184     "Bikol" => "BIK ",
185     "Bilen" => "BIL ",
186     "Blackfoot" => "BKF ",
187     "Bosnian" => "BOS ",
188     "Brahui" => "BRH ",
189     "Braj Bhasha" => "BRI ",
190     "Breton" => "BRE ",
191     "Bulgarian" => "BGR ",
192     "Burmese" => "BRM ",
193     "Carrier" => "CRR ",
194     "Catalan" => "CAT ",
195     "Cebuano" => "CEB ",
196     "Chaha Gurage" => "CHG ",
197     "Chattisgarhi" => "CHH ",
198     "Chechen" => "CHE ",
199     "Cherokee" => "CHR ",
200     "Chichewa" => "CHI ",
201     "Chin" => "QIN ",
202     "Chinese Hong Kong" => "ZHH ",
203     "Chinese Phonetic" => "ZHP ",
204     "Chinese Simplified" => "ZHS ",
205     "Chinese Traditional" => "ZHT ",
206     "Chipewyan" => "CHP ",
207     "Chukchi" => "CHK ",
208     "Church Slavonic" => "CSL ",
209     "Chuvash" => "CHU ",
210     "Comorian" => "CMR ",
211     "Coptic" => "COP ",
212     "Corsican" => "COS ",
213     "Cree" => "CRE ",
214     "Crimean Tatar" => "CRT ",
215     "Croatian" => "HRV ",
216     "Czech" => "CSY ",
217     "Dangme" => "DNG ",
218     "Danish" => "DAN ",
219     "Dargwa" => "DAR ",
220     "Dari" => "DRI ",
221     "Default" => "dflt",
222     "Dhivehi (OBSOLETE)" => "DHV ",
223     "Dhivehi" => "DIV ",
224     "Dinka" => "DNK ",
225     "Djerma" => "DJR ",
226     "Dogri" => "DGR ",
227     "Dungan" => "DUN ",
228     "Dutch" => "NLD ",
229     "Dzongkha" => "DZN ",
230     "Eastern Cree" => "ECR ",
231     "Ebira" => "EBI ",
232     "Edo" => "EDO ",
233     "Efik" => "EFI ",
234     "English" => "ENG ",
235     "Erzya" => "ERZ ",
236     "Esperanto" => "NTO ",
237     "Estonian" => "ETI ",
238     "Even" => "EVN ",
239     "Evenki" => "EVK ",
240     "Ewe" => "EWE ",
241     "Faroese" => "FOS ",
242     "Farsi" => "FAR ",
243     "Fijian" => "FJI ",
244     "Filipino" => "PIL ",
245     "Finnish" => "FIN ",
246     "Flemish" => "FLE ",
247     "Fon" => "FON ",
248     "Forest Nenets" => "FNE ",
249     "French Antillean" => "FAN ",
250     "French" => "FRA ",
251     "Frisian" => "FRI ",
252     "Friulian" => "FRL ",
253     "Fulani" => "FUL ",
254     "Futa" => "FTA ",
255     "Ga" => "GAD ",
256     "Gaelic" => "GAE ",
257     "Gagauz" => "GAG ",
258     "Galician" => "GAL ",
259     "Garhwali" => "GAW ",
260     "Garo" => "GRO ",
261     "Garshuni" => "GAR ",
262     "Ge'ez" => "GEZ ",
263     "Georgian" => "KAT ",
264     "German" => "DEU ",
265     "Gilyak" => "GIL ",
266     "Gondi" => "GON ",
267     "Greek" => "ELL ",
268     "Greenlandic" => "GRN ",
269     "Guarani" => "GUA ",
270     "Gujarati" => "GUJ ",
271     "Gumuz" => "GMZ ",
272     "Haitian" => "HAI ",
273     "Halam" => "HAL ",
274     "Hammer-Banna" => "HBN ",
275     "Harari" => "HRI ",
276     "Harauti" => "HAR ",
277     "Hausa" => "HAU ",
278     "Hawaiin" => "HAW ",
279     "Hebrew" => "IWR ",
280     "High Mari" => "HMA ",
281     "Hiligaynon" => "HIL ",
282     "Hindi" => "HIN ",
283     "Hindko" => "HND ",
284     "Ho" => "HO  ",
285     "Hungarian" => "HUN ",
286     "Icelandic" => "ISL ",
287     "Igbo" => "IBO ",
288     "Ijo" => "IJO ",
289     "Ilokano" => "ILO ",
290     "Inari Sami" => "ISM ",
291     "Indonesian" => "IND ",
292     "Ingush" => "ING ",
293     "Inuktitut" => "INU ",
294     "Irish Traditional" => "IRT ",
295     "Irish" => "IRI ",
296     "Italian" => "ITA ",
297     "Japanese" => "JAN ",
298     "Javanese" => "JAV ",
299     "Judezmo" => "JUD ",
300     "Jula" => "JUL ",
301     "Kabardian" => "KAB ",
302     "Kachchi" => "KAC ",
303     "Kalenjin" => "KAL ",
304     "Kalmyk" => "KLM ",
305     "Kamba" => "KMB ",
306     "Kannada" => "KAN ",
307     "Kanuri" => "KNR ",
308     "Karachay" => "KAR ",
309     "Karaim" => "KRM ",
310     "Karakalpak" => "KRK ",
311     "Karelian" => "KRL ",
312     "Karen" => "KRN ",
313     "Kashmiri" => "KSH ",
314     "Kazakh" => "KAZ ",
315     "Kebena" => "KEB ",
316     "Khakass" => "KHA ",
317     "Khanty-Kazim" => "KHK ",
318     "Khanty-Shurishkar" => "KHS ",
319     "Khanty-Vakhi" => "KHV ",
320     "Khasi" => "KSI ",
321     "Khmer" => "KHM ",
322     "Khowar" => "KHW ",
323     "Khutsuri Georgian" => "KGE ",
324     "Kikongo" => "KON ",
325     "Kikuyu" => "KIK ",
326     "Kildin Sami" => "KSM ",
327     "Kirghiz" => "KIR ",
328     "Kisii" => "KIS ",
329     "Kodagu" => "KOD ",
330     "Kokni" => "KKN ",
331     "Komi-Permyak" => "KOP ",
332     "Komi-Zyrian" => "KOZ ",
333     "Komo" => "KMO ",
334     "Komso" => "KMS ",
335     "Konkani" => "KOK ",
336     "Koorete" => "KRT ",
337     "Korean Old Hangul" => "KOH ",
338     "Korean" => "KOR ",
339     "Koryak" => "KYK ",
340     "Kpelle" => "KPL ",
341     "Krio" => "KRI ",
342     "Kui" => "KUI ",
343     "Kulvi" => "KUL ",
344     "Kumaoni" => "KMN ",
345     "Kumyk" => "KUM ",
346     "Kurdish" => "KUR ",
347     "Kurukh" => "KUU ",
348     "Kuy" => "KUY ",
349     "L-Cree" => "LCR ",
350     "Ladakhi" => "LDK ",
351     "Ladin" => "LAD ",
352     "Lahuli" => "LAH ",
353     "Lak" => "LAK ",
354     "Lambani" => "LAM ",
355     "Lao" => "LAO ",
356     "Latin" => "LAT ",
357     "Latvian" => "LVI ",
358     "Laz" => "LAZ ",
359     "Lezgi" => "LEZ ",
360     "Limbu" => "LMB ",
361     "Lingala" => "LIN ",
362     "Lithuanian" => "LTH ",
363     "Lomwe" => "LMW ",
364     "Low Mari" => "LMA ",
365     "Lower Sorbian" => "LSB ",
366     "Luba" => "LUB ",
367     "Luganda" => "LUG ",
368     "Luhya" => "LUH ",
369     "Lule Sami" => "LSM ",
370     "Luo" => "LUO ",
371     "Luxembourgish" => "LTZ ",
372     "Macedonian" => "MKD ",
373     "Maithili" => "MTH ",
374     "Majang" => "MAJ ",
375     "Makua" => "MAK ",
376     "Malagasy" => "MLG ",
377     "Malay" => "MLY ",
378     "Malayalam Reformed" => "MLR ",
379     "Malayalam Traditional" => "MAL ",
380     "Male" => "MLE ",
381     "Malinke" => "MLN ",
382     "Maltese" => "MTS ",
383     "Manchu" => "MCH ",
384     "Mandinka" => "MND ",
385     "Maninka" => "MNK ",
386     "Manipuri" => "MNI ",
387     "Mansi" => "MAN ",
388     "Manx Gaelic" => "MNX ",
389     "Maori" => "MRI ",
390     "Mapudungun" => "MAP ",
391     "Marathi" => "MAR ",
392     "Marwari" => "MAW ",
393     "Mbundu" => "MBN ",
394     "Me'en" => "MEN ",
395     "Mende" => "MDE ",
396     "Mizo" => "MIZ ",
397     "Mohawk" => "MOH ",
398     "Moksha" => "MOK ",
399     "Moldavian" => "MOL ",
400     "Mon" => "MON ",
401     "Mongolian" => "MNG ",
402     "Moose Cree" => "MCR ",
403     "Moroccan" => "MOR ",
404     "Mundari" => "MUN ",
405     "N'Ko" => "NKO ",
406     "N-Cree" => "NCR ",
407     "Naga-Assamese" => "NAG ",
408     "Nagari" => "NGR ",
409     "Nanai" => "NAN ",
410     "Naskapi" => "NAS ",
411     "Ndebele" => "NDB ",
412     "Ndonga" => "NDG ",
413     "Nepali" => "NEP ",
414     "Newari" => "NEW ",
415     "Nisi" => "NIS ",
416     "Niuean" => "NIU ",
417     "Nkole" => "NKL ",
418     "Nogai" => "NOG ",
419     "Northern Sami" => "NSM ",
420     "Northern Tai" => "NTA ",
421     "Norway House Cree" => "NHC ",
422     "Norwegian" => "NOR ",
423     "Nynorsk" => "NYN ",
424     "Occitan" => "OCI ",
425     "Oji-Cree" => "OCR ",
426     "Ojibway" => "OJB ",
427     "Oriya" => "ORI ",
428     "Oromo" => "ORO ",
429     "Ossetian" => "OSS ",
430     "Palaung" => "PLG ",
431     "Palestinian Aramaic" => "PAA ",
432     "Pali" => "PAL ",
433     "Palpa" => "PAP ",
434     "Pashto" => "PAS ",
435     "Polish" => "PLK ",
436     "Polytonic Greek" => "PGR ",
437     "Portuguese" => "PTG ",
438     "Provencal" => "PRO ",
439     "Punjabi" => "PAN ",
440     "R-Cree" => "RCR ",
441     "Rajasthani" => "RAJ ",
442     "Rhaeto-Romanic" => "RMS ",
443     "Riang" => "RIA ",
444     "Romanian" => "ROM ",
445     "Romany" => "ROY ",
446     "Ruanda" => "RUA ",
447     "Russian Buriat" => "RBU ",
448     "Russian" => "RUS ",
449     "Rusyn" => "RSY ",
450     "Sadri" => "SAD ",
451     "Samoan" => "SMO ",
452     "Sango" => "SGO ",
453     "Sanskrit" => "SAN ",
454     "Santali" => "SAT ",
455     "Saraiki" => "SRK ",
456     "Sayisi" => "SAY ",
457     "Sekota" => "SEK ",
458     "Selkup" => "SEL ",
459     "Sena" => "SNA ",
460     "Serbian" => "SRB ",
461     "Serer" => "SRR ",
462     "Shan" => "SHN ",
463     "Sibe" => "SIB ",
464     "Sidamo" => "SID ",
465     "Silte Gurage" => "SIG ",
466     "Sindhi" => "SND ",
467     "Sinhalese" => "SNH ",
468     "Skolt Sami" => "SKS ",
469     "Slavey" => "SLA ",
470     "Slovak" => "SKY ",
471     "Slovenian" => "SLV ",
472     "Sodo Gurage" => "SOG ",
473     "Somali" => "SML ",
474     "Soninke" => "SNK ",
475     "Sotho" => "SOT ",
476     "South Slavey" => "SSL ",
477     "Southern Sami" => "SSM ",
478     "Spanish" => "ESP ",
479     "Suri" => "SUR ",
480     "Sutu" => "SXT ",
481     "Svan" => "SVA ",
482     "Swadaya Aramaic" => "SWA ",
483     "Swahili" => "SWK ",
484     "Swazi" => "SWZ ",
485     "Swedish" => "SVE ",
486     "Syriac" => "SYR ",
487     "TH-Cree" => "TCR ",
488     "Tabasaran" => "TAB ",
489     "Tahitian" => "THT ",
490     "Tai Lue" => "XBD ",
491     "Tajiki" => "TAJ ",
492     "Tamil" => "TAM ",
493     "Tatar" => "TAT ",
494     "Telugu" => "TEL ",
495     "Temne" => "TMN ",
496     "Thai" => "THA ",
497     "Tibetan" => "TIB ",
498     "Tigre" => "TGR ",
499     "Tigrinya" => "TGY ",
500     "Todo" => "TOD ",
501     "Tonga" => "TNG ",
502     "Tongan" => "TGN ",
503     "Tsonga" => "TSG ",
504     "Tswana" => "TNA ",
505     "Tulu" => "TUL ",
506     "Tundra Nenets" => "TNE ",
507     "Turkish" => "TRK ",
508     "Turkmen" => "TKM ",
509     "Turoyo Aramaic" => "TUA ",
510     "Tuvin" => "TUV ",
511     "Twi" => "TWI ",
512     "Udmurt" => "UDM ",
513     "Ukrainian" => "UKR ",
514     "Upper Sorbian" => "USB ",
515     "Urdu" => "URD ",
516     "Uyghur" => "UYG ",
517     "Uzbek" => "UZB ",
518     "Venda" => "VEN ",
519     "Vietnamese" => "VIT ",
520     "Wa" => "WA  ",
521     "Wagdi" => "WAG ",
522     "Welsh" => "WEL ",
523     "West-Cree" => "WCR ",
524     "Wolof" => "WLF ",
525     "Woods Cree" => "DCR ",
526     "Xhosa" => "XHS ",
527     "Y-Cree" => "YCR ",
528     "Yakut" => "YAK ",
529     "Yi Classic" => "YIC ",
530     "Yi Modern" => "YIM ",
531     "Yiddish" => "JII ",
532     "Yoruba" => "YBA ",
533     "Zande" => "ZND ",
534     "Zulu" => "ZUL ",
535     },
536
537 'FEATURE' => {
538     "Above-Base Forms" => "abvf",
539     "Above-Base Mark Positioning" => "abvm",
540     "Above-Base Substitutions" => "abvs",
541     "Access All Alternates" => "aalt",
542     "Akhands" => "akhn",
543     "Alternate Annotation Forms" => "nalt",
544     "Alternate Half Widths" => "halt",
545     "Alternate Vertical Half Metrics" => "vhal",
546     "Alternate Vertical Metrics" => "valt",
547     "Alternative Fractions" => "afrc",
548     "Below-Base Forms" => "blwf",
549     "Below-Base Mark Positioning" => "blwm",
550     "Below-Base Substitutions" => "blws",
551     "Capital Spacing" => "cpsp",
552     "Case-Sensitive Forms" => "case",
553     "Centered CJK Punctuation" => "cpct",
554     "Conjunct Forms After Ro" => "cfar",
555     "Conjunct Forms" => "cjct",
556     "Contextual Alternates" => "calt",
557     "Contextual Ligatures" => "clig",
558     "Contextual Swash" => "cswh",
559     "Cursive Positioning" => "curs",
560     "Default Processing" => "dflt",
561     "Denominators" => "dnom",
562     "Diphthongs (OBSOLETE)" => "dpng",
563     "Discretionary Ligatures" => "dlig",
564     "Distances" => "dist",
565     "Expert Forms" => "expt",
566     "Final Glyph On Line Alternates" => "falt",
567     "Fractions" => "frac",
568     "Full Widths" => "fwid",
569     "Glyph Composition/Decomposition" => "ccmp",
570     "Halant Forms" => "haln",
571     "Half Forms" => "half",
572     "Half Widths" => "hwid",
573     "Hangul" => "hngl",
574     "Historical Forms" => "hist",
575     "Historical Ligatures" => "hlig",
576     "Hojo (JIS X 0212-1990) Kanji Forms" => "hojo",
577     "Horizontal Kana Alternates" => "hkna",
578     "Initial Forms" => "init",
579     "Isolated Forms" => "isol",
580     "Italics" => "ital",
581     "JIS2004 Forms" => "jp04",
582     "JIS78 Forms" => "jp78",
583     "JIS83 Forms" => "jp83",
584     "JIS90 Forms" => "jp90",
585     "Justification Alternates" => "jalt",
586     "Kerning" => "kern",
587     "Leading Jamo Forms" => "ljmo",
588     "Left Bounds" => "lfbd",
589     "Lining Figures" => "lnum",
590     "Localized Forms" => "locl",
591     "Mark Positioning via Substitution" => "mset",
592     "Mark Positioning" => "mark",
593     "Mark to Mark Positioning" => "mkmk",
594     "Mathematical Greek" => "mgrk",
595     "Medial Forms #2" => "med2",
596     "Medial Forms" => "medi",
597     "NLC Kanji Forms" => "nlck",
598     "Nukta Forms" => "nukt",
599     "Numerators" => "numr",
600     "Oldstyle Figures" => "onum",
601     "Optical Bounds" => "opbd",
602     "Optical Size" => "size",
603     "Ordinals" => "ordn",
604     "Ornaments" => "ornm",
605     "Petite Capitals From Capitals" => "c2pc",
606     "Petite Capitals" => "pcap",
607     "Post-base Forms" => "pstf",
608     "Post-base Substitutions" => "psts",
609     "Pre-base Forms" => "pref",
610     "Pre-base Substitutions" => "pres",
611     "Proportional Alternate Vertical Metrics" => "vpal",
612     "Proportional Alternate Widths" => "palt",
613     "Proportional Figures" => "pnum",
614     "Proportional Kana" => "pkna",
615     "Proportional Widths" => "pwid",
616     "Quarter Widths" => "qwid",
617     "Rakar Forms" => "rkrf",
618     "Randomize" => "rand",
619     "Reph Forms" => "rphf",
620     "Required Ligatures" => "rlig",
621     "Right Bounds" => "rtbd",
622     "Right-To-Left Alternates" => "rtla",
623     "Ruby Notation Forms" => "ruby",
624     "Scientific Inferiors" => "sinf",
625     "Simplified Forms" => "smpl",
626     "Slashed Zero" => "zero",
627     "Small Capitals From Capitals" => "c2sc",
628     "Small Capitals" => "smcp",
629     "Standard Ligatures" => "liga",
630     "Stylistic Alternates" => "salt",
631     "Stylistic Set 1" => "ss01",
632     "Stylistic Set 10" => "ss10",
633     "Stylistic Set 11" => "ss11",
634     "Stylistic Set 12" => "ss12",
635     "Stylistic Set 13" => "ss13",
636     "Stylistic Set 14" => "ss14",
637     "Stylistic Set 15" => "ss15",
638     "Stylistic Set 16" => "ss16",
639     "Stylistic Set 17" => "ss17",
640     "Stylistic Set 18" => "ss18",
641     "Stylistic Set 19" => "ss19",
642     "Stylistic Set 2" => "ss02",
643     "Stylistic Set 20" => "ss20",
644     "Stylistic Set 3" => "ss03",
645     "Stylistic Set 4" => "ss04",
646     "Stylistic Set 5" => "ss05",
647     "Stylistic Set 6" => "ss06",
648     "Stylistic Set 7" => "ss07",
649     "Stylistic Set 8" => "ss08",
650     "Stylistic Set 9" => "ss09",
651     "Subscript" => "subs",
652     "Superscript" => "sups",
653     "Swash" => "swsh",
654     "Tabular Figures" => "tnum",
655     "Terminal Forms #2" => "fin2",
656     "Terminal Forms #3" => "fin3",
657     "Terminal Forms" => "fina",
658     "Third Widths" => "twid",
659     "Titling" => "titl",
660     "Traditional Forms" => "trad",
661     "Traditional Name Forms" => "tnam",
662     "Trailing Jamo Forms" => "tjmo",
663     "Unicase" => "unic",
664     "Vattu Variants" => "vatu",
665     "Vertical Alternates and Rotation" => "vrt2",
666     "Vertical Kana Alternates" => "vkna",
667     "Vertical Kerning" => "vkrn",
668     "Vertical Writing" => "vert",
669     "Vowel Jamo Forms" => "vjmo",
670     }
671 );
672
673 {
674     foreach my $s (qw ( SCRIPT LANGUAGE FEATURE ) )
675     {
676         map { $ttnames{$s}{$tttags{$s}{$_}} = $_ }  keys %{$tttags{$s}};
677     }
678 }
679
680
681 =head2 readtagsfile ( filename )
682
683 Read a file in the syntax of Tags.txt (included with Microsoft VOLT) to obtain additional/replacement tag definitions.
684
685 Returns 0 if can't open the file; else 1.
686
687 =cut
688
689 sub readtagsfile
690 {
691     my $fname = shift;
692     open (TAGS, $fname) or return 0;
693         my ($what, $name, $tag);
694         while (<TAGS>)
695         {
696                 ($what, $name, $tag) = (m/"([^"]*)", "([^"]*)", "([^"]*)"/);  #"
697                 $ttnames{$what}{$tag} = $name;
698                 $tttags{$what}{$name} = $tag;
699         }
700         close TAGS;
701     return 1;   
702 }
703
704
705
706 1;