/contrib/groff/src/utils/hpftodit/hpuni.cpp

https://bitbucket.org/freebsd/freebsd-head/ · C++ · 698 lines · 656 code · 9 blank · 33 comment · 1 complexity · e3d41639c477bb8a1cbccb6c24eb3231 MD5 · raw file

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