1 /* $NetBSD: hpuni.cpp,v 1.1.1.1 2016/01/13 18:41:49 christos Exp $ */ 2 3 // -*- C++ -*- 4 /* Copyright (C) 2003, 2004 Free Software Foundation, Inc. 5 Written by Jeff Conrad (jeff_conrad@msn.com) 6 7 This file is part of groff. 8 9 groff is free software; you can redistribute it and/or modify it under 10 the terms of the GNU General Public License as published by the Free 11 Software Foundation; either version 2, or (at your option) any later 12 version. 13 14 groff is distributed in the hope that it will be useful, but WITHOUT ANY 15 WARRANTY; without even the implied warranty of MERCHANTABILITY or 16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 17 for more details. 18 19 You should have received a copy of the GNU General Public License along 20 with groff; see the file COPYING. If not, write to the Free Software 21 Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ 22 23 #include "lib.h" 24 #include "stringclass.h" 25 #include "ptable.h" 26 27 #include "unicode.h" 28 29 struct hp_msl_to_unicode { 30 char *value; 31 }; 32 33 declare_ptable(hp_msl_to_unicode) 34 implement_ptable(hp_msl_to_unicode) 35 36 PTABLE(hp_msl_to_unicode) hp_msl_to_unicode_table; 37 38 struct S { 39 const char *key; 40 const char *value; 41 } hp_msl_to_unicode_list[] = { 42 { "1", "0021", }, // Exclamation Mark 43 { "2", "0022", }, // Neutral Double Quote 44 { "3", "0023", }, // Number Sign 45 { "4", "0024", }, // Dollar Sign 46 { "5", "0025", }, // Per Cent Sign 47 { "6", "0026", }, // Ampersand 48 { "8", "2019", }, // Single Close Quote (9) 49 { "9", "0028", }, // Left Parenthesis 50 { "10", "0029", }, // Right Parenthesis 51 { "11", "002A", }, // Asterisk 52 { "12", "002B", }, // Plus Sign 53 { "13", "002C", }, // Comma, or Decimal Separator 54 { "14", "002D", }, // Hyphen 55 { "15", "002E", }, // Period, or Full Stop 56 { "16", "002F", }, // Solidus, or Slash 57 { "17", "0030", }, // Numeral Zero 58 { "18", "0031", }, // Numeral One 59 { "19", "0032", }, // Numeral Two 60 { "20", "0033", }, // Numeral Three 61 { "21", "0034", }, // Numeral Four 62 { "22", "0035", }, // Numeral Five 63 { "23", "0036", }, // Numeral Six 64 { "24", "0037", }, // Numeral Seven 65 { "25", "0038", }, // Numeral Eight 66 { "26", "0039", }, // Numeral Nine 67 { "27", "003A", }, // Colon 68 { "28", "003B", }, // Semicolon 69 { "29", "003C", }, // Less Than Sign 70 { "30", "003D", }, // Equals Sign 71 { "31", "003E", }, // Greater Than Sign 72 { "32", "003F", }, // Question Mark 73 { "33", "0040", }, // Commercial At 74 { "34", "0041", }, // Uppercase A 75 { "35", "0042", }, // Uppercase B 76 { "36", "0043", }, // Uppercase C 77 { "37", "0044", }, // Uppercase D 78 { "38", "0045", }, // Uppercase E 79 { "39", "0046", }, // Uppercase F 80 { "40", "0047", }, // Uppercase G 81 { "41", "0048", }, // Uppercase H 82 { "42", "0049", }, // Uppercase I 83 { "43", "004A", }, // Uppercase J 84 { "44", "004B", }, // Uppercase K 85 { "45", "004C", }, // Uppercase L 86 { "46", "004D", }, // Uppercase M 87 { "47", "004E", }, // Uppercase N 88 { "48", "004F", }, // Uppercase O 89 { "49", "0050", }, // Uppercase P 90 { "50", "0051", }, // Uppercase Q 91 { "51", "0052", }, // Uppercase R 92 { "52", "0053", }, // Uppercase S 93 { "53", "0054", }, // Uppercase T 94 { "54", "0055", }, // Uppercase U 95 { "55", "0056", }, // Uppercase V 96 { "56", "0057", }, // Uppercase W 97 { "57", "0058", }, // Uppercase X 98 { "58", "0059", }, // Uppercase Y 99 { "59", "005A", }, // Uppercase Z 100 { "60", "005B", }, // Left Bracket 101 { "61", "005C", }, // Reverse Solidus, or Backslash 102 { "62", "005D", }, // Right Bracket 103 { "63", "005E", }, // Circumflex, Exponent, or Pointer 104 { "64", "005F", }, // Underline or Underscore Character 105 { "66", "2018", }, // Single Open Quote (6) 106 { "67", "0061", }, // Lowercase A 107 { "68", "0062", }, // Lowercase B 108 { "69", "0063", }, // Lowercase C 109 { "70", "0064", }, // Lowercase D 110 { "71", "0065", }, // Lowercase E 111 { "72", "0066", }, // Lowercase F 112 { "73", "0067", }, // Lowercase G 113 { "74", "0068", }, // Lowercase H 114 { "75", "0069", }, // Lowercase I 115 { "76", "006A", }, // Lowercase J 116 { "77", "006B", }, // Lowercase K 117 { "78", "006C", }, // Lowercase L 118 { "79", "006D", }, // Lowercase M 119 { "80", "006E", }, // Lowercase N 120 { "81", "006F", }, // Lowercase O 121 { "82", "0070", }, // Lowercase P 122 { "83", "0071", }, // Lowercase Q 123 { "84", "0072", }, // Lowercase R 124 { "85", "0073", }, // Lowercase S 125 { "86", "0074", }, // Lowercase T 126 { "87", "0075", }, // Lowercase U 127 { "88", "0076", }, // Lowercase V 128 { "89", "0077", }, // Lowercase W 129 { "90", "0078", }, // Lowercase X 130 { "91", "0079", }, // Lowercase Y 131 { "92", "007A", }, // Lowercase Z 132 { "93", "007B", }, // Left Brace 133 { "94", "007C", }, // Long Vertical Mark 134 { "95", "007D", }, // Right Brace 135 { "96", "007E", }, // One Wavy Line Approximate 136 { "97", "2592", }, // Medium Shading Character 137 { "99", "00C0", }, // Uppercase A Grave 138 { "100", "00C2", }, // Uppercase A Circumflex 139 { "101", "00C8", }, // Uppercase E Grave 140 { "102", "00CA", }, // Uppercase E Circumflex 141 { "103", "00CB", }, // Uppercase E Dieresis 142 { "104", "00CE", }, // Uppercase I Circumflex 143 { "105", "00CF", }, // Uppercase I Dieresis 144 { "106", "00B4", }, // Lowercase Acute Accent (Spacing) 145 { "107", "0060", }, // Lowercase Grave Accent (Spacing) 146 { "108", "02C6", }, // Lowercase Circumflex Accent (Spacing) 147 { "109", "00A8", }, // Lowercase Dieresis Accent (Spacing) 148 { "110", "02DC", }, // Lowercase Tilde Accent (Spacing) 149 { "111", "00D9", }, // Uppercase U Grave 150 { "112", "00DB", }, // Uppercase U Circumflex 151 { "113", "00AF", }, // Overline, or Overscore Character 152 { "114", "00DD", }, // Uppercase Y Acute 153 { "115", "00FD", }, // Lowercase Y Acute 154 { "116", "00B0", }, // Degree Sign 155 { "117", "00C7", }, // Uppercase C Cedilla 156 { "118", "00E7", }, // Lowercase C Cedilla 157 { "119", "00D1", }, // Uppercase N Tilde 158 { "120", "00F1", }, // Lowercase N Tilde 159 { "121", "00A1", }, // Inverted Exclamation 160 { "122", "00BF", }, // Inverted Question Mark 161 { "123", "00A4", }, // Currency Symbol 162 { "124", "00A3", }, // Pound Sterling Sign 163 { "125", "00A5", }, // Yen Sign 164 { "126", "00A7", }, // Section Mark 165 { "127", "0192", }, // Florin Sign 166 { "128", "00A2", }, // Cent Sign 167 { "129", "00E2", }, // Lowercase A Circumflex 168 { "130", "00EA", }, // Lowercase E Circumflex 169 { "131", "00F4", }, // Lowercase O Circumflex 170 { "132", "00FB", }, // Lowercase U Circumflex 171 { "133", "00E1", }, // Lowercase A Acute 172 { "134", "00E9", }, // Lowercase E Acute 173 { "135", "00F3", }, // Lowercase O Acute 174 { "136", "00FA", }, // Lowercase U Acute 175 { "137", "00E0", }, // Lowercase A Grave 176 { "138", "00E8", }, // Lowercase E Grave 177 { "139", "00F2", }, // Lowercase O Grave 178 { "140", "00F9", }, // Lowercase U Grave 179 { "141", "00E4", }, // Lowercase A Dieresis 180 { "142", "00EB", }, // Lowercase E Dieresis 181 { "143", "00F6", }, // Lowercase O Dieresis 182 { "144", "00FC", }, // Lowercase U Dieresis 183 { "145", "00C5", }, // Uppercase A Ring 184 { "146", "00EE", }, // Lowercase I Circumflex 185 { "147", "00D8", }, // Uppercase O Oblique 186 { "148", "00C6", }, // Uppercase AE Diphthong 187 { "149", "00E5", }, // Lowercase A Ring 188 { "150", "00ED", }, // Lowercase I Acute 189 { "151", "00F8", }, // Lowercase O Oblique 190 { "152", "00E6", }, // Lowercase AE Diphthong 191 { "153", "00C4", }, // Uppercase A Dieresis 192 { "154", "00EC", }, // Lowercase I Grave 193 { "155", "00D6", }, // Uppercase O Dieresis 194 { "156", "00DC", }, // Uppercase U Dieresis 195 { "157", "00C9", }, // Uppercase E Acute 196 { "158", "00EF", }, // Lowercase I Dieresis 197 { "159", "00DF", }, // Lowercase Es-zet Ligature 198 { "160", "00D4", }, // Uppercase O Circumflex 199 { "161", "00C1", }, // Uppercase A Acute 200 { "162", "00C3", }, // Uppercase A Tilde 201 { "163", "00E3", }, // Lowercase A Tilde 202 { "164", "00D0", }, // Uppercase Eth 203 //{ "164", "0110", }, // Uppercase D-Stroke 204 { "165", "00F0", }, // Lowercase Eth 205 { "166", "00CD", }, // Uppercase I Acute 206 { "167", "00CC", }, // Uppercase I Grave 207 { "168", "00D3", }, // Uppercase O Acute 208 { "169", "00D2", }, // Uppercase O Grave 209 { "170", "00D5", }, // Uppercase O Tilde 210 { "171", "00F5", }, // Lowercase O Tilde 211 { "172", "0160", }, // Uppercase S Hacek 212 { "173", "0161", }, // Lowercase S Hacek 213 { "174", "00DA", }, // Uppercase U Acute 214 { "175", "0178", }, // Uppercase Y Dieresis 215 { "176", "00FF", }, // Lowercase Y Dieresis 216 { "177", "00DE", }, // Uppercase Thorn 217 { "178", "00FE", }, // Lowercase Thorn 218 { "180", "00B5", }, // Lowercase Greek Mu, or Micro 219 { "181", "00B6", }, // Pilcrow, or Paragraph Sign 220 { "182", "00BE", }, // Vulgar Fraction 3/4 221 { "183", "2212", }, // Minus Sign 222 { "184", "00BC", }, // Vulgar Fraction 1/4 223 { "185", "00BD", }, // Vulgar Fraction 1/2 224 { "186", "00AA", }, // Female Ordinal 225 { "187", "00BA", }, // Male Ordinal 226 { "188", "00AB", }, // Left Pointing Double Angle Quote 227 { "189", "25A0", }, // Medium Solid Square Box 228 { "190", "00BB", }, // Right Pointing Double Angle Quote 229 { "191", "00B1", }, // Plus Over Minus Sign 230 { "192", "00A6", }, // Broken Vertical Mark 231 { "193", "00A9", }, // Copyright Sign 232 { "194", "00AC", }, // Not Sign 233 { "195", "00AD", }, // Soft Hyphen 234 { "196", "00AE", }, // Registered Sign 235 { "197", "00B2", }, // Superior Numeral 2 236 { "198", "00B3", }, // Superior Numeral 3 237 { "199", "00B8", }, // Lowercase Cedilla (Spacing) 238 { "200", "00B9", }, // Superior Numeral 1 239 { "201", "00D7", }, // Multiply Sign 240 { "202", "00F7", }, // Divide Sign 241 { "203", "263A", }, // Open Smiling Face 242 { "204", "263B", }, // Solid Smiling Face 243 { "205", "2665", }, // Solid Heart, Card Suit 244 { "206", "2666", }, // Solid Diamond, Card Suit 245 { "207", "2663", }, // Solid Club, Card Suit 246 { "208", "2660", }, // Solid Spade, Card Suit 247 { "209", "25CF", }, // Medium Solid Round Bullet 248 { "210", "25D8", }, // Large Solid square with White Dot 249 { "211", "EFFD", }, // Large Open Round Bullet 250 { "212", "25D9", }, // Large Solid square with White Circle 251 { "213", "2642", }, // Male Symbol 252 { "214", "2640", }, // Female Symbol 253 { "215", "266A", }, // Musical Note 254 { "216", "266B", }, // Pair Of Musical Notes 255 { "217", "263C", }, // Compass, or Eight Pointed Sun 256 { "218", "25BA", }, // Right Solid Arrowhead 257 { "219", "25C4", }, // Left Solid Arrowhead 258 { "220", "2195", }, // Up/Down Arrow 259 { "221", "203C", }, // Double Exclamation Mark 260 { "222", "25AC", }, // Thick Horizontal Mark 261 { "223", "21A8", }, // Up/Down Arrow Baseline 262 { "224", "2191", }, // Up Arrow 263 { "225", "2193", }, // Down Arrow 264 { "226", "2192", }, // Right Arrow 265 { "227", "2190", }, // Left Arrow 266 { "229", "2194", }, // Left/Right Arrow 267 { "230", "25B2", }, // Up Solid Arrowhead 268 { "231", "25BC", }, // Down Solid Arrowhead 269 { "232", "20A7", }, // Pesetas Sign 270 { "233", "2310", }, // Reversed Not Sign 271 { "234", "2591", }, // Light Shading Character 272 { "235", "2593", }, // Dark Shading Character 273 { "236", "2502", }, // Box Draw Line, Vert. 1 274 { "237", "2524", }, // Box Draw Right Tee, Vert. 1 Horiz. 1 275 { "238", "2561", }, // Box Draw Right Tee, Vert. 1 Horiz. 2 276 { "239", "2562", }, // Box Draw Right Tee, Vert. 2 Horiz. 1 277 { "240", "2556", }, // Box Draw Upper Right Corner, Vert. 2 Horiz. 1 278 { "241", "2555", }, // Box Draw Upper Right Corner, Vert. 1 Horiz. 2 279 { "242", "2563", }, // Box Draw Right Tee, Vert. 2 Horiz. 2 280 { "243", "2551", }, // Box Draw Lines, Vert. 2 281 { "244", "2557", }, // Box Draw Upper Right Corner, Vert. 2 Horiz. 2 282 { "245", "255D", }, // Box Draw Lower Right Corner, Vert. 2 Horiz. 2 283 { "246", "255C", }, // Box Draw Lower Right Corner, Vert. 2 Horiz. 1 284 { "247", "255B", }, // Box Draw Lower Right Corner, Vert. 1 Horiz. 2 285 { "248", "2510", }, // Box Draw Upper Right Corner, Vert. 1, Horiz. 1 286 { "249", "2514", }, // Box Draw Lower Left Corner, Vert. 1, Horiz. 1 287 { "250", "2534", }, // Box Draw Bottom Tee, Vert. 1 Horiz. 1 288 { "251", "252C", }, // Box Draw Top Tee, Vert. 1 Horiz. 1 289 { "252", "251C", }, // Box Draw Left Tee, Vert. 1 Horiz. 1 290 { "253", "2500", }, // Box Draw Line, Horiz. 1 291 { "254", "253C", }, // Box Draw Cross, Vert. 1 Horiz. 1 292 { "255", "255E", }, // Box Draw Left Tee, Vert. 1 Horiz. 2 293 { "256", "255F", }, // Box Draw Left Tee, Vert. 2 Horz. 1 294 { "257", "255A", }, // Box Draw Lower Left Corner, Vert. 2 Horiz. 2 295 { "258", "2554", }, // Box Draw Upper Left Corner, Vert. 2 Horiz. 2 296 { "259", "2569", }, // Box Draw Bottom Tee, Vert. 2 Horiz. 2 297 { "260", "2566", }, // Box Draw Top Tee, Vert. 2 Horiz. 2 298 { "261", "2560", }, // Box Draw Left Tee, Vert. 2 Horiz. 2 299 { "262", "2550", }, // Box Draw Lines, Horiz. 2 300 { "263", "256C", }, // Box Draw Cross Open Center, Vert. 2 Horiz. 2 301 { "264", "2567", }, // Box Draw Bottom Tee, Vert. 1 Horiz. 2 302 { "265", "2568", }, // Box Draw Bottom Tee, Vert. 2 Horiz. 1 303 { "266", "2564", }, // Box Draw Top Tee, Vert. 1 Horiz. 2 304 { "267", "2565", }, // Box Draw Top Tee, Vert. 2 Horiz. 1 305 { "268", "2559", }, // Box Draw Lower Left Corner, Vert. 2 Horiz. 1 306 { "269", "2558", }, // Box Draw Lower Left Corner, Vert. 1 Horiz. 2 307 { "270", "2552", }, // Box Draw Upper Left Corner, Vert. 1 Horiz. 2 308 { "271", "2553", }, // Box Draw Upper Left Corner, Vert. 2 Horiz. 1 309 { "272", "256B", }, // Box Draw Cross, Vert. 2 Horiz. 1 310 { "273", "256A", }, // Box Draw Cross, Vert. 1 Horiz. 2 311 { "274", "2518", }, // Box Draw Lower Right Corner, Vert. 1 Horiz. 1 312 { "275", "250C", }, // Box Draw Upper Left Corner, Vert. 1, Horiz. 1 313 { "276", "2588", }, // Solid Full High/Wide 314 { "277", "2584", }, // Bottom Half Solid Rectangle 315 { "278", "258C", }, // Left Half Solid Rectangle 316 { "279", "2590", }, // Right Half Solid Rectangle 317 { "280", "2580", }, // Top Half Solid Rectangle 318 { "290", "2126", }, // Uppercase Greek Omega, or Ohms 319 { "292", "221E", }, // Infinity Symbol 320 { "295", "2229", }, // Set Intersection Symbol 321 { "296", "2261", }, // Exactly Equals Sign 322 { "297", "2265", }, // Greater Than or Equal Sign 323 { "298", "2264", }, // Less Than or Equal Sign 324 { "299", "2320", }, // Top Integral 325 { "300", "2321", }, // Bottom Integral 326 { "301", "2248", }, // Two Wavy Line Approximate Sign 327 //{ "302", "00B7", }, // Middle Dot, or Centered Period (see 2219) 328 //{ "302", "2219", }, // Centered Period, Middle Dot 329 { "302", "2219", }, // Math Dot, Centered Period 330 { "303", "221A", }, // Radical Symbol, Standalone Diagonal 331 { "305", "25AA", }, // Small Solid Square Box 332 { "306", "013F", }, // Uppercase L-Dot 333 { "307", "0140", }, // Lowercase L-Dot 334 { "308", "2113", }, // Litre Symbol 335 { "309", "0149", }, // Lowercase Apostrophe-N 336 { "310", "2032", }, // Prime, Minutes, or Feet Symbol 337 { "311", "2033", }, // Double Prime, Seconds, or Inches Symbol 338 { "312", "2020", }, // Dagger Symbol 339 { "313", "2122", }, // Trademark Sign 340 { "314", "2017", }, // Double Underline Character 341 { "315", "02C7", }, // Lowercase Hacek Accent (Spacing) 342 { "316", "02DA", }, // Lowercase Ring Accent (Spacing) 343 { "317", "EFF9", }, // Uppercase Acute Accent (Spacing) 344 { "318", "EFF8", }, // Uppercase Grave Accent (Spacing) 345 { "319", "EFF7", }, // Uppercase Circumflex Accent (Spacing) 346 { "320", "EFF6", }, // Uppercase Dieresis Accent (Spacing) 347 { "321", "EFF5", }, // Uppercase Tilde Accent (Spacing) 348 { "322", "EFF4", }, // Uppercase Hacek Accent (Spacing) 349 { "323", "EFF3", }, // Uppercase Ring Accent (Spacing) 350 { "324", "2215", }, // Vulgar Fraction Bar 351 { "325", "2014", }, // Em Dash 352 { "326", "2013", }, // En Dash 353 { "327", "2021", }, // Double Dagger Symbol 354 { "328", "0131", }, // Lowercase Undotted I 355 { "329", "0027", }, // Neutral Single Quote 356 { "330", "EFF2", }, // Uppercase Cedilla (Spacing) 357 { "331", "2022", }, // Small Solid Round Bullet 358 { "332", "207F", }, // Superior Lowercase N 359 { "333", "2302", }, // Home Plate 360 { "335", "0138", }, // Lowercase Kra 361 { "338", "0166", }, // Uppercase T-Stroke 362 { "339", "0167", }, // Lowercase T-Stroke 363 { "340", "014A", }, // Uppercase Eng 364 { "341", "014B", }, // Lowercase Eng 365 { "342", "0111", }, // Lowercase D-Stroke 366 { "400", "0102", }, // Uppercase A Breve 367 { "401", "0103", }, // Lowercase A Breve 368 { "402", "0100", }, // Uppercase A Macron 369 { "403", "0101", }, // Lowercase A Macron 370 { "404", "0104", }, // Uppercase A Ogonek 371 { "405", "0105", }, // Lowercase A Ogonek 372 { "406", "0106", }, // Uppercase C Acute 373 { "407", "0107", }, // Lowercase C Acute 374 { "410", "010C", }, // Uppercase C Hacek 375 { "411", "010D", }, // Lowercase C Hacek 376 { "414", "010E", }, // Uppercase D Hacek 377 { "415", "010F", }, // Lowercase D Hacek 378 { "416", "011A", }, // Uppercase E Hacek 379 { "417", "011B", }, // Lowercase E Hacek 380 { "418", "0116", }, // Uppercase E Overdot 381 { "419", "0117", }, // Lowercase E Overdot 382 { "420", "0112", }, // Uppercase E Macron 383 { "421", "0113", }, // Lowercase E Macron 384 { "422", "0118", }, // Uppercase E Ogonek 385 { "423", "0119", }, // Lowercase E Ogonek 386 { "428", "0122", }, // Uppercase G Cedilla 387 { "429", "0123", }, // Lowercase G Cedilla 388 { "432", "012E", }, // Uppercase I Ogonek 389 { "433", "012F", }, // Lowercase I Ogonek 390 { "434", "012A", }, // Uppercase I Macron 391 { "435", "012B", }, // Lowercase I Macron 392 { "438", "0136", }, // Uppercase K Cedilla 393 { "439", "0137", }, // Lowercase K Cedilla 394 { "440", "0139", }, // Uppercase L Acute 395 { "441", "013A", }, // Lowercase L Acute 396 { "442", "013D", }, // Uppercase L Hacek 397 { "443", "013E", }, // Lowercase L Hacek 398 { "444", "013B", }, // Uppercase L Cedilla 399 { "445", "013C", }, // Lowercase L Cedilla 400 { "446", "0143", }, // Uppercase N Acute 401 { "447", "0144", }, // Lowercase N Acute 402 { "448", "0147", }, // Uppercase N Hacek 403 { "449", "0148", }, // Lowercase N Hacek 404 { "450", "0145", }, // Uppercase N Cedilla 405 { "451", "0146", }, // Lowercase N Cedilla 406 { "452", "0150", }, // Uppercase O Double Acute 407 { "453", "0151", }, // Lowercase O Double Acute 408 { "454", "014C", }, // Uppercase O Macron 409 { "455", "014D", }, // Lowercase O Macron 410 { "456", "0154", }, // Uppercase R Acute 411 { "457", "0155", }, // Lowercase R Acute 412 { "458", "0158", }, // Uppercase R Hacek 413 { "459", "0159", }, // Lowercase R Hacek 414 { "460", "0156", }, // Uppercase R Cedilla 415 { "461", "0157", }, // Lowercase R Cedilla 416 { "462", "015A", }, // Uppercase S Acute 417 { "463", "015B", }, // Lowercase S Acute 418 { "466", "0164", }, // Uppercase T Hacek 419 { "467", "0165", }, // Lowercase T Hacek 420 { "468", "0162", }, // Uppercase T Cedilla 421 { "469", "0163", }, // Lowercase T Cedilla 422 { "470", "0168", }, // Uppercase U Tilde 423 { "471", "0169", }, // Lowercase U Tilde 424 { "474", "0170", }, // Uppercase U Double Acute 425 { "475", "0171", }, // Lowercase U Double Acute 426 { "476", "016E", }, // Uppercase U Ring 427 { "477", "016F", }, // Lowercase U Ring 428 { "478", "016A", }, // Uppercase U Macron 429 { "479", "016B", }, // Lowercase U Macron 430 { "480", "0172", }, // Uppercase U Ogonek 431 { "481", "0173", }, // Lowercase U Ogonek 432 { "482", "0179", }, // Uppercase Z Acute 433 { "483", "017A", }, // Lowercase Z Acute 434 { "484", "017B", }, // Uppercase Z Overdot 435 { "485", "017C", }, // Lowercase Z Overdot 436 { "486", "0128", }, // Uppercase I Tilde 437 { "487", "0129", }, // Lowercase I Tilde 438 { "500", "EFBF", }, // Radical, Diagonal, Composite 439 { "501", "221D", }, // Proportional To Symbol 440 { "502", "212F", }, // Napierian (italic e) 441 { "503", "03F5", }, // Alternate Lowercase Greek Epsilon 442 //{ "503", "EFEC", }, // Alternate Lowercase Greek Epsilon 443 { "504", "2234", }, // Therefore Symbol 444 { "505", "0393", }, // Uppercase Greek Gamma 445 { "506", "2206", }, // Increment Symbol (Delta) 446 { "507", "0398", }, // Uppercase Greek Theta 447 { "508", "039B", }, // Uppercase Greek Lambda 448 { "509", "039E", }, // Uppercase Greek Xi 449 { "510", "03A0", }, // Uppercase Greek Pi 450 { "511", "03A3", }, // Uppercase Greek Sigma 451 { "512", "03A5", }, // Uppercase Greek Upsilon 452 { "513", "03A6", }, // Uppercase Greek Phi 453 { "514", "03A8", }, // Uppercase Greek Psi 454 { "515", "03A9", }, // Uppercase Greek Omega 455 { "516", "2207", }, // Nabla Symbol (inverted Delta) 456 { "517", "2202", }, // Partial Differential Delta Symbol 457 { "518", "03C2", }, // Lowercase Sigma, Terminal 458 { "519", "2260", }, // Not Equal To Symbol 459 { "520", "EFEB", }, // Underline, Composite 460 { "521", "2235", }, // Because Symbol 461 { "522", "03B1", }, // Lowercase Greek Alpha 462 { "523", "03B2", }, // Lowercase Greek Beta 463 { "524", "03B3", }, // Lowercase Greek Gamma 464 { "525", "03B4", }, // Lowercase Greek Delta 465 { "526", "03B5", }, // Lowercase Greek Epsilon 466 { "527", "03B6", }, // Lowercase Greek Zeta 467 { "528", "03B7", }, // Lowercase Greek Eta 468 { "529", "03B8", }, // Lowercase Greek Theta 469 { "530", "03B9", }, // Lowercase Greek Iota 470 { "531", "03BA", }, // Lowercase Greek Kappa 471 { "532", "03BB", }, // Lowercase Greek Lambda 472 { "533", "03BC", }, // Lowercase Greek Mu 473 { "534", "03BD", }, // Lowercase Greek Nu 474 { "535", "03BE", }, // Lowercase Greek Xi 475 { "536", "03BF", }, // Lowercase Greek Omicron 476 { "537", "03C0", }, // Lowercase Greek Pi 477 { "538", "03C1", }, // Lowercase Greek Rho 478 { "539", "03C3", }, // Lowercase Greek Sigma 479 { "540", "03C4", }, // Lowercase Greek Tau 480 { "541", "03C5", }, // Lowercase Greek Upsilon 481 { "542", "03C6", }, // Lowercase Greek Phi 482 { "543", "03C7", }, // Lowercase Greek Chi 483 { "544", "03C8", }, // Lowercase Greek Psi 484 { "545", "03C9", }, // Lowercase Greek Omega 485 { "546", "03D1", }, // Lowercase Greek Theta, Open 486 { "547", "03D5", }, // Lowercase Greek Phi, Open 487 { "548", "03D6", }, // Lowercase Pi, Alternate 488 { "549", "2243", }, // Wavy Over Straight Approximate Symbol 489 { "550", "2262", }, // Not Exactly Equal To Symbol 490 { "551", "21D1", }, // Up Arrow Double Stroke 491 { "552", "21D2", }, // Right Arrow Double Stroke 492 { "553", "21D3", }, // Down Arrow Double Stroke 493 { "554", "21D0", }, // Left Arrow Double Stroke 494 { "555", "21D5", }, // Up/Down Arrow Double Stroke 495 { "556", "21D4", }, // Left/Right Arrow Double Stroke 496 { "557", "21C4", }, // Right Over Left Arrow 497 { "558", "21C6", }, // Left Over Right Arrow 498 { "559", "EFE9", }, // Vector Symbol 499 { "560", "0305", }, // Overline, Composite 500 { "561", "2200", }, // For All Symbol, or Universal (inverted A) 501 { "562", "2203", }, // There Exists Symbol, or Existential (inverted E) 502 { "563", "22A4", }, // Top Symbol 503 { "564", "22A5", }, // Bottom Symbol 504 { "565", "222A", }, // Set Union Symbol 505 { "566", "2208", }, // Element-Of Symbol 506 { "567", "220B", }, // Contains Symbol 507 { "568", "2209", }, // Not-Element-Of Symbol 508 { "569", "2282", }, // Proper Subset Symbol 509 { "570", "2283", }, // Proper Superset Symbol 510 { "571", "2284", }, // Not Proper Subset Symbol 511 { "572", "2285", }, // Not Proper Superset Symbol 512 { "573", "2286", }, // Subset Symbol 513 { "574", "2287", }, // Superset Symbol 514 { "575", "2295", }, // Plus In Circle Symbol 515 { "576", "2299", }, // Dot In Circle Symbol 516 { "577", "2297", }, // Times In Circle Symbol 517 { "578", "2296", }, // Minus In Circle Symbol 518 { "579", "2298", }, // Slash In Circle Symbol 519 { "580", "2227", }, // Logical And Symbol 520 { "581", "2228", }, // Logical Or Symbol 521 { "582", "22BB", }, // Exclusive Or Symbol 522 { "583", "2218", }, // Functional Composition Symbol 523 { "584", "20DD", }, // Large Open Circle 524 { "585", "22A3", }, // Assertion Symbol 525 { "586", "22A2", }, // Backwards Assertion Symbol 526 { "587", "222B", }, // Integral Symbol 527 { "588", "222E", }, // Curvilinear Integral Symbol 528 { "589", "2220", }, // Angle Symbol 529 { "590", "2205", }, // Empty Set Symbol 530 { "591", "2135", }, // Hebrew Aleph 531 { "592", "2136", }, // Hebrew Beth 532 { "593", "2137", }, // Hebrew Gimmel 533 { "594", "212D", }, // Fraktur Uppercase C 534 { "595", "2111", }, // Fraktur Uppercase I 535 { "596", "211C", }, // Fraktur Uppercase R 536 { "597", "2128", }, // Fraktur Uppercase Z 537 { "598", "23A1", }, // Top Segment Left Bracket (Left Square Bracket Upper Corner) 538 { "599", "23A3", }, // Bottom Segment Left Bracket (Left Square Bracket Lower Corner) 539 { "600", "239B", }, // Top Segment Left Brace (Left Parenthesis Upper Hook) 540 //{ "600", "23A7", }, // Top Segment Left Brace (Right Curly Bracket Upper Hook) 541 { "601", "23A8", }, // Middle Segment Left Brace (Right Curly Bracket Middle Piece) 542 { "602", "239D", }, // Bottom Segment LeftBrace (Left Parenthesis Lower Hook) 543 //{ "602", "23A9", }, // Bottom Segment Left Brace (Right Curly Bracket Lower Hook) 544 { "603", "EFD4", }, // Middle Segment Curvilinear Integral 545 { "604", "EFD3", }, // Top Left Segment Summation 546 { "605", "2225", }, // Double Vertical Line, Composite 547 { "606", "EFD2", }, // Bottom Left Segment Summation 548 { "607", "EFD1", }, // Bottom Diagonal Summation 549 { "608", "23A4", }, // Top Segment Right Bracket (Right Square Bracket Upper Corner) 550 { "609", "23A6", }, // Bottom Segment Right Bracket (Right Square Bracket Lower Corner) 551 { "610", "239E", }, // Top Segment Right Brace (Right Parenthesis Upper Hook) 552 //{ "610", "23AB", }, // Top Segment Right Brace (Right Curly Bracket Upper Hook) 553 { "611", "23AC", }, // Middle Segment Right Brace (Right Curly Bracket Middle Piece) 554 { "612", "23A0", }, // Bottom Segment Right ( Right Parenthesis Lower Hook) 555 //{ "612", "23AD", }, // Bottom Segment Right Brace (Right Curly Bracket Lower Hook) 556 { "613", "239C", }, // Thick Vertical Line, Composite (Left Parenthesis Extension) 557 //{ "613", "239F", }, // Thick Vertical Line, Composite (Right Parenthesis Extension) 558 //{ "613", "23AA", }, // Thick Vertical Line, Composite (Curly Bracket Extension) 559 //{ "613", "23AE", }, // Thick Vertical Line, Composite (Integral Extension) 560 { "614", "2223", }, // Thin Vertical Line, Composite 561 { "615", "EFDC", }, // Bottom Segment of Vertical Radical 562 { "616", "EFD0", }, // Top Right Segment Summation 563 { "617", "EFCF", }, // Middle Segment Summation 564 { "618", "EFCE", }, // Bottom Right Segment Summation 565 { "619", "EFCD", }, // Top Diagonal Summation 566 { "620", "2213", }, // Minus Over Plus Sign 567 { "621", "2329", }, // Left Angle Bracket 568 { "622", "232A", }, // Right Angle Bracket 569 { "623", "EFFF", }, // Mask Symbol 570 { "624", "2245", }, // Wavy Over Two Straight Approximate Symbol 571 { "625", "2197", }, // 45 Degree Arrow 572 { "626", "2198", }, // -45 Degree Arrow 573 { "627", "2199", }, // -135 Degree Arrow 574 { "628", "2196", }, // 135 Degree Arrow 575 { "629", "25B5", }, // Up Open Triangle 576 { "630", "25B9", }, // Right Open Triangle 577 { "631", "25BF", }, // Down Open Triangle 578 { "632", "25C3", }, // Left Open Triangle 579 { "633", "226A", }, // Much Less Than Sign 580 { "634", "226B", }, // Much Greater Than Sign 581 { "635", "2237", }, // Proportional To Symbol (4 dots) 582 { "636", "225C", }, // Defined As Symbol 583 { "637", "03DD", }, // Lowercase Greek Digamma 584 { "638", "210F", }, // Planck's Constant divided by 2 pi 585 { "639", "2112", }, // Laplace Transform Symbol 586 { "640", "EFFE", }, // Power Set 587 { "641", "2118", }, // Weierstrassian Symbol 588 { "642", "2211", }, // Summation Symbol (large Sigma) 589 { "643", "301A", }, // Left Double Bracket 590 { "644", "EFC9", }, // Middle Segment Double Bracket 591 { "645", "301B", }, // Right Double Bracket 592 { "646", "256D", }, // Box Draw Left Top Round Corner 593 { "647", "2570", }, // Box Draw Left Bottom Round Corner 594 { "648", "EFC8", }, // Extender Large Union/Product 595 { "649", "EFC7", }, // Bottom Segment Large Union 596 { "650", "EFC6", }, // Top Segment Large Intersection 597 { "651", "EFC5", }, // Top Segment Left Double Bracket 598 { "652", "EFC4", }, // Bottom Segment Left Double Bracket 599 { "653", "EFFC", }, // Large Open Square Box 600 { "654", "25C7", }, // Open Diamond 601 { "655", "256E", }, // Box Draw Right Top Round Corner 602 { "656", "256F", }, // Box Draw Right Bottom Round Corner 603 { "657", "EFC3", }, // Bottom Segment Large Bottom Product 604 { "658", "EFC2", }, // Top Segment Large Top Product 605 { "659", "EFC1", }, // Top Segment Right Double Bracket 606 { "660", "EFC0", }, // Bottom Segment Right Double Bracket 607 { "661", "EFFB", }, // Large Solid Square Box 608 { "662", "25C6", }, // Solid Diamond 609 { "663", "220D", }, // Such That Symbol (rotated lc epsilon) 610 { "664", "2217", }, // Math Asterisk 611 { "665", "23AF", }, // Horizontal Arrow Extender (Horizontal Line Extension) 612 { "666", "EFCB", }, // Double Horizontal Arrow Extender 613 { "667", "EFCC", }, // Inverted Complement of 0xEFCF or MSL 617 614 { "668", "221F", }, // Right Angle Symbol 615 { "669", "220F", }, // Product Symbol (large Pi) 616 { "684", "25CA", }, // Lozenge, Diamond 617 { "1000", "2070", }, // Superior Numeral 0 618 { "1001", "2074", }, // Superior Numeral 4 619 { "1002", "2075", }, // Superior Numeral 5 620 { "1003", "2076", }, // Superior Numeral 6 621 { "1004", "2077", }, // Superior Numeral 7 622 { "1005", "2078", }, // Superior Numeral 8 623 { "1006", "2079", }, // Superior Numeral 9 624 { "1017", "201C", }, // Double Open Quote (6) 625 { "1018", "201D", }, // Double Close Quote (9) 626 { "1019", "201E", }, // Double Baseline Quote (9) 627 { "1020", "2003", }, // Em Space 628 { "1021", "2002", }, // En Space 629 { "1023", "2009", }, // Thin Space 630 { "1028", "2026", }, // Ellipsis 631 { "1030", "EFF1", }, // Uppercase Ogonek (Spacing) 632 { "1031", "017E", }, // Lowercase Z Hacek 633 { "1034", "2120", }, // Service Mark 634 { "1036", "211E", }, // Prescription Sign 635 //{ "1040", "F001", }, // Lowercase FI Ligature 636 { "1040", "FB01", }, // Lowercase FI Ligature 637 //{ "1041", "F002", }, // Lowercase FL Ligature 638 { "1041", "FB02", }, // Lowercase FL Ligature 639 { "1042", "FB00", }, // Lowercase FF Ligature 640 { "1043", "FB03", }, // Lowercase FFI Ligature 641 { "1044", "FB04", }, // Lowercase FFL Ligature 642 { "1045", "EFF0", }, // Uppercase Double Acute Accent (Spacing) 643 { "1047", "0133", }, // Lowercase IJ Ligature 644 { "1060", "2105", }, // Care Of Symbol 645 { "1061", "011E", }, // Uppercase G Breve 646 { "1062", "011F", }, // Lowercase G Breve 647 { "1063", "015E", }, // Uppercase S Cedilla 648 { "1064", "015F", }, // Lowercase S Cedilla 649 { "1065", "0130", }, // Uppercase I Overdot 650 { "1067", "201A", }, // Single Baseline Quote (9) 651 { "1068", "2030", }, // Per Mill Sign 652 { "1069", "20AC", }, // Euro 653 { "1084", "02C9", }, // Lowercase Macron Accent (Spacing) 654 { "1086", "02D8", }, // Lowercase Breve Accent (Spacing) 655 { "1088", "02D9", }, // Lowercase Overdot Accent (Spacing) 656 { "1090", "0153", }, // Lowercase OE Ligature 657 { "1091", "0152", }, // Uppercase OE Ligature 658 { "1092", "2039", }, // Left Pointing Single Angle Quote 659 { "1093", "203A", }, // Right Pointing Single Angle Quote 660 { "1094", "25A1", }, // Medium Open Square Box 661 { "1095", "0141", }, // Uppercase L-Stroke 662 { "1096", "0142", }, // Lowercase L-Stroke 663 { "1097", "02DD", }, // Lowercase Double Acute Accent (Spacing) 664 { "1098", "02DB", }, // Lowercase Ogonek (Spacing) 665 { "1099", "21B5", }, // Carriage Return Symbol 666 { "1100", "EFDB", }, // Full Size Serif Registered 667 { "1101", "EFDA", }, // Full Size Serif Copyright 668 { "1102", "EFD9", }, // Full Size Serif Trademark 669 { "1103", "EFD8", }, // Full Size Sans Registered 670 { "1104", "EFD7", }, // Full Size Sans Copyright 671 { "1105", "EFD6", }, // Full Size Sans Trademark 672 { "1106", "017D", }, // Uppercase Z Hacek 673 { "1107", "0132", }, // Uppercase IJ Ligature 674 { "1108", "25AB", }, // Small Open Square Box 675 { "1109", "25E6", }, // Small Open Round Bullet 676 { "1110", "25CB", }, // Medium Open Round Bullet 677 { "1111", "EFFA", }, // Large Solid Round Bullet 678 { "3812", "F000", }, // Ornament, Apple 679 }; 680 681 // global constructor 682 static struct hp_msl_to_unicode_init { 683 hp_msl_to_unicode_init(); 684 } _hp_msl_to_unicode_init; 685 686 hp_msl_to_unicode_init::hp_msl_to_unicode_init() { 687 for (unsigned int i = 0; 688 i < sizeof(hp_msl_to_unicode_list)/sizeof(hp_msl_to_unicode_list[0]); 689 i++) { 690 hp_msl_to_unicode *ptu = new hp_msl_to_unicode[1]; 691 ptu->value = (char *)hp_msl_to_unicode_list[i].value; 692 hp_msl_to_unicode_table.define(hp_msl_to_unicode_list[i].key, ptu); 693 } 694 } 695 696 const char *hp_msl_to_unicode_code(const char *s) 697 { 698 hp_msl_to_unicode *result = hp_msl_to_unicode_table.lookup(s); 699 return result ? result->value : 0; 700 } 701