use std::collections::HashMap;
pub fn get_gid_to_unicode_map(font_family: &str) -> Option<HashMap<u16, u32>> {
match font_family {
"calibri" => {
let mut map = standard_glyph_map();
for (gid, unicode) in CALIBRI_SUPPLEMENT {
map.insert(*gid, *unicode);
}
Some(map)
}
"tahoma" | "verdana" | "arial" | "trebuchet ms" | "trebuchetms" | "centurygothic"
| "century gothic" | "comicsansms" | "comic sans ms" | "consolas" | "georgia"
| "impact" | "lucidaconsole" | "lucida console" | "palatinolinotype"
| "palatino linotype" | "segoeui" | "segoe ui" | "timesnewroman" | "times new roman"
| "couriernew" | "courier new" | "cambria" | "candara" | "constantia" | "corbel" => {
Some(standard_glyph_map())
}
"arialblack" | "arial black" => {
let mut map = standard_glyph_map();
for (gid, unicode) in ARIAL_BLACK_SUPPLEMENT {
map.insert(*gid, *unicode);
}
Some(map)
}
_ => Some(standard_glyph_map()),
}
}
fn standard_glyph_map() -> HashMap<u16, u32> {
let mut m = HashMap::with_capacity(STANDARD_GLYPHS.len());
for (gid, unicode) in STANDARD_GLYPHS {
m.insert(*gid, *unicode);
}
m
}
static STANDARD_GLYPHS: &[(u16, u32)] = &[
(2, 10),
(3, 32),
(4, 33),
(5, 34),
(6, 35),
(7, 36),
(8, 37),
(9, 38),
(10, 39),
(11, 40),
(12, 41),
(13, 42),
(14, 43),
(15, 44),
(16, 45),
(17, 46),
(18, 47),
(19, 48),
(20, 49),
(21, 50),
(22, 51),
(23, 52),
(24, 53),
(25, 54),
(26, 55),
(27, 56),
(28, 57),
(29, 58),
(30, 894),
(31, 60),
(32, 61),
(33, 62),
(34, 63),
(35, 64),
(36, 65),
(37, 66),
(38, 67),
(39, 68),
(40, 69),
(41, 70),
(42, 71),
(43, 72),
(44, 73),
(45, 74),
(46, 75),
(47, 76),
(48, 77),
(49, 78),
(50, 79),
(51, 80),
(52, 81),
(53, 82),
(54, 83),
(55, 84),
(56, 85),
(57, 86),
(58, 87),
(59, 88),
(60, 89),
(61, 90),
(62, 91),
(63, 92),
(64, 93),
(65, 94),
(66, 95),
(67, 96),
(68, 97),
(69, 98),
(70, 99),
(71, 100),
(72, 101),
(73, 102),
(74, 103),
(75, 104),
(76, 105),
(77, 106),
(78, 107),
(79, 108),
(80, 109),
(81, 110),
(82, 111),
(83, 112),
(84, 113),
(85, 114),
(86, 115),
(87, 116),
(88, 117),
(89, 118),
(90, 119),
(91, 120),
(92, 121),
(93, 122),
(94, 123),
(95, 124),
(96, 125),
(97, 126),
(98, 196),
(99, 197),
(100, 199),
(101, 201),
(102, 209),
(103, 214),
(104, 220),
(105, 225),
(106, 224),
(107, 226),
(108, 228),
(109, 227),
(110, 229),
(111, 231),
(112, 233),
(113, 232),
(114, 234),
(115, 235),
(116, 237),
(117, 236),
(118, 238),
(119, 239),
(120, 241),
(121, 243),
(122, 242),
(123, 244),
(124, 246),
(125, 245),
(126, 250),
(127, 249),
(128, 251),
(129, 252),
(130, 8224),
(131, 176),
(132, 162),
(133, 163),
(134, 167),
(135, 8226),
(136, 182),
(137, 223),
(138, 174),
(139, 169),
(140, 8482),
(141, 180),
(142, 168),
(143, 8800),
(144, 198),
(145, 216),
(146, 8734),
(147, 177),
(148, 8804),
(149, 8805),
(150, 165),
(151, 181),
(152, 8706),
(153, 8721),
(154, 8719),
(156, 8747),
(157, 170),
(158, 186),
(159, 8486),
(160, 230),
(161, 248),
(162, 191),
(163, 161),
(164, 172),
(165, 8730),
(166, 402),
(167, 8776),
(168, 8710),
(169, 171),
(170, 187),
(171, 8230),
(179, 8220),
(180, 8221),
(181, 8216),
(182, 8217),
(200, 193),
(203, 205),
(207, 211),
(210, 218),
(223, 711),
(224, 321),
(225, 322),
(226, 352),
(227, 353),
(228, 381),
(229, 382),
(233, 221),
(234, 253),
(252, 263),
(253, 268),
(254, 269),
(258, 258),
(260, 260),
(261, 261),
(265, 280),
(266, 281),
(267, 282),
(268, 283),
(269, 313),
(275, 323),
(276, 324),
(277, 327),
(278, 328),
(279, 336),
(280, 337),
(281, 338),
(282, 339),
(283, 344),
(284, 345),
(285, 346),
(286, 347),
(287, 350),
(288, 351),
(289, 354),
(290, 355),
(291, 366),
(292, 367),
(293, 368),
(294, 369),
(295, 377),
(296, 378),
(297, 379),
(298, 380),
(305, 963),
(306, 964),
(307, 966),
(308, 8215),
(309, 8252),
(310, 8319),
(311, 8359),
(312, 8592),
(313, 8593),
(337, 9552),
(493, 1039),
(494, 1040),
(570, 1040),
(571, 1041),
(572, 1042),
(573, 1043),
(574, 1044),
(575, 1045),
(576, 1046),
(577, 1047),
(578, 1048),
(579, 1049),
(580, 1050),
(581, 1051),
(582, 1052),
(583, 1053),
(584, 1054),
(585, 1055),
(586, 1056),
(587, 1057),
(588, 1058),
(589, 1059),
(590, 1060),
(591, 1061),
(592, 1062),
(593, 1063),
(594, 1064),
(595, 1065),
(596, 1066),
(597, 1067),
(598, 1068),
(599, 1069),
(600, 1070),
(601, 1071),
(602, 1072),
(603, 1073),
(604, 1074),
(605, 1075),
(606, 1076),
(607, 1077),
(608, 1078),
(609, 1079),
(610, 1080),
(611, 1081),
(612, 1082),
(613, 1083),
(614, 1084),
(615, 1085),
(616, 1086),
(617, 1087),
(618, 1088),
(619, 1089),
(620, 1090),
(621, 1091),
(622, 1092),
(623, 1093),
(624, 1094),
(625, 1095),
(626, 1096),
(627, 1097),
(628, 1098),
(629, 1099),
(630, 1100),
(631, 1101),
(632, 1102),
(633, 1103),
(672, 1488),
(673, 1489),
(674, 1490),
(675, 1491),
(676, 1492),
(677, 1493),
(678, 1494),
(679, 1495),
(680, 1496),
(681, 1497),
(682, 1498),
(683, 1499),
(684, 1500),
(685, 1501),
(686, 1502),
(687, 1503),
(688, 1504),
(689, 1505),
(690, 1506),
(691, 1507),
(692, 1508),
(693, 1509),
(694, 1510),
(695, 1511),
(696, 1512),
(697, 1513),
(698, 1514),
(705, 1524),
(706, 8362),
(710, 64288),
(711, 64298),
(759, 1617),
(761, 1776),
(763, 1778),
(775, 1652),
(777, 1764),
(778, 1780),
(779, 1781),
(780, 1782),
(782, 771),
(783, 64726),
(786, 8363),
(788, 8532),
(790, 768),
(791, 769),
(792, 768),
(795, 803),
(797, 64336),
(798, 64337),
(799, 64342),
(800, 64343),
(801, 64344),
(802, 64345),
(803, 64362),
(804, 64363),
(805, 64364),
(2424, 7821),
(2425, 7822),
(2426, 7823),
(2427, 7824),
(2428, 7825),
(2429, 7826),
(2430, 7827),
(2433, 7682),
(2678, 8045),
(2679, 8046),
(2830, 1552),
(2838, 686),
(2840, 751),
(2842, 753),
(2843, 754),
(2844, 755),
(2846, 757),
(2856, 767),
(2857, 848),
(2858, 849),
(2862, 853),
(2863, 854),
(2864, 855),
(2865, 861),
(2866, 862),
(2906, 7460),
(2908, 7462),
(2909, 7463),
(2910, 7464),
(2912, 7466),
(2913, 7467),
(2914, 7468),
(2916, 7470),
(2917, 7471),
(2918, 7472),
(2920, 7474),
(2921, 7475),
(2922, 7476),
(2924, 7478),
(2925, 7479),
(2926, 7480),
(2928, 7482),
(2929, 7483),
(2930, 7484),
(2932, 7486),
(2933, 7487),
(2934, 7488),
(2936, 7490),
(2937, 7491),
(2938, 7492),
(2940, 7494),
(2941, 7495),
(2942, 7496),
(2944, 7498),
(2946, 7500),
(2948, 7502),
(2950, 7504),
(2951, 7505),
(2952, 7506),
(2954, 7508),
(2955, 7509),
(2956, 7510),
(2958, 7512),
(2959, 7513),
(2960, 7514),
(2962, 7516),
(2963, 7517),
(2964, 7518),
(2966, 7520),
(2967, 7521),
(2968, 7522),
(2970, 7524),
(2971, 7525),
(2972, 7526),
(2974, 7528),
(2975, 7529),
(2976, 7530),
(2978, 1537),
(2979, 1538),
(2980, 1539),
(2982, 1549),
(2983, 1551),
(2984, 1552),
(2986, 1554),
(2987, 1555),
(2988, 1556),
(2990, 1623),
(2991, 1624),
(2995, 1775),
(2999, 1791),
(3002, 64290),
(3003, 64291),
(3004, 64292),
(3006, 64294),
(3007, 64295),
(3008, 64296),
(3011, 1900),
(3014, 8223),
(3015, 8244),
(3017, 7532),
(3018, 7533),
(3019, 7534),
(3075, 7590),
(3076, 7591),
(3079, 7594),
(3080, 7595),
(3083, 7598),
(3084, 7599),
(3087, 7602),
(3088, 7603),
(3091, 7606),
(3092, 7607),
(3095, 7610),
(3096, 7611),
(3099, 7614),
(3100, 7615),
(3103, 7618),
(3104, 7619),
(3107, 8337),
(3108, 8338),
(3116, 1884),
(3119, 1885),
(3120, 1885),
(3123, 1886),
(3124, 1886),
(3127, 1887),
(3128, 1887),
(3131, 1888),
(3132, 1888),
(3135, 1889),
(3136, 1889),
(3139, 1890),
(3140, 1890),
(3143, 1891),
(3144, 1891),
(3147, 1892),
(3148, 1892),
(3153, 580),
(3154, 581),
(3157, 584),
(3158, 585),
(3161, 588),
(3162, 589),
(3165, 891),
(3166, 892),
(3169, 1274),
(3170, 1275),
(3173, 1278),
(3174, 1279),
(3181, 7622),
(3182, 7623),
(3282, 11799),
(3316, 578),
(3379, 42785),
(3393, 1159),
(3416, 8377),
];
static ARIAL_BLACK_SUPPLEMENT: &[(u16, u32)] = &[
(227, 322), (264, 261), (291, 346), ];
static CALIBRI_SUPPLEMENT: &[(u16, u32)] = &[
(1, 32),
(4, 65),
(5, 192),
(6, 193),
(9, 196),
(17, 66),
(18, 67),
(21, 268),
(24, 68),
(28, 69),
(29, 200),
(30, 201),
(32, 282),
(38, 70),
(39, 71),
(44, 72),
(47, 73),
(48, 204),
(49, 205),
(58, 74),
(60, 75),
(62, 76),
(68, 77),
(69, 78),
(75, 79),
(76, 210),
(80, 214),
(87, 80),
(89, 81),
(90, 82),
(92, 344),
(94, 83),
(97, 352),
(100, 84),
(104, 85),
(109, 220),
(115, 86),
(116, 87),
(121, 88),
(122, 89),
(124, 221),
(127, 90),
(129, 381),
(258, 97),
(259, 224),
(260, 225),
(263, 228),
(268, 261),
(271, 98),
(272, 99),
(273, 263),
(275, 269),
(282, 100),
(286, 101),
(287, 232),
(288, 233),
(290, 283),
(295, 281),
(296, 102),
(336, 103),
(346, 104),
(349, 105),
(350, 236),
(351, 237),
(361, 106),
(364, 107),
(367, 108),
(371, 322),
(373, 109),
(374, 110),
(381, 111),
(382, 242),
(383, 243),
(386, 246),
(393, 112),
(395, 113),
(396, 114),
(398, 345),
(400, 115),
(401, 347),
(403, 353),
(410, 116),
(437, 117),
(442, 252),
(448, 118),
(449, 119),
(454, 120),
(455, 121),
(457, 253),
(460, 122),
(462, 382),
(463, 380),
(853, 44),
(855, 58),
(856, 46),
(876, 47),
(878, 45),
(882, 45),
(894, 40),
(895, 41),
(896, 91),
(897, 93),
(923, 64),
(940, 163),
(1004, 48),
(1005, 49),
(1006, 50),
(1007, 51),
(1008, 52),
(1009, 53),
(1010, 54),
(1011, 55),
(1012, 56),
(1013, 57),
(1081, 37),
(1085, 43),
(1086, 45),
];