--- /dev/null
+package Font::TTF::OTTags;
+
+=head1 NAME
+
+Font::TTF::OTTags - Utilities for TrueType/OpenType tags
+
+=head1 SYNOPSIS
+
+ use Font::TTF::OTTags qw( %tttags %ttnames readtagsfile );
+
+ # Look at built-in stuff:
+ $script_tag = $tttags{'SCRIPT'}{'Cypriot Syllabary'};
+ $lang_name = $ttnames{'LANGUAGE'}{'AFK '}
+
+ # Read latest tags file to add to built-in definitions
+ readtagsfile ("C:\\Program Files\\Microsoft VOLT\\TAGS.txt");
+
+First-level keys to %tttags and %ttnames are:
+
+=over
+
+'SCRIPT' -- retrieve script tag or name
+
+'LANGUAGE' -- retrieve language tag or name
+
+'FEATURE' -- retrieve feature tag or name
+
+=back
+
+Built-in data has been derived from Microsoft's tag registry at
+L<http://www.microsoft.com/typography/otspec/ttoreg.htm>,
+updated to draft v1.5 of the OpenType Spec.
+
+=head1 METHODS
+
+=cut
+
+use strict;
+use vars qw( %tttags %ttnames @EXPORT_OK @ISA );
+require Exporter;
+@ISA = qw( Exporter );
+@EXPORT_OK = qw( %tttags %ttnames readtagsfile);
+
+
+%tttags = (
+
+# All data below derived from VOLT 1.3 TAGS.txt file.
+# For conveninence of human checking, these are now sorted alphabetically.
+
+'SCRIPT' => {
+ "Arabic" => "arab",
+ "Armenian" => "armn",
+ "Balinese" => "bali",
+ "Bengali v.2" => "bng2",
+ "Bengali" => "beng",
+ "Bopomofo" => "bopo",
+ "Braille" => "brai",
+ "Buginese" => "bugi",
+ "Buhid" => "buhd",
+ "Byzantine Music" => "byzm",
+ "CJK Ideographic" => "hani",
+ "Canadian Syllabics" => "cans",
+ "Carian" => "cari",
+ "Cham" => "cham",
+ "Cherokee" => "cher",
+ "Coptic" => "copt",
+ "Cypriot Syllabary" => "cprt",
+ "Cyrillic" => "cyrl",
+ "Default" => "DFLT",
+ "Deseret" => "dsrt",
+ "Devanagari v.2" => "dev2",
+ "Devanagari" => "deva",
+ "Ethiopic" => "ethi",
+ "Georgian" => "geor",
+ "Glagolitic" => "glag",
+ "Gothic" => "goth",
+ "Greek" => "grek",
+ "Gujarati v.2" => "gjr2",
+ "Gujarati" => "gujr",
+ "Gurmukhi v.2" => "gur2",
+ "Gurmukhi" => "guru",
+ "Hangul Jamo" => "jamo",
+ "Hangul" => "hang",
+ "Hanunoo" => "hano",
+ "Hebrew" => "hebr",
+ "Hiragana" => "kana",
+ "Javanese" => "java",
+ "Kannada v.2" => "knd2",
+ "Kannada" => "knda",
+ "Katakana" => "kana",
+ "Kayah Li" => "kali",
+ "Kharosthi" => "khar",
+ "Khmer" => "khmr",
+ "Lao" => "lao ",
+ "Latin" => "latn",
+ "Lepcha" => "lepc",
+ "Limbu" => "limb",
+ "Linear B" => "linb",
+ "Lycian" => "lyci",
+ "Lydian" => "lydi",
+ "Malayalam v.2" => "mlm2",
+ "Malayalam" => "mlym",
+ "Mathematical Alphanumeric Symbols" => "math",
+ "Mongolian" => "mong",
+ "Musical Symbols" => "musc",
+ "Myanmar" => "mymr",
+ "N'Ko" => "nko ",
+ "New Tai Lue" => "talu",
+ "Ogham" => "ogam",
+ "Ol Chiki" => "olck",
+ "Old Italic" => "ital",
+ "Old Persian Cuneiform" => "xpeo",
+ "Oriya v.2" => "ory2",
+ "Oriya" => "orya",
+ "Osmanya" => "osma",
+ "Phags-pa" => "phag",
+ "Phoenician" => "phnx",
+ "Rejang" => "rjng",
+ "Runic" => "runr",
+ "Saurashtra" => "saur",
+ "Shavian" => "shaw",
+ "Sinhala" => "sinh",
+ "Sumero-Akkadian Cuneiform" => "xsux",
+ "Sundanese" => "sund",
+ "Syloti Nagri" => "sylo",
+ "Syriac" => "syrc",
+ "Tagalog" => "tglg",
+ "Tagbanwa" => "tagb",
+ "Tai Le" => "tale",
+ "Tamil v.2" => "tml2",
+ "Tamil" => "taml",
+ "Telugu v.2" => "tel2",
+ "Telugu" => "telu",
+ "Thaana" => "thaa",
+ "Thai" => "thai",
+ "Tibetan" => "tibt",
+ "Tifinagh" => "tfng",
+ "Ugaritic Cuneiform" => "ugar",
+ "Vai" => "vai ",
+ "Yi" => "yi ",
+ },
+
+'LANGUAGE' => {
+ "Aari" => "ARI ",
+ "Abaza" => "ABA ",
+ "Abkhazian" => "ABK ",
+ "Adyghe" => "ADY ",
+ "Afar" => "AFR ",
+ "Afrikaans" => "AFK ",
+ "Agaw" => "AGW ",
+ "Albanian" => "SQI ",
+ "Alsatian" => "ALS ",
+ "Altai" => "ALT ",
+ "Amharic" => "AMH ",
+ "Arabic" => "ARA ",
+ "Arakanese" => "ARK ",
+ "Armenian" => "HYE ",
+ "Assamese" => "ASM ",
+ "Athapaskan" => "ATH ",
+ "Avar" => "AVR ",
+ "Awadhi" => "AWA ",
+ "Aymara" => "AYM ",
+ "Azeri" => "AZE ",
+ "Badaga" => "BAD ",
+ "Baghelkhandi" => "BAG ",
+ "Balante" => "BLN ",
+ "Balkar" => "BAL ",
+ "Balochi" => "BLI ",
+ "Balti" => "BLT ",
+ "Bambara" => "BMB ",
+ "Bamileke" => "BML ",
+ "Bashkir" => "BSH ",
+ "Basque" => "EUQ ",
+ "Baule" => "BAU ",
+ "Belarussian" => "BEL ",
+ "Bemba" => "BEM ",
+ "Bench" => "BCH ",
+ "Bengali" => "BEN ",
+ "Berber" => "BBR ",
+ "Beti" => "BTI ",
+ "Bhili" => "BHI ",
+ "Bhojpuri" => "BHO ",
+ "Bible Cree" => "BCR ",
+ "Bikol" => "BIK ",
+ "Bilen" => "BIL ",
+ "Blackfoot" => "BKF ",
+ "Bosnian" => "BOS ",
+ "Brahui" => "BRH ",
+ "Braj Bhasha" => "BRI ",
+ "Breton" => "BRE ",
+ "Bulgarian" => "BGR ",
+ "Burmese" => "BRM ",
+ "Carrier" => "CRR ",
+ "Catalan" => "CAT ",
+ "Cebuano" => "CEB ",
+ "Chaha Gurage" => "CHG ",
+ "Chattisgarhi" => "CHH ",
+ "Chechen" => "CHE ",
+ "Cherokee" => "CHR ",
+ "Chichewa" => "CHI ",
+ "Chin" => "QIN ",
+ "Chinese Hong Kong" => "ZHH ",
+ "Chinese Phonetic" => "ZHP ",
+ "Chinese Simplified" => "ZHS ",
+ "Chinese Traditional" => "ZHT ",
+ "Chipewyan" => "CHP ",
+ "Chukchi" => "CHK ",
+ "Church Slavonic" => "CSL ",
+ "Chuvash" => "CHU ",
+ "Comorian" => "CMR ",
+ "Coptic" => "COP ",
+ "Corsican" => "COS ",
+ "Cree" => "CRE ",
+ "Crimean Tatar" => "CRT ",
+ "Croatian" => "HRV ",
+ "Czech" => "CSY ",
+ "Dangme" => "DNG ",
+ "Danish" => "DAN ",
+ "Dargwa" => "DAR ",
+ "Dari" => "DRI ",
+ "Default" => "dflt",
+ "Dhivehi (OBSOLETE)" => "DHV ",
+ "Dhivehi" => "DIV ",
+ "Dinka" => "DNK ",
+ "Djerma" => "DJR ",
+ "Dogri" => "DGR ",
+ "Dungan" => "DUN ",
+ "Dutch" => "NLD ",
+ "Dzongkha" => "DZN ",
+ "Eastern Cree" => "ECR ",
+ "Ebira" => "EBI ",
+ "Edo" => "EDO ",
+ "Efik" => "EFI ",
+ "English" => "ENG ",
+ "Erzya" => "ERZ ",
+ "Esperanto" => "NTO ",
+ "Estonian" => "ETI ",
+ "Even" => "EVN ",
+ "Evenki" => "EVK ",
+ "Ewe" => "EWE ",
+ "Faroese" => "FOS ",
+ "Farsi" => "FAR ",
+ "Fijian" => "FJI ",
+ "Filipino" => "PIL ",
+ "Finnish" => "FIN ",
+ "Flemish" => "FLE ",
+ "Fon" => "FON ",
+ "Forest Nenets" => "FNE ",
+ "French Antillean" => "FAN ",
+ "French" => "FRA ",
+ "Frisian" => "FRI ",
+ "Friulian" => "FRL ",
+ "Fulani" => "FUL ",
+ "Futa" => "FTA ",
+ "Ga" => "GAD ",
+ "Gaelic" => "GAE ",
+ "Gagauz" => "GAG ",
+ "Galician" => "GAL ",
+ "Garhwali" => "GAW ",
+ "Garo" => "GRO ",
+ "Garshuni" => "GAR ",
+ "Ge'ez" => "GEZ ",
+ "Georgian" => "KAT ",
+ "German" => "DEU ",
+ "Gilyak" => "GIL ",
+ "Gondi" => "GON ",
+ "Greek" => "ELL ",
+ "Greenlandic" => "GRN ",
+ "Guarani" => "GUA ",
+ "Gujarati" => "GUJ ",
+ "Gumuz" => "GMZ ",
+ "Haitian" => "HAI ",
+ "Halam" => "HAL ",
+ "Hammer-Banna" => "HBN ",
+ "Harari" => "HRI ",
+ "Harauti" => "HAR ",
+ "Hausa" => "HAU ",
+ "Hawaiin" => "HAW ",
+ "Hebrew" => "IWR ",
+ "High Mari" => "HMA ",
+ "Hiligaynon" => "HIL ",
+ "Hindi" => "HIN ",
+ "Hindko" => "HND ",
+ "Ho" => "HO ",
+ "Hungarian" => "HUN ",
+ "Icelandic" => "ISL ",
+ "Igbo" => "IBO ",
+ "Ijo" => "IJO ",
+ "Ilokano" => "ILO ",
+ "Inari Sami" => "ISM ",
+ "Indonesian" => "IND ",
+ "Ingush" => "ING ",
+ "Inuktitut" => "INU ",
+ "Irish Traditional" => "IRT ",
+ "Irish" => "IRI ",
+ "Italian" => "ITA ",
+ "Japanese" => "JAN ",
+ "Javanese" => "JAV ",
+ "Judezmo" => "JUD ",
+ "Jula" => "JUL ",
+ "Kabardian" => "KAB ",
+ "Kachchi" => "KAC ",
+ "Kalenjin" => "KAL ",
+ "Kalmyk" => "KLM ",
+ "Kamba" => "KMB ",
+ "Kannada" => "KAN ",
+ "Kanuri" => "KNR ",
+ "Karachay" => "KAR ",
+ "Karaim" => "KRM ",
+ "Karakalpak" => "KRK ",
+ "Karelian" => "KRL ",
+ "Karen" => "KRN ",
+ "Kashmiri" => "KSH ",
+ "Kazakh" => "KAZ ",
+ "Kebena" => "KEB ",
+ "Khakass" => "KHA ",
+ "Khanty-Kazim" => "KHK ",
+ "Khanty-Shurishkar" => "KHS ",
+ "Khanty-Vakhi" => "KHV ",
+ "Khasi" => "KSI ",
+ "Khmer" => "KHM ",
+ "Khowar" => "KHW ",
+ "Khutsuri Georgian" => "KGE ",
+ "Kikongo" => "KON ",
+ "Kikuyu" => "KIK ",
+ "Kildin Sami" => "KSM ",
+ "Kirghiz" => "KIR ",
+ "Kisii" => "KIS ",
+ "Kodagu" => "KOD ",
+ "Kokni" => "KKN ",
+ "Komi-Permyak" => "KOP ",
+ "Komi-Zyrian" => "KOZ ",
+ "Komo" => "KMO ",
+ "Komso" => "KMS ",
+ "Konkani" => "KOK ",
+ "Koorete" => "KRT ",
+ "Korean Old Hangul" => "KOH ",
+ "Korean" => "KOR ",
+ "Koryak" => "KYK ",
+ "Kpelle" => "KPL ",
+ "Krio" => "KRI ",
+ "Kui" => "KUI ",
+ "Kulvi" => "KUL ",
+ "Kumaoni" => "KMN ",
+ "Kumyk" => "KUM ",
+ "Kurdish" => "KUR ",
+ "Kurukh" => "KUU ",
+ "Kuy" => "KUY ",
+ "L-Cree" => "LCR ",
+ "Ladakhi" => "LDK ",
+ "Ladin" => "LAD ",
+ "Lahuli" => "LAH ",
+ "Lak" => "LAK ",
+ "Lambani" => "LAM ",
+ "Lao" => "LAO ",
+ "Latin" => "LAT ",
+ "Latvian" => "LVI ",
+ "Laz" => "LAZ ",
+ "Lezgi" => "LEZ ",
+ "Limbu" => "LMB ",
+ "Lingala" => "LIN ",
+ "Lithuanian" => "LTH ",
+ "Lomwe" => "LMW ",
+ "Low Mari" => "LMA ",
+ "Lower Sorbian" => "LSB ",
+ "Luba" => "LUB ",
+ "Luganda" => "LUG ",
+ "Luhya" => "LUH ",
+ "Lule Sami" => "LSM ",
+ "Luo" => "LUO ",
+ "Luxembourgish" => "LTZ ",
+ "Macedonian" => "MKD ",
+ "Maithili" => "MTH ",
+ "Majang" => "MAJ ",
+ "Makua" => "MAK ",
+ "Malagasy" => "MLG ",
+ "Malay" => "MLY ",
+ "Malayalam Reformed" => "MLR ",
+ "Malayalam Traditional" => "MAL ",
+ "Male" => "MLE ",
+ "Malinke" => "MLN ",
+ "Maltese" => "MTS ",
+ "Manchu" => "MCH ",
+ "Mandinka" => "MND ",
+ "Maninka" => "MNK ",
+ "Manipuri" => "MNI ",
+ "Mansi" => "MAN ",
+ "Manx Gaelic" => "MNX ",
+ "Maori" => "MRI ",
+ "Mapudungun" => "MAP ",
+ "Marathi" => "MAR ",
+ "Marwari" => "MAW ",
+ "Mbundu" => "MBN ",
+ "Me'en" => "MEN ",
+ "Mende" => "MDE ",
+ "Mizo" => "MIZ ",
+ "Mohawk" => "MOH ",
+ "Moksha" => "MOK ",
+ "Moldavian" => "MOL ",
+ "Mon" => "MON ",
+ "Mongolian" => "MNG ",
+ "Moose Cree" => "MCR ",
+ "Moroccan" => "MOR ",
+ "Mundari" => "MUN ",
+ "N'Ko" => "NKO ",
+ "N-Cree" => "NCR ",
+ "Naga-Assamese" => "NAG ",
+ "Nagari" => "NGR ",
+ "Nanai" => "NAN ",
+ "Naskapi" => "NAS ",
+ "Ndebele" => "NDB ",
+ "Ndonga" => "NDG ",
+ "Nepali" => "NEP ",
+ "Newari" => "NEW ",
+ "Nisi" => "NIS ",
+ "Niuean" => "NIU ",
+ "Nkole" => "NKL ",
+ "Nogai" => "NOG ",
+ "Northern Sami" => "NSM ",
+ "Northern Tai" => "NTA ",
+ "Norway House Cree" => "NHC ",
+ "Norwegian" => "NOR ",
+ "Nynorsk" => "NYN ",
+ "Occitan" => "OCI ",
+ "Oji-Cree" => "OCR ",
+ "Ojibway" => "OJB ",
+ "Oriya" => "ORI ",
+ "Oromo" => "ORO ",
+ "Ossetian" => "OSS ",
+ "Palaung" => "PLG ",
+ "Palestinian Aramaic" => "PAA ",
+ "Pali" => "PAL ",
+ "Palpa" => "PAP ",
+ "Pashto" => "PAS ",
+ "Polish" => "PLK ",
+ "Polytonic Greek" => "PGR ",
+ "Portuguese" => "PTG ",
+ "Provencal" => "PRO ",
+ "Punjabi" => "PAN ",
+ "R-Cree" => "RCR ",
+ "Rajasthani" => "RAJ ",
+ "Rhaeto-Romanic" => "RMS ",
+ "Riang" => "RIA ",
+ "Romanian" => "ROM ",
+ "Romany" => "ROY ",
+ "Ruanda" => "RUA ",
+ "Russian Buriat" => "RBU ",
+ "Russian" => "RUS ",
+ "Rusyn" => "RSY ",
+ "Sadri" => "SAD ",
+ "Samoan" => "SMO ",
+ "Sango" => "SGO ",
+ "Sanskrit" => "SAN ",
+ "Santali" => "SAT ",
+ "Saraiki" => "SRK ",
+ "Sayisi" => "SAY ",
+ "Sekota" => "SEK ",
+ "Selkup" => "SEL ",
+ "Sena" => "SNA ",
+ "Serbian" => "SRB ",
+ "Serer" => "SRR ",
+ "Shan" => "SHN ",
+ "Sibe" => "SIB ",
+ "Sidamo" => "SID ",
+ "Silte Gurage" => "SIG ",
+ "Sindhi" => "SND ",
+ "Sinhalese" => "SNH ",
+ "Skolt Sami" => "SKS ",
+ "Slavey" => "SLA ",
+ "Slovak" => "SKY ",
+ "Slovenian" => "SLV ",
+ "Sodo Gurage" => "SOG ",
+ "Somali" => "SML ",
+ "Soninke" => "SNK ",
+ "Sotho" => "SOT ",
+ "South Slavey" => "SSL ",
+ "Southern Sami" => "SSM ",
+ "Spanish" => "ESP ",
+ "Suri" => "SUR ",
+ "Sutu" => "SXT ",
+ "Svan" => "SVA ",
+ "Swadaya Aramaic" => "SWA ",
+ "Swahili" => "SWK ",
+ "Swazi" => "SWZ ",
+ "Swedish" => "SVE ",
+ "Syriac" => "SYR ",
+ "TH-Cree" => "TCR ",
+ "Tabasaran" => "TAB ",
+ "Tahitian" => "THT ",
+ "Tai Lue" => "XBD ",
+ "Tajiki" => "TAJ ",
+ "Tamil" => "TAM ",
+ "Tatar" => "TAT ",
+ "Telugu" => "TEL ",
+ "Temne" => "TMN ",
+ "Thai" => "THA ",
+ "Tibetan" => "TIB ",
+ "Tigre" => "TGR ",
+ "Tigrinya" => "TGY ",
+ "Todo" => "TOD ",
+ "Tonga" => "TNG ",
+ "Tongan" => "TGN ",
+ "Tsonga" => "TSG ",
+ "Tswana" => "TNA ",
+ "Tulu" => "TUL ",
+ "Tundra Nenets" => "TNE ",
+ "Turkish" => "TRK ",
+ "Turkmen" => "TKM ",
+ "Turoyo Aramaic" => "TUA ",
+ "Tuvin" => "TUV ",
+ "Twi" => "TWI ",
+ "Udmurt" => "UDM ",
+ "Ukrainian" => "UKR ",
+ "Upper Sorbian" => "USB ",
+ "Urdu" => "URD ",
+ "Uyghur" => "UYG ",
+ "Uzbek" => "UZB ",
+ "Venda" => "VEN ",
+ "Vietnamese" => "VIT ",
+ "Wa" => "WA ",
+ "Wagdi" => "WAG ",
+ "Welsh" => "WEL ",
+ "West-Cree" => "WCR ",
+ "Wolof" => "WLF ",
+ "Woods Cree" => "DCR ",
+ "Xhosa" => "XHS ",
+ "Y-Cree" => "YCR ",
+ "Yakut" => "YAK ",
+ "Yi Classic" => "YIC ",
+ "Yi Modern" => "YIM ",
+ "Yiddish" => "JII ",
+ "Yoruba" => "YBA ",
+ "Zande" => "ZND ",
+ "Zulu" => "ZUL ",
+ },
+
+'FEATURE' => {
+ "Above-Base Forms" => "abvf",
+ "Above-Base Mark Positioning" => "abvm",
+ "Above-Base Substitutions" => "abvs",
+ "Access All Alternates" => "aalt",
+ "Akhands" => "akhn",
+ "Alternate Annotation Forms" => "nalt",
+ "Alternate Half Widths" => "halt",
+ "Alternate Vertical Half Metrics" => "vhal",
+ "Alternate Vertical Metrics" => "valt",
+ "Alternative Fractions" => "afrc",
+ "Below-Base Forms" => "blwf",
+ "Below-Base Mark Positioning" => "blwm",
+ "Below-Base Substitutions" => "blws",
+ "Capital Spacing" => "cpsp",
+ "Case-Sensitive Forms" => "case",
+ "Centered CJK Punctuation" => "cpct",
+ "Conjunct Forms After Ro" => "cfar",
+ "Conjunct Forms" => "cjct",
+ "Contextual Alternates" => "calt",
+ "Contextual Ligatures" => "clig",
+ "Contextual Swash" => "cswh",
+ "Cursive Positioning" => "curs",
+ "Default Processing" => "dflt",
+ "Denominators" => "dnom",
+ "Diphthongs (OBSOLETE)" => "dpng",
+ "Discretionary Ligatures" => "dlig",
+ "Distances" => "dist",
+ "Expert Forms" => "expt",
+ "Final Glyph On Line Alternates" => "falt",
+ "Fractions" => "frac",
+ "Full Widths" => "fwid",
+ "Glyph Composition/Decomposition" => "ccmp",
+ "Halant Forms" => "haln",
+ "Half Forms" => "half",
+ "Half Widths" => "hwid",
+ "Hangul" => "hngl",
+ "Historical Forms" => "hist",
+ "Historical Ligatures" => "hlig",
+ "Hojo (JIS X 0212-1990) Kanji Forms" => "hojo",
+ "Horizontal Kana Alternates" => "hkna",
+ "Initial Forms" => "init",
+ "Isolated Forms" => "isol",
+ "Italics" => "ital",
+ "JIS2004 Forms" => "jp04",
+ "JIS78 Forms" => "jp78",
+ "JIS83 Forms" => "jp83",
+ "JIS90 Forms" => "jp90",
+ "Justification Alternates" => "jalt",
+ "Kerning" => "kern",
+ "Leading Jamo Forms" => "ljmo",
+ "Left Bounds" => "lfbd",
+ "Lining Figures" => "lnum",
+ "Localized Forms" => "locl",
+ "Mark Positioning via Substitution" => "mset",
+ "Mark Positioning" => "mark",
+ "Mark to Mark Positioning" => "mkmk",
+ "Mathematical Greek" => "mgrk",
+ "Medial Forms #2" => "med2",
+ "Medial Forms" => "medi",
+ "NLC Kanji Forms" => "nlck",
+ "Nukta Forms" => "nukt",
+ "Numerators" => "numr",
+ "Oldstyle Figures" => "onum",
+ "Optical Bounds" => "opbd",
+ "Optical Size" => "size",
+ "Ordinals" => "ordn",
+ "Ornaments" => "ornm",
+ "Petite Capitals From Capitals" => "c2pc",
+ "Petite Capitals" => "pcap",
+ "Post-base Forms" => "pstf",
+ "Post-base Substitutions" => "psts",
+ "Pre-base Forms" => "pref",
+ "Pre-base Substitutions" => "pres",
+ "Proportional Alternate Vertical Metrics" => "vpal",
+ "Proportional Alternate Widths" => "palt",
+ "Proportional Figures" => "pnum",
+ "Proportional Kana" => "pkna",
+ "Proportional Widths" => "pwid",
+ "Quarter Widths" => "qwid",
+ "Rakar Forms" => "rkrf",
+ "Randomize" => "rand",
+ "Reph Forms" => "rphf",
+ "Required Ligatures" => "rlig",
+ "Right Bounds" => "rtbd",
+ "Right-To-Left Alternates" => "rtla",
+ "Ruby Notation Forms" => "ruby",
+ "Scientific Inferiors" => "sinf",
+ "Simplified Forms" => "smpl",
+ "Slashed Zero" => "zero",
+ "Small Capitals From Capitals" => "c2sc",
+ "Small Capitals" => "smcp",
+ "Standard Ligatures" => "liga",
+ "Stylistic Alternates" => "salt",
+ "Stylistic Set 1" => "ss01",
+ "Stylistic Set 10" => "ss10",
+ "Stylistic Set 11" => "ss11",
+ "Stylistic Set 12" => "ss12",
+ "Stylistic Set 13" => "ss13",
+ "Stylistic Set 14" => "ss14",
+ "Stylistic Set 15" => "ss15",
+ "Stylistic Set 16" => "ss16",
+ "Stylistic Set 17" => "ss17",
+ "Stylistic Set 18" => "ss18",
+ "Stylistic Set 19" => "ss19",
+ "Stylistic Set 2" => "ss02",
+ "Stylistic Set 20" => "ss20",
+ "Stylistic Set 3" => "ss03",
+ "Stylistic Set 4" => "ss04",
+ "Stylistic Set 5" => "ss05",
+ "Stylistic Set 6" => "ss06",
+ "Stylistic Set 7" => "ss07",
+ "Stylistic Set 8" => "ss08",
+ "Stylistic Set 9" => "ss09",
+ "Subscript" => "subs",
+ "Superscript" => "sups",
+ "Swash" => "swsh",
+ "Tabular Figures" => "tnum",
+ "Terminal Forms #2" => "fin2",
+ "Terminal Forms #3" => "fin3",
+ "Terminal Forms" => "fina",
+ "Third Widths" => "twid",
+ "Titling" => "titl",
+ "Traditional Forms" => "trad",
+ "Traditional Name Forms" => "tnam",
+ "Trailing Jamo Forms" => "tjmo",
+ "Unicase" => "unic",
+ "Vattu Variants" => "vatu",
+ "Vertical Alternates and Rotation" => "vrt2",
+ "Vertical Kana Alternates" => "vkna",
+ "Vertical Kerning" => "vkrn",
+ "Vertical Writing" => "vert",
+ "Vowel Jamo Forms" => "vjmo",
+ }
+);
+
+{
+ foreach my $s (qw ( SCRIPT LANGUAGE FEATURE ) )
+ {
+ map { $ttnames{$s}{$tttags{$s}{$_}} = $_ } keys %{$tttags{$s}};
+ }
+}
+
+
+=head2 readtagsfile ( filename )
+
+Read a file in the syntax of Tags.txt (included with Microsoft VOLT) to obtain additional/replacement tag definitions.
+
+Returns 0 if can't open the file; else 1.
+
+=cut
+
+sub readtagsfile
+{
+ my $fname = shift;
+ open (TAGS, $fname) or return 0;
+ my ($what, $name, $tag);
+ while (<TAGS>)
+ {
+ ($what, $name, $tag) = (m/"([^"]*)", "([^"]*)", "([^"]*)"/); #"
+ $ttnames{$what}{$tag} = $name;
+ $tttags{$what}{$name} = $tag;
+ }
+ close TAGS;
+ return 1;
+}
+
+
+
+1;