SkOTTable_name.h 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. /*
  2. * Copyright 2012 Google Inc.
  3. *
  4. * Use of this source code is governed by a BSD-style license that can be
  5. * found in the LICENSE file.
  6. */
  7. #ifndef SkOTTable_name_DEFINED
  8. #define SkOTTable_name_DEFINED
  9. #include "include/core/SkString.h"
  10. #include "src/core/SkEndian.h"
  11. #include "src/sfnt/SkOTTableTypes.h"
  12. #pragma pack(push, 1)
  13. struct SkOTTableName {
  14. static const SK_OT_CHAR TAG0 = 'n';
  15. static const SK_OT_CHAR TAG1 = 'a';
  16. static const SK_OT_CHAR TAG2 = 'm';
  17. static const SK_OT_CHAR TAG3 = 'e';
  18. static const SK_OT_ULONG TAG = SkOTTableTAG<SkOTTableName>::value;
  19. SK_OT_USHORT format;
  20. static const SK_OT_USHORT format_0 = SkTEndian_SwapBE16(0);
  21. /** Format 1 was added in OpenType 1.6 (April 2009). */
  22. static const SK_OT_USHORT format_1 = SkTEndian_SwapBE16(1);
  23. /** The number of name records which follow. */
  24. SK_OT_USHORT count;
  25. /** Offset in SK_OT_BYTEs to start of string storage area (from start of table). */
  26. SK_OT_USHORT stringOffset;
  27. struct Record {
  28. /** The platform ID specifies how to interpret the encoding and language ID. */
  29. struct PlatformID {
  30. enum Value : SK_OT_USHORT {
  31. Unicode = SkTEndian_SwapBE16(0),
  32. Macintosh = SkTEndian_SwapBE16(1),
  33. ISO = SkTEndian_SwapBE16(2), // Deprecated, use Unicode instead.
  34. Windows = SkTEndian_SwapBE16(3),
  35. Custom = SkTEndian_SwapBE16(4),
  36. } value;
  37. } platformID;
  38. union EncodingID {
  39. SK_OT_USHORT custom;
  40. /** Always UTF-16BE. */
  41. struct Unicode {
  42. enum Value : SK_OT_USHORT {
  43. Unicode10 = SkTEndian_SwapBE16(0),
  44. Unicode11 = SkTEndian_SwapBE16(1),
  45. ISO10646 = SkTEndian_SwapBE16(2), //deprecated, use Unicode11
  46. Unicode20BMP = SkTEndian_SwapBE16(3),
  47. Unicode20 = SkTEndian_SwapBE16(4),
  48. UnicodeVariationSequences = SkTEndian_SwapBE16(5),
  49. UnicodeFull = SkTEndian_SwapBE16(6),
  50. } value;
  51. } unicode;
  52. /** These are Mac encodings, see http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/
  53. * for their mappings to unicode.
  54. * Name table strings using PlatformID::Macintosh must use Roman.
  55. */
  56. struct Macintosh {
  57. enum Value : SK_OT_USHORT {
  58. Roman = SkTEndian_SwapBE16(0),
  59. Japanese = SkTEndian_SwapBE16(1),
  60. ChineseTraditional = SkTEndian_SwapBE16(2),
  61. Korean = SkTEndian_SwapBE16(3),
  62. Arabic = SkTEndian_SwapBE16(4),
  63. Hebrew = SkTEndian_SwapBE16(5),
  64. Greek = SkTEndian_SwapBE16(6),
  65. Russian = SkTEndian_SwapBE16(7),
  66. RSymbol = SkTEndian_SwapBE16(8),
  67. Devanagari = SkTEndian_SwapBE16(9),
  68. Gurmukhi = SkTEndian_SwapBE16(10),
  69. Gujarati = SkTEndian_SwapBE16(11),
  70. Oriya = SkTEndian_SwapBE16(12),
  71. Bengali = SkTEndian_SwapBE16(13),
  72. Tamil = SkTEndian_SwapBE16(14),
  73. Telugu = SkTEndian_SwapBE16(15),
  74. Kannada = SkTEndian_SwapBE16(16),
  75. Malayalam = SkTEndian_SwapBE16(17),
  76. Sinhalese = SkTEndian_SwapBE16(18),
  77. Burmese = SkTEndian_SwapBE16(19),
  78. Khmer = SkTEndian_SwapBE16(20),
  79. Thai = SkTEndian_SwapBE16(21),
  80. Laotian = SkTEndian_SwapBE16(22),
  81. Georgian = SkTEndian_SwapBE16(23),
  82. Armenian = SkTEndian_SwapBE16(24),
  83. ChineseSimplified = SkTEndian_SwapBE16(25),
  84. Tibetan = SkTEndian_SwapBE16(26),
  85. Mongolian = SkTEndian_SwapBE16(27),
  86. Geez = SkTEndian_SwapBE16(28),
  87. Slavic = SkTEndian_SwapBE16(29),
  88. Vietnamese = SkTEndian_SwapBE16(30),
  89. Sindhi = SkTEndian_SwapBE16(31),
  90. Uninterpreted = SkTEndian_SwapBE16(32),
  91. } value;
  92. } macintosh;
  93. /** Deprecated, use Unicode instead. */
  94. struct ISO {
  95. enum Value : SK_OT_USHORT {
  96. ASCII7 = SkTEndian_SwapBE16(0),
  97. ISO10646 = SkTEndian_SwapBE16(1),
  98. ISO88591 = SkTEndian_SwapBE16(2),
  99. } value;
  100. } iso;
  101. /** Name table strings using PlatformID::Windows must use Symbol, UnicodeBMPUCS2, or
  102. * UnicodeUCS4. Symbol and UnicodeBMPUCS2 are both UCS2-BE, UnicodeUCS4 is actually
  103. * UTF-16BE.
  104. */
  105. struct Windows {
  106. enum Value : SK_OT_USHORT {
  107. Symbol = SkTEndian_SwapBE16(0), // UCS2-BE, but don't use this font to display it's own name.
  108. UnicodeBMPUCS2 = SkTEndian_SwapBE16(1), // UCS2-BE, Windows default
  109. ShiftJIS = SkTEndian_SwapBE16(2),
  110. PRC = SkTEndian_SwapBE16(3),
  111. Big5 = SkTEndian_SwapBE16(4),
  112. Wansung = SkTEndian_SwapBE16(5),
  113. Johab = SkTEndian_SwapBE16(6),
  114. UnicodeUCS4 = SkTEndian_SwapBE16(10), // UTF-16BE. It means UCS4 in charmaps.
  115. } value;
  116. } windows;
  117. } encodingID;
  118. /** LanguageIDs <= 0x7FFF are predefined.
  119. * LanguageIDs > 0x7FFF are indexes into the langTagRecord array
  120. * (in format 1 name tables, see SkOTTableName::format).
  121. */
  122. union LanguageID {
  123. /** A value greater than 0x7FFF.
  124. * languageTagID - 0x8000 is an index into the langTagRecord array.
  125. */
  126. SK_OT_USHORT languageTagID;
  127. /** These are known as Language Designators.
  128. * Apple now uses BCP 47 (post OSX10.4), so there will be no new entries.
  129. */
  130. struct Macintosh {
  131. enum Value : SK_OT_USHORT {
  132. English = SkTEndian_SwapBE16(0),
  133. French = SkTEndian_SwapBE16(1),
  134. German = SkTEndian_SwapBE16(2),
  135. Italian = SkTEndian_SwapBE16(3),
  136. Dutch = SkTEndian_SwapBE16(4),
  137. Swedish = SkTEndian_SwapBE16(5),
  138. Spanish = SkTEndian_SwapBE16(6),
  139. Danish = SkTEndian_SwapBE16(7),
  140. Portuguese = SkTEndian_SwapBE16(8),
  141. Norwegian = SkTEndian_SwapBE16(9),
  142. Hebrew = SkTEndian_SwapBE16(10),
  143. Japanese = SkTEndian_SwapBE16(11),
  144. Arabic = SkTEndian_SwapBE16(12),
  145. Finnish = SkTEndian_SwapBE16(13),
  146. Greek = SkTEndian_SwapBE16(14),
  147. Icelandic = SkTEndian_SwapBE16(15),
  148. Maltese = SkTEndian_SwapBE16(16),
  149. Turkish = SkTEndian_SwapBE16(17),
  150. Croatian = SkTEndian_SwapBE16(18),
  151. ChineseTraditional = SkTEndian_SwapBE16(19),
  152. Urdu = SkTEndian_SwapBE16(20),
  153. Hindi = SkTEndian_SwapBE16(21),
  154. Thai = SkTEndian_SwapBE16(22),
  155. Korean = SkTEndian_SwapBE16(23),
  156. Lithuanian = SkTEndian_SwapBE16(24),
  157. Polish = SkTEndian_SwapBE16(25),
  158. Hungarian = SkTEndian_SwapBE16(26),
  159. Estonian = SkTEndian_SwapBE16(27),
  160. Latvian = SkTEndian_SwapBE16(28),
  161. Sami = SkTEndian_SwapBE16(29),
  162. Faroese = SkTEndian_SwapBE16(30),
  163. Farsi_Persian = SkTEndian_SwapBE16(31),
  164. Russian = SkTEndian_SwapBE16(32),
  165. ChineseSimplified = SkTEndian_SwapBE16(33),
  166. Flemish = SkTEndian_SwapBE16(34),
  167. IrishGaelic = SkTEndian_SwapBE16(35),
  168. Albanian = SkTEndian_SwapBE16(36),
  169. Romanian = SkTEndian_SwapBE16(37),
  170. Czech = SkTEndian_SwapBE16(38),
  171. Slovak = SkTEndian_SwapBE16(39),
  172. Slovenian = SkTEndian_SwapBE16(40),
  173. Yiddish = SkTEndian_SwapBE16(41),
  174. Serbian = SkTEndian_SwapBE16(42),
  175. Macedonian = SkTEndian_SwapBE16(43),
  176. Bulgarian = SkTEndian_SwapBE16(44),
  177. Ukrainian = SkTEndian_SwapBE16(45),
  178. Byelorussian = SkTEndian_SwapBE16(46),
  179. Uzbek = SkTEndian_SwapBE16(47),
  180. Kazakh = SkTEndian_SwapBE16(48),
  181. AzerbaijaniCyrillic = SkTEndian_SwapBE16(49),
  182. AzerbaijaniArabic = SkTEndian_SwapBE16(50),
  183. Armenian = SkTEndian_SwapBE16(51),
  184. Georgian = SkTEndian_SwapBE16(52),
  185. Moldavian = SkTEndian_SwapBE16(53),
  186. Kirghiz = SkTEndian_SwapBE16(54),
  187. Tajiki = SkTEndian_SwapBE16(55),
  188. Turkmen = SkTEndian_SwapBE16(56),
  189. MongolianTraditional = SkTEndian_SwapBE16(57),
  190. MongolianCyrillic = SkTEndian_SwapBE16(58),
  191. Pashto = SkTEndian_SwapBE16(59),
  192. Kurdish = SkTEndian_SwapBE16(60),
  193. Kashmiri = SkTEndian_SwapBE16(61),
  194. Sindhi = SkTEndian_SwapBE16(62),
  195. Tibetan = SkTEndian_SwapBE16(63),
  196. Nepali = SkTEndian_SwapBE16(64),
  197. Sanskrit = SkTEndian_SwapBE16(65),
  198. Marathi = SkTEndian_SwapBE16(66),
  199. Bengali = SkTEndian_SwapBE16(67),
  200. Assamese = SkTEndian_SwapBE16(68),
  201. Gujarati = SkTEndian_SwapBE16(69),
  202. Punjabi = SkTEndian_SwapBE16(70),
  203. Oriya = SkTEndian_SwapBE16(71),
  204. Malayalam = SkTEndian_SwapBE16(72),
  205. Kannada = SkTEndian_SwapBE16(73),
  206. Tamil = SkTEndian_SwapBE16(74),
  207. Telugu = SkTEndian_SwapBE16(75),
  208. Sinhalese = SkTEndian_SwapBE16(76),
  209. Burmese = SkTEndian_SwapBE16(77),
  210. Khmer = SkTEndian_SwapBE16(78),
  211. Lao = SkTEndian_SwapBE16(79),
  212. Vietnamese = SkTEndian_SwapBE16(80),
  213. Indonesian = SkTEndian_SwapBE16(81),
  214. Tagalong = SkTEndian_SwapBE16(82),
  215. MalayRoman = SkTEndian_SwapBE16(83),
  216. MalayArabic = SkTEndian_SwapBE16(84),
  217. Amharic = SkTEndian_SwapBE16(85),
  218. Tigrinya = SkTEndian_SwapBE16(86),
  219. Galla = SkTEndian_SwapBE16(87),
  220. Somali = SkTEndian_SwapBE16(88),
  221. Swahili = SkTEndian_SwapBE16(89),
  222. Kinyarwanda_Ruanda = SkTEndian_SwapBE16(90),
  223. Rundi = SkTEndian_SwapBE16(91),
  224. Nyanja_Chewa = SkTEndian_SwapBE16(92),
  225. Malagasy = SkTEndian_SwapBE16(93),
  226. Esperanto = SkTEndian_SwapBE16(94),
  227. Welsh = SkTEndian_SwapBE16(128),
  228. Basque = SkTEndian_SwapBE16(129),
  229. Catalan = SkTEndian_SwapBE16(130),
  230. Latin = SkTEndian_SwapBE16(131),
  231. Quenchua = SkTEndian_SwapBE16(132),
  232. Guarani = SkTEndian_SwapBE16(133),
  233. Aymara = SkTEndian_SwapBE16(134),
  234. Tatar = SkTEndian_SwapBE16(135),
  235. Uighur = SkTEndian_SwapBE16(136),
  236. Dzongkha = SkTEndian_SwapBE16(137),
  237. JavaneseRoman = SkTEndian_SwapBE16(138),
  238. SundaneseRoman = SkTEndian_SwapBE16(139),
  239. Galician = SkTEndian_SwapBE16(140),
  240. Afrikaans = SkTEndian_SwapBE16(141),
  241. Breton = SkTEndian_SwapBE16(142),
  242. Inuktitut = SkTEndian_SwapBE16(143),
  243. ScottishGaelic = SkTEndian_SwapBE16(144),
  244. ManxGaelic = SkTEndian_SwapBE16(145),
  245. IrishGaelicWithLenition = SkTEndian_SwapBE16(146),
  246. Tongan = SkTEndian_SwapBE16(147),
  247. GreekPolytonic = SkTEndian_SwapBE16(148),
  248. Greenlandic = SkTEndian_SwapBE16(149),
  249. AzerbaijaniRoman = SkTEndian_SwapBE16(150),
  250. } value;
  251. } macintosh;
  252. /** These are known as LCIDs.
  253. * On Windows the current set can be had from EnumSystemLocalesEx and LocaleNameToLCID.
  254. */
  255. struct Windows {
  256. enum Value : SK_OT_USHORT {
  257. Afrikaans_SouthAfrica = SkTEndian_SwapBE16(0x0436),
  258. Albanian_Albania = SkTEndian_SwapBE16(0x041C),
  259. Alsatian_France = SkTEndian_SwapBE16(0x0484),
  260. Amharic_Ethiopia = SkTEndian_SwapBE16(0x045E),
  261. Arabic_Algeria = SkTEndian_SwapBE16(0x1401),
  262. Arabic_Bahrain = SkTEndian_SwapBE16(0x3C01),
  263. Arabic_Egypt = SkTEndian_SwapBE16(0x0C01),
  264. Arabic_Iraq = SkTEndian_SwapBE16(0x0801),
  265. Arabic_Jordan = SkTEndian_SwapBE16(0x2C01),
  266. Arabic_Kuwait = SkTEndian_SwapBE16(0x3401),
  267. Arabic_Lebanon = SkTEndian_SwapBE16(0x3001),
  268. Arabic_Libya = SkTEndian_SwapBE16(0x1001),
  269. Arabic_Morocco = SkTEndian_SwapBE16(0x1801),
  270. Arabic_Oman = SkTEndian_SwapBE16(0x2001),
  271. Arabic_Qatar = SkTEndian_SwapBE16(0x4001),
  272. Arabic_SaudiArabia = SkTEndian_SwapBE16(0x0401),
  273. Arabic_Syria = SkTEndian_SwapBE16(0x2801),
  274. Arabic_Tunisia = SkTEndian_SwapBE16(0x1C01),
  275. Arabic_UAE = SkTEndian_SwapBE16(0x3801),
  276. Arabic_Yemen = SkTEndian_SwapBE16(0x2401),
  277. Armenian_Armenia = SkTEndian_SwapBE16(0x042B),
  278. Assamese_India = SkTEndian_SwapBE16(0x044D),
  279. AzeriCyrillic_Azerbaijan = SkTEndian_SwapBE16(0x082C),
  280. AzeriLatin_Azerbaijan = SkTEndian_SwapBE16(0x042C),
  281. Bashkir_Russia = SkTEndian_SwapBE16(0x046D),
  282. Basque_Basque = SkTEndian_SwapBE16(0x042D),
  283. Belarusian_Belarus = SkTEndian_SwapBE16(0x0423),
  284. Bengali_Bangladesh = SkTEndian_SwapBE16(0x0845),
  285. Bengali_India = SkTEndian_SwapBE16(0x0445),
  286. BosnianCyrillic_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x201A),
  287. BosnianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x141A),
  288. Breton_France = SkTEndian_SwapBE16(0x047E),
  289. Bulgarian_Bulgaria = SkTEndian_SwapBE16(0x0402),
  290. Catalan_Catalan = SkTEndian_SwapBE16(0x0403),
  291. Chinese_HongKongSAR = SkTEndian_SwapBE16(0x0C04),
  292. Chinese_MacaoSAR = SkTEndian_SwapBE16(0x1404),
  293. Chinese_PeoplesRepublicOfChina = SkTEndian_SwapBE16(0x0804),
  294. Chinese_Singapore = SkTEndian_SwapBE16(0x1004),
  295. Chinese_Taiwan = SkTEndian_SwapBE16(0x0404),
  296. Corsican_France = SkTEndian_SwapBE16(0x0483),
  297. Croatian_Croatia = SkTEndian_SwapBE16(0x041A),
  298. CroatianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x101A),
  299. Czech_CzechRepublic = SkTEndian_SwapBE16(0x0405),
  300. Danish_Denmark = SkTEndian_SwapBE16(0x0406),
  301. Dari_Afghanistan = SkTEndian_SwapBE16(0x048C),
  302. Divehi_Maldives = SkTEndian_SwapBE16(0x0465),
  303. Dutch_Belgium = SkTEndian_SwapBE16(0x0813),
  304. Dutch_Netherlands = SkTEndian_SwapBE16(0x0413),
  305. English_Australia = SkTEndian_SwapBE16(0x0C09),
  306. English_Belize = SkTEndian_SwapBE16(0x2809),
  307. English_Canada = SkTEndian_SwapBE16(0x1009),
  308. English_Caribbean = SkTEndian_SwapBE16(0x2409),
  309. English_India = SkTEndian_SwapBE16(0x4009),
  310. English_Ireland = SkTEndian_SwapBE16(0x1809),
  311. English_Jamaica = SkTEndian_SwapBE16(0x2009),
  312. English_Malaysia = SkTEndian_SwapBE16(0x4409),
  313. English_NewZealand = SkTEndian_SwapBE16(0x1409),
  314. English_RepublicOfThePhilippines = SkTEndian_SwapBE16(0x3409),
  315. English_Singapore = SkTEndian_SwapBE16(0x4809),
  316. English_SouthAfrica = SkTEndian_SwapBE16(0x1C09),
  317. English_TrinidadAndTobago = SkTEndian_SwapBE16(0x2C09),
  318. English_UnitedKingdom = SkTEndian_SwapBE16(0x0809),
  319. English_UnitedStates = SkTEndian_SwapBE16(0x0409),
  320. English_Zimbabwe = SkTEndian_SwapBE16(0x3009),
  321. Estonian_Estonia = SkTEndian_SwapBE16(0x0425),
  322. Faroese_FaroeIslands = SkTEndian_SwapBE16(0x0438),
  323. Filipino_Philippines = SkTEndian_SwapBE16(0x0464),
  324. Finnish_Finland = SkTEndian_SwapBE16(0x040B),
  325. French_Belgium = SkTEndian_SwapBE16(0x080C),
  326. French_Canada = SkTEndian_SwapBE16(0x0C0C),
  327. French_France = SkTEndian_SwapBE16(0x040C),
  328. French_Luxembourg = SkTEndian_SwapBE16(0x140c),
  329. French_PrincipalityOfMonoco = SkTEndian_SwapBE16(0x180C),
  330. French_Switzerland = SkTEndian_SwapBE16(0x100C),
  331. Frisian_Netherlands = SkTEndian_SwapBE16(0x0462),
  332. Galician_Galician = SkTEndian_SwapBE16(0x0456),
  333. Georgian_Georgia = SkTEndian_SwapBE16(0x0437),
  334. German_Austria = SkTEndian_SwapBE16(0x0C07),
  335. German_Germany = SkTEndian_SwapBE16(0x0407),
  336. German_Liechtenstein = SkTEndian_SwapBE16(0x1407),
  337. German_Luxembourg = SkTEndian_SwapBE16(0x1007),
  338. German_Switzerland = SkTEndian_SwapBE16(0x0807),
  339. Greek_Greece = SkTEndian_SwapBE16(0x0408),
  340. Greenlandic_Greenland = SkTEndian_SwapBE16(0x046F),
  341. Gujarati_India = SkTEndian_SwapBE16(0x0447),
  342. HausaLatin_Nigeria = SkTEndian_SwapBE16(0x0468),
  343. Hebrew_Israel = SkTEndian_SwapBE16(0x040D),
  344. Hindi_India = SkTEndian_SwapBE16(0x0439),
  345. Hungarian_Hungary = SkTEndian_SwapBE16(0x040E),
  346. Icelandic_Iceland = SkTEndian_SwapBE16(0x040F),
  347. Igbo_Nigeria = SkTEndian_SwapBE16(0x0470),
  348. Indonesian_Indonesia = SkTEndian_SwapBE16(0x0421),
  349. Inuktitut_Canada = SkTEndian_SwapBE16(0x045D),
  350. InuktitutLatin_Canada = SkTEndian_SwapBE16(0x085D),
  351. Irish_Ireland = SkTEndian_SwapBE16(0x083C),
  352. isiXhosa_SouthAfrica = SkTEndian_SwapBE16(0x0434),
  353. isiZulu_SouthAfrica = SkTEndian_SwapBE16(0x0435),
  354. Italian_Italy = SkTEndian_SwapBE16(0x0410),
  355. Italian_Switzerland = SkTEndian_SwapBE16(0x0810),
  356. Japanese_Japan = SkTEndian_SwapBE16(0x0411),
  357. Kannada_India = SkTEndian_SwapBE16(0x044B),
  358. Kazakh_Kazakhstan = SkTEndian_SwapBE16(0x043F),
  359. Khmer_Cambodia = SkTEndian_SwapBE16(0x0453),
  360. Kiche_Guatemala = SkTEndian_SwapBE16(0x0486),
  361. Kinyarwanda_Rwanda = SkTEndian_SwapBE16(0x0487),
  362. Kiswahili_Kenya = SkTEndian_SwapBE16(0x0441),
  363. Konkani_India = SkTEndian_SwapBE16(0x0457),
  364. Korean_Korea = SkTEndian_SwapBE16(0x0412),
  365. Kyrgyz_Kyrgyzstan = SkTEndian_SwapBE16(0x0440),
  366. Lao_LaoPDR = SkTEndian_SwapBE16(0x0454),
  367. Latvian_Latvia = SkTEndian_SwapBE16(0x0426),
  368. Lithuanian_Lithuania = SkTEndian_SwapBE16(0x0427),
  369. LowerSorbian_Germany = SkTEndian_SwapBE16(0x082E),
  370. Luxembourgish_Luxembourg = SkTEndian_SwapBE16(0x046E),
  371. MacedonianFYROM_FormerYugoslavRepublicOfMacedonia = SkTEndian_SwapBE16(0x042F),
  372. Malay_BruneiDarussalam = SkTEndian_SwapBE16(0x083E),
  373. Malay_Malaysia = SkTEndian_SwapBE16(0x043E),
  374. Malayalam_India = SkTEndian_SwapBE16(0x044C),
  375. Maltese_Malta = SkTEndian_SwapBE16(0x043A),
  376. Maori_NewZealand = SkTEndian_SwapBE16(0x0481),
  377. Mapudungun_Chile = SkTEndian_SwapBE16(0x047A),
  378. Marathi_India = SkTEndian_SwapBE16(0x044E),
  379. Mohawk_Mohawk = SkTEndian_SwapBE16(0x047C),
  380. MongolianCyrillic_Mongolia = SkTEndian_SwapBE16(0x0450),
  381. MongolianTraditional_PeoplesRepublicOfChina = SkTEndian_SwapBE16(0x0850),
  382. Nepali_Nepal = SkTEndian_SwapBE16(0x0461),
  383. NorwegianBokmal_Norway = SkTEndian_SwapBE16(0x0414),
  384. NorwegianNynorsk_Norway = SkTEndian_SwapBE16(0x0814),
  385. Occitan_France = SkTEndian_SwapBE16(0x0482),
  386. Odia_India = SkTEndian_SwapBE16(0x0448),
  387. Pashto_Afghanistan = SkTEndian_SwapBE16(0x0463),
  388. Polish_Poland = SkTEndian_SwapBE16(0x0415),
  389. Portuguese_Brazil = SkTEndian_SwapBE16(0x0416),
  390. Portuguese_Portugal = SkTEndian_SwapBE16(0x0816),
  391. Punjabi_India = SkTEndian_SwapBE16(0x0446),
  392. Quechua_Bolivia = SkTEndian_SwapBE16(0x046B),
  393. Quechua_Ecuador = SkTEndian_SwapBE16(0x086B),
  394. Quechua_Peru = SkTEndian_SwapBE16(0x0C6B),
  395. Romanian_Romania = SkTEndian_SwapBE16(0x0418),
  396. Romansh_Switzerland = SkTEndian_SwapBE16(0x0417),
  397. Russian_Russia = SkTEndian_SwapBE16(0x0419),
  398. SamiInari_Finland = SkTEndian_SwapBE16(0x243B),
  399. SamiLule_Norway = SkTEndian_SwapBE16(0x103B),
  400. SamiLule_Sweden = SkTEndian_SwapBE16(0x143B),
  401. SamiNorthern_Finland = SkTEndian_SwapBE16(0x0C3B),
  402. SamiNorthern_Norway = SkTEndian_SwapBE16(0x043B),
  403. SamiNorthern_Sweden = SkTEndian_SwapBE16(0x083B),
  404. SamiSkolt_Finland = SkTEndian_SwapBE16(0x203B),
  405. SamiSouthern_Norway = SkTEndian_SwapBE16(0x183B),
  406. SamiSouthern_Sweden = SkTEndian_SwapBE16(0x1C3B),
  407. Sanskrit_India = SkTEndian_SwapBE16(0x044F),
  408. SerbianCyrillic_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x1C1A),
  409. SerbianCyrillic_Serbia = SkTEndian_SwapBE16(0x0C1A),
  410. SerbianLatin_BosniaAndHerzegovina = SkTEndian_SwapBE16(0x181A),
  411. SerbianLatin_Serbia = SkTEndian_SwapBE16(0x081A),
  412. SesothoSaLeboa_SouthAfrica = SkTEndian_SwapBE16(0x046C),
  413. Setswana_SouthAfrica = SkTEndian_SwapBE16(0x0432),
  414. Sinhala_SriLanka = SkTEndian_SwapBE16(0x045B),
  415. Slovak_Slovakia = SkTEndian_SwapBE16(0x041B),
  416. Slovenian_Slovenia = SkTEndian_SwapBE16(0x0424),
  417. Spanish_Argentina = SkTEndian_SwapBE16(0x2C0A),
  418. Spanish_Bolivia = SkTEndian_SwapBE16(0x400A),
  419. Spanish_Chile = SkTEndian_SwapBE16(0x340A),
  420. Spanish_Colombia = SkTEndian_SwapBE16(0x240A),
  421. Spanish_CostaRica = SkTEndian_SwapBE16(0x140A),
  422. Spanish_DominicanRepublic = SkTEndian_SwapBE16(0x1C0A),
  423. Spanish_Ecuador = SkTEndian_SwapBE16(0x300A),
  424. Spanish_ElSalvador = SkTEndian_SwapBE16(0x440A),
  425. Spanish_Guatemala = SkTEndian_SwapBE16(0x100A),
  426. Spanish_Honduras = SkTEndian_SwapBE16(0x480A),
  427. Spanish_Mexico = SkTEndian_SwapBE16(0x080A),
  428. Spanish_Nicaragua = SkTEndian_SwapBE16(0x4C0A),
  429. Spanish_Panama = SkTEndian_SwapBE16(0x180A),
  430. Spanish_Paraguay = SkTEndian_SwapBE16(0x3C0A),
  431. Spanish_Peru = SkTEndian_SwapBE16(0x280A),
  432. Spanish_PuertoRico = SkTEndian_SwapBE16(0x500A),
  433. SpanishModernSort_Spain = SkTEndian_SwapBE16(0x0C0A),
  434. SpanishTraditionalSort_Spain = SkTEndian_SwapBE16(0x040A),
  435. Spanish_UnitedStates = SkTEndian_SwapBE16(0x540A),
  436. Spanish_Uruguay = SkTEndian_SwapBE16(0x380A),
  437. Spanish_Venezuela = SkTEndian_SwapBE16(0x200A),
  438. Sweden_Finland = SkTEndian_SwapBE16(0x081D),
  439. Swedish_Sweden = SkTEndian_SwapBE16(0x041D),
  440. Syriac_Syria = SkTEndian_SwapBE16(0x045A),
  441. TajikCyrillic_Tajikistan = SkTEndian_SwapBE16(0x0428),
  442. TamazightLatin_Algeria = SkTEndian_SwapBE16(0x085F),
  443. Tamil_India = SkTEndian_SwapBE16(0x0449),
  444. Tatar_Russia = SkTEndian_SwapBE16(0x0444),
  445. Telugu_India = SkTEndian_SwapBE16(0x044A),
  446. Thai_Thailand = SkTEndian_SwapBE16(0x041E),
  447. Tibetan_PRC = SkTEndian_SwapBE16(0x0451),
  448. Turkish_Turkey = SkTEndian_SwapBE16(0x041F),
  449. Turkmen_Turkmenistan = SkTEndian_SwapBE16(0x0442),
  450. Uighur_PRC = SkTEndian_SwapBE16(0x0480),
  451. Ukrainian_Ukraine = SkTEndian_SwapBE16(0x0422),
  452. UpperSorbian_Germany = SkTEndian_SwapBE16(0x042E),
  453. Urdu_IslamicRepublicOfPakistan = SkTEndian_SwapBE16(0x0420),
  454. UzbekCyrillic_Uzbekistan = SkTEndian_SwapBE16(0x0843),
  455. UzbekLatin_Uzbekistan = SkTEndian_SwapBE16(0x0443),
  456. Vietnamese_Vietnam = SkTEndian_SwapBE16(0x042A),
  457. Welsh_UnitedKingdom = SkTEndian_SwapBE16(0x0452),
  458. Wolof_Senegal = SkTEndian_SwapBE16(0x0488),
  459. Yakut_Russia = SkTEndian_SwapBE16(0x0485),
  460. Yi_PRC = SkTEndian_SwapBE16(0x0478),
  461. Yoruba_Nigeria = SkTEndian_SwapBE16(0x046A),
  462. } value;
  463. } windows;
  464. } languageID;
  465. /** NameIDs <= 0xFF are predefined. Those > 0xFF are font specific. */
  466. union NameID {
  467. /** A font specific name id which should be greater than 0xFF. */
  468. SK_OT_USHORT fontSpecific;
  469. struct Predefined {
  470. enum Value : SK_OT_USHORT {
  471. CopyrightNotice = SkTEndian_SwapBE16(0),
  472. FontFamilyName = SkTEndian_SwapBE16(1),
  473. FontSubfamilyName = SkTEndian_SwapBE16(2),
  474. UniqueFontIdentifier = SkTEndian_SwapBE16(3),
  475. FullFontName = SkTEndian_SwapBE16(4),
  476. VersionString = SkTEndian_SwapBE16(5), //Version <number>.<number>
  477. PostscriptName = SkTEndian_SwapBE16(6), //See spec for constraints.
  478. Trademark = SkTEndian_SwapBE16(7),
  479. ManufacturerName = SkTEndian_SwapBE16(8),
  480. Designer = SkTEndian_SwapBE16(9),
  481. Description = SkTEndian_SwapBE16(10),
  482. URLVendor = SkTEndian_SwapBE16(11),
  483. URLDesigner = SkTEndian_SwapBE16(12),
  484. LicenseDescription = SkTEndian_SwapBE16(13),
  485. LicenseInfoURL = SkTEndian_SwapBE16(14),
  486. PreferredFamily = SkTEndian_SwapBE16(16),
  487. PreferredSubfamily = SkTEndian_SwapBE16(17),
  488. CompatibleFullName = SkTEndian_SwapBE16(18),
  489. SampleText = SkTEndian_SwapBE16(19),
  490. PostscriptCIDFindfontName = SkTEndian_SwapBE16(20),
  491. WWSFamilyName = SkTEndian_SwapBE16(21),
  492. WWSSubfamilyName = SkTEndian_SwapBE16(22),
  493. } value;
  494. } predefined;
  495. } nameID;
  496. /** The length of the string in SK_OT_BYTEs. */
  497. SK_OT_USHORT length;
  498. /** Offset in SK_OT_BYTEs from start of string storage area
  499. * (see SkOTTableName::stringOffset).
  500. */
  501. SK_OT_USHORT offset;
  502. }; //nameRecord[count];
  503. struct Format1Ext {
  504. /** The number of languageTagRecords which follow. */
  505. SK_OT_USHORT langTagCount;
  506. /** The encoding of a langTagRecord string is always UTF-16BE.
  507. * The content should follow IETF specification BCP 47.
  508. */
  509. struct LangTagRecord {
  510. /** The length of the string in SK_OT_BYTEs. */
  511. SK_OT_USHORT length;
  512. /** Offset in SK_OT_BYTEs from start of string storage area
  513. * (see SkOTTableName::stringOffset).
  514. */
  515. SK_OT_USHORT offset;
  516. }; //langTagRecord[langTagCount]
  517. }; //format1ext (if format == format_1)
  518. class Iterator {
  519. public:
  520. Iterator(const uint8_t* nameTable, size_t size)
  521. : fNameTable(nameTable), fNameTableSize(size), fIndex(0), fType(-1) { }
  522. Iterator(const uint8_t* nameTable, size_t size, SK_OT_USHORT type)
  523. : fNameTable(nameTable), fNameTableSize(size), fIndex(0), fType(type)
  524. { }
  525. void reset(SK_OT_USHORT type) {
  526. fIndex = 0;
  527. fType = type;
  528. }
  529. struct Record {
  530. SkString name;
  531. SkString language;
  532. SK_OT_USHORT type;
  533. };
  534. bool next(Record&);
  535. private:
  536. const uint8_t* fNameTable;
  537. const size_t fNameTableSize;
  538. size_t fIndex;
  539. int fType;
  540. };
  541. };
  542. #pragma pack(pop)
  543. static_assert(sizeof(SkOTTableName) == 6, "sizeof_SkOTTableName_not_6");
  544. static_assert(sizeof(SkOTTableName::Format1Ext) == 2, "sizeof_SkOTTableNameF1_not_2");
  545. static_assert(sizeof(SkOTTableName::Format1Ext::LangTagRecord) == 4, "sizeof_SkOTTableNameLangTagRecord_not_4");
  546. static_assert(sizeof(SkOTTableName::Record) == 12, "sizeof_SkOTTableNameRecord_not_12");
  547. #endif