glyphuni.cpp revision 1.1.1.1
1/* $NetBSD: glyphuni.cpp,v 1.1.1.1 2016/01/13 18:41:48 christos Exp $ */ 2 3// -*- C++ -*- 4/* Copyright (C) 2002, 2003, 2004 5 Free Software Foundation, Inc. 6 Written by Werner Lemberg <wl@gnu.org> 7 8This file is part of groff. 9 10groff is free software; you can redistribute it and/or modify it under 11the terms of the GNU General Public License as published by the Free 12Software Foundation; either version 2, or (at your option) any later 13version. 14 15groff is distributed in the hope that it will be useful, but WITHOUT ANY 16WARRANTY; without even the implied warranty of MERCHANTABILITY or 17FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 18for more details. 19 20You should have received a copy of the GNU General Public License along 21with groff; see the file COPYING. If not, write to the Free Software 22Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ 23 24#include "lib.h" 25#include "stringclass.h" 26#include "ptable.h" 27 28#include "unicode.h" 29 30struct glyph_to_unicode { 31 char *value; 32}; 33 34declare_ptable(glyph_to_unicode) 35implement_ptable(glyph_to_unicode) 36 37PTABLE(glyph_to_unicode) glyph_to_unicode_table; 38 39struct S { 40 const char *key; 41 const char *value; 42} glyph_to_unicode_list[] = { 43 { "!", "0021" }, 44 { "\"", "0022" }, 45 { "dq", "0022" }, 46 { "#", "0023" }, 47 { "sh", "0023" }, 48 { "$", "0024" }, 49 { "Do", "0024" }, 50 { "%", "0025" }, 51 { "&", "0026" }, 52 { "aq", "0027" }, 53 { "(", "0028" }, 54 { ")", "0029" }, 55 { "*", "002A" }, 56 { "+", "002B" }, 57 { "pl", "002B" }, 58 { ",", "002C" }, 59 { ".", "002E" }, 60 { "/", "002F" }, 61 { "sl", "002F" }, 62 { "0", "0030" }, 63 { "1", "0031" }, 64 { "2", "0032" }, 65 { "3", "0033" }, 66 { "4", "0034" }, 67 { "5", "0035" }, 68 { "6", "0036" }, 69 { "7", "0037" }, 70 { "8", "0038" }, 71 { "9", "0039" }, 72 { ":", "003A" }, 73 { ";", "003B" }, 74 { "<", "003C" }, 75 { "=", "003D" }, 76 { "eq", "003D" }, 77 { ">", "003E" }, 78 { "?", "003F" }, 79 { "@", "0040" }, 80 { "at", "0040" }, 81 { "A", "0041" }, 82 { "B", "0042" }, 83 { "C", "0043" }, 84 { "D", "0044" }, 85 { "E", "0045" }, 86 { "F", "0046" }, 87 { "G", "0047" }, 88 { "H", "0048" }, 89 { "I", "0049" }, 90 { "J", "004A" }, 91 { "K", "004B" }, 92 { "L", "004C" }, 93 { "M", "004D" }, 94 { "N", "004E" }, 95 { "O", "004F" }, 96 { "P", "0050" }, 97 { "Q", "0051" }, 98 { "R", "0052" }, 99 { "S", "0053" }, 100 { "T", "0054" }, 101 { "U", "0055" }, 102 { "V", "0056" }, 103 { "W", "0057" }, 104 { "X", "0058" }, 105 { "Y", "0059" }, 106 { "Z", "005A" }, 107//{ "[", "005B" }, 108 { "lB", "005B" }, 109//{ "\\", "005C" }, 110 { "rs", "005C" }, 111//{ "]", "005D" }, 112 { "rB", "005D" }, 113 { "a^", "005E" }, 114 { "^", "005E" }, 115 { "ha", "005E" }, 116 { "_", "005F" }, 117 { "ru", "005F" }, 118 { "ul", "005F" }, 119//{ "\\`", "0060" }, 120 { "ga", "0060" }, 121 { "a", "0061" }, 122 { "b", "0062" }, 123 { "c", "0063" }, 124 { "d", "0064" }, 125 { "e", "0065" }, 126 { "f", "0066" }, 127 { "ff", "0066_0066" }, 128 { "Fi", "0066_0066_0069" }, 129 { "Fl", "0066_0066_006C" }, 130 { "fi", "0066_0069" }, 131 { "fl", "0066_006C" }, 132 { "g", "0067" }, 133 { "h", "0068" }, 134 { "i", "0069" }, 135 { "j", "006A" }, 136 { "k", "006B" }, 137 { "l", "006C" }, 138 { "m", "006D" }, 139 { "n", "006E" }, 140 { "o", "006F" }, 141 { "p", "0070" }, 142 { "q", "0071" }, 143 { "r", "0072" }, 144 { "s", "0073" }, 145 { "t", "0074" }, 146 { "u", "0075" }, 147 { "v", "0076" }, 148 { "w", "0077" }, 149 { "x", "0078" }, 150 { "y", "0079" }, 151 { "z", "007A" }, 152 { "lC", "007B" }, 153 { "{", "007B" }, 154 { "ba", "007C" }, 155 { "or", "007C" }, 156 { "|", "007C" }, 157 { "rC", "007D" }, 158 { "}", "007D" }, 159 { "a~", "007E" }, 160 { "~", "007E" }, 161 { "ti", "007E" }, 162 { "r!", "00A1" }, 163 { "ct", "00A2" }, 164 { "Po", "00A3" }, 165 { "Cs", "00A4" }, 166 { "Ye", "00A5" }, 167 { "bb", "00A6" }, 168 { "sc", "00A7" }, 169 { "ad", "00A8" }, 170 { "co", "00A9" }, 171 { "Of", "00AA" }, 172 { "Fo", "00AB" }, 173 { "no", "00AC" }, 174 { "tno", "00AC" }, 175 { "shc", "00AD" }, 176 { "rg", "00AE" }, 177 { "a-", "00AF" }, 178 { "de", "00B0" }, 179 { "+-", "00B1" }, 180 { "t+-", "00B1" }, 181 { "S2", "00B2" }, 182 { "S3", "00B3" }, 183 { "aa", "00B4" }, 184//{ "\\'", "00B4" }, 185 { "mc", "00B5" }, 186 { "ps", "00B6" }, 187 { "pc", "00B7" }, 188 { "ac", "00B8" }, 189 { "S1", "00B9" }, 190 { "Om", "00BA" }, 191 { "Fc", "00BB" }, 192 { "14", "00BC" }, 193 { "12", "00BD" }, 194 { "34", "00BE" }, 195 { "r?", "00BF" }, 196 { "`A", "00C0" }, 197 { "'A", "00C1" }, 198 { "^A", "00C2" }, 199 { "~A", "00C3" }, 200 { ":A", "00C4" }, 201 { "oA", "00C5" }, 202 { "AE", "00C6" }, 203 { ",C", "00C7" }, 204 { "`E", "00C8" }, 205 { "'E", "00C9" }, 206 { "^E", "00CA" }, 207 { ":E", "00CB" }, 208 { "`I", "00CC" }, 209 { "'I", "00CD" }, 210 { "^I", "00CE" }, 211 { ":I", "00CF" }, 212 { "-D", "00D0" }, 213 { "~N", "00D1" }, 214 { "`O", "00D2" }, 215 { "'O", "00D3" }, 216 { "^O", "00D4" }, 217 { "~O", "00D5" }, 218 { ":O", "00D6" }, 219 { "mu", "00D7" }, 220 { "tmu", "00D7" }, 221 { "/O", "00D8" }, 222 { "`U", "00D9" }, 223 { "'U", "00DA" }, 224 { "^U", "00DB" }, 225 { ":U", "00DC" }, 226 { "'Y", "00DD" }, 227 { "TP", "00DE" }, 228 { "ss", "00DF" }, 229 { "`a", "00E0" }, 230 { "'a", "00E1" }, 231 { "^a", "00E2" }, 232 { "~a", "00E3" }, 233 { ":a", "00E4" }, 234 { "oa", "00E5" }, 235 { "ae", "00E6" }, 236 { ",c", "00E7" }, 237 { "`e", "00E8" }, 238 { "'e", "00E9" }, 239 { "^e", "00EA" }, 240 { ":e", "00EB" }, 241 { "`i", "00EC" }, 242 { "'i", "00ED" }, 243 { "^i", "00EE" }, 244 { ":i", "00EF" }, 245 { "Sd", "00F0" }, 246 { "~n", "00F1" }, 247 { "`o", "00F2" }, 248 { "'o", "00F3" }, 249 { "^o", "00F4" }, 250 { "~o", "00F5" }, 251 { ":o", "00F6" }, 252 { "di", "00F7" }, 253 { "tdi", "00F7" }, 254 { "/o", "00F8" }, 255 { "`u", "00F9" }, 256 { "'u", "00FA" }, 257 { "^u", "00FB" }, 258 { ":u", "00FC" }, 259 { "'y", "00FD" }, 260 { "Tp", "00FE" }, 261 { ":y", "00FF" }, 262 { "'C", "0106" }, 263 { "'c", "0107" }, 264 { ".i", "0131" }, 265 { "IJ", "0132" }, 266 { "ij", "0133" }, 267 { "/L", "0141" }, 268 { "/l", "0142" }, 269 { "OE", "0152" }, 270 { "oe", "0153" }, 271 { "vS", "0160" }, 272 { "vs", "0161" }, 273 { ":Y", "0178" }, 274 { "vZ", "017D" }, 275 { "vz", "017E" }, 276 { "Fn", "0192" }, 277 { "ah", "02C7" }, 278 { "ab", "02D8" }, 279 { "a.", "02D9" }, 280 { "ao", "02DA" }, 281 { "ho", "02DB" }, 282 { "a\"", "02DD" }, 283 { "*A", "0391" }, 284 { "*B", "0392" }, 285 { "*G", "0393" }, 286 { "*D", "0394" }, 287 { "*E", "0395" }, 288 { "*Z", "0396" }, 289 { "*Y", "0397" }, 290 { "*H", "0398" }, 291 { "*I", "0399" }, 292 { "*K", "039A" }, 293 { "*L", "039B" }, 294 { "*M", "039C" }, 295 { "*N", "039D" }, 296 { "*C", "039E" }, 297 { "*O", "039F" }, 298 { "*P", "03A0" }, 299 { "*R", "03A1" }, 300 { "*S", "03A3" }, 301 { "*T", "03A4" }, 302 { "*U", "03A5" }, 303 { "*F", "03A6" }, 304 { "*X", "03A7" }, 305 { "*Q", "03A8" }, 306 { "*W", "03A9" }, 307 { "*a", "03B1" }, 308 { "*b", "03B2" }, 309 { "*g", "03B3" }, 310 { "*d", "03B4" }, 311 { "*e", "03B5" }, 312 { "*z", "03B6" }, 313 { "*y", "03B7" }, 314 { "*h", "03B8" }, 315 { "*i", "03B9" }, 316 { "*k", "03BA" }, 317 { "*l", "03BB" }, 318 { "*m", "03BC" }, 319 { "*n", "03BD" }, 320 { "*c", "03BE" }, 321 { "*o", "03BF" }, 322 { "*p", "03C0" }, 323 { "*r", "03C1" }, 324 { "ts", "03C2" }, 325 { "*s", "03C3" }, 326 { "*t", "03C4" }, 327 { "*u", "03C5" }, 328 { "*f", "03C6" }, 329 { "*x", "03C7" }, 330 { "*q", "03C8" }, 331 { "*w", "03C9" }, 332 { "+h", "03D1" }, 333 { "+f", "03D5" }, 334 { "+p", "03D6" }, 335 { "+e", "03F5" }, 336 { "-", "2010" }, 337 { "hy", "2010" }, 338 { "en", "2013" }, 339 { "em", "2014" }, 340 { "`", "2018" }, 341 { "oq", "2018" }, 342 { "'", "2019" }, 343 { "cq", "2019" }, 344 { "bq", "201A" }, 345 { "lq", "201C" }, 346 { "rq", "201D" }, 347 { "Bq", "201E" }, 348 { "dg", "2020" }, 349 { "dd", "2021" }, 350 { "bu", "2022" }, 351 { "%0", "2030" }, 352 { "fm", "2032" }, 353 { "sd", "2033" }, 354 { "fo", "2039" }, 355 { "fc", "203A" }, 356 { "rn", "203E" }, 357 { "f/", "2044" }, 358 { "eu", "20AC" }, 359 { "Eu", "20AC" }, 360 { "-h", "210F" }, 361 { "hbar", "210F" }, 362 { "Im", "2111" }, 363 { "wp", "2118" }, 364 { "Re", "211C" }, 365 { "tm", "2122" }, 366 { "Ah", "2135" }, 367 { "18", "215B" }, 368 { "38", "215C" }, 369 { "58", "215D" }, 370 { "78", "215E" }, 371 { "<-", "2190" }, 372 { "ua", "2191" }, 373 { "->", "2192" }, 374 { "da", "2193" }, 375 { "<>", "2194" }, 376 { "va", "2195" }, 377 { "CR", "21B5" }, 378 { "lA", "21D0" }, 379 { "uA", "21D1" }, 380 { "rA", "21D2" }, 381 { "dA", "21D3" }, 382 { "hA", "21D4" }, 383 { "vA", "21D5" }, 384 { "fa", "2200" }, 385 { "pd", "2202" }, 386 { "te", "2203" }, 387 { "es", "2205" }, 388 { "gr", "2207" }, 389 { "mo", "2208" }, 390 { "nm", "2209" }, 391 { "st", "220B" }, 392 { "product", "220F" }, 393 { "coproduct", "2210" }, 394 { "sum", "2211" }, 395//{ "\\-", "2212" }, 396 { "mi", "2212" }, 397 { "-+", "2213" }, 398 { "**", "2217" }, 399 { "sr", "221A" }, 400 { "pt", "221D" }, 401 { "if", "221E" }, 402 { "/_", "2220" }, 403 { "AN", "2227" }, 404 { "OR", "2228" }, 405 { "ca", "2229" }, 406 { "cu", "222A" }, 407 { "is", "222B" }, 408 { "integral", "222B" }, 409 { "tf", "2234" }, 410 { "3d", "2234" }, 411 { "ap", "223C" }, 412 { "|=", "2243" }, 413 { "=~", "2245" }, 414 { "~~", "2248" }, 415 { "~=", "2248" }, 416 { "!=", "2260" }, 417 { "==", "2261" }, 418 { "ne", "2262" }, 419 { "<=", "2264" }, 420 { ">=", "2265" }, 421 { ">>", "226A" }, 422 { "<<", "226B" }, 423 { "sb", "2282" }, 424 { "sp", "2283" }, 425 { "nb", "2284" }, 426 { "nc", "2285" }, 427 { "ib", "2286" }, 428 { "ip", "2287" }, 429 { "c+", "2295" }, 430 { "c*", "2297" }, 431 { "pp", "22A5" }, 432 { "md", "22C5" }, 433 { "lc", "2308" }, 434 { "rc", "2309" }, 435 { "lf", "230A" }, 436 { "rf", "230B" }, 437 { "parenlefttp", "239B" }, 438 { "parenleftex", "239C" }, 439 { "parenleftbt", "239D" }, 440 { "parenrighttp", "239E" }, 441 { "parenrightex", "239F" }, 442 { "parenrightbt", "23A0" }, 443 { "bracketlefttp", "23A1" }, 444 { "bracketleftex", "23A2" }, 445 { "bracketleftbt", "23A3" }, 446 { "bracketrighttp", "23A4" }, 447 { "bracketrightex", "23A5" }, 448 { "bracketrightbt", "23A6" }, 449 { "lt", "23A7" }, 450 { "bracelefttp", "23A7" }, 451 { "lk", "23A8" }, 452 { "braceleftmid", "23A8" }, 453 { "lb", "23A9" }, 454 { "braceleftbt", "23A9" }, 455 { "bv", "23AA" }, 456 { "braceex", "23AA" }, 457 { "braceleftex", "23AA" }, 458 { "bracerightex", "23AA" }, 459 { "rt", "23AB" }, 460 { "bracerighttp", "23AB" }, 461 { "rk", "23AC" }, 462 { "bracerightmid", "23AC" }, 463 { "rb", "23AD" }, 464 { "bracerightbt", "23AD" }, 465 { "an", "23AF" }, 466 { "br", "2502" }, 467 { "rk", "251D" }, 468 { "lk", "2525" }, 469 { "lt", "256D" }, 470 { "rt", "256E" }, 471 { "rb", "256F" }, 472 { "lb", "2570" }, 473 { "sq", "25A1" }, 474 { "lz", "25CA" }, 475 { "ci", "25CB" }, 476 { "lh", "261C" }, 477 { "rh", "261E" }, 478 { "SP", "2660" }, 479 { "CL", "2663" }, 480 { "HE", "2665" }, 481 { "DI", "2666" }, 482 { "OK", "2713" }, 483 { "la", "27E8" }, 484 { "ra", "27E9" }, 485}; 486 487// global constructor 488static struct glyph_to_unicode_init { 489 glyph_to_unicode_init(); 490} _glyph_to_unicode_init; 491 492glyph_to_unicode_init::glyph_to_unicode_init() { 493 for (unsigned int i = 0; 494 i < sizeof(glyph_to_unicode_list)/sizeof(glyph_to_unicode_list[0]); 495 i++) { 496 glyph_to_unicode *gtu = new glyph_to_unicode[1]; 497 gtu->value = (char *)glyph_to_unicode_list[i].value; 498 glyph_to_unicode_table.define(glyph_to_unicode_list[i].key, gtu); 499 } 500} 501 502const char *glyph_name_to_unicode(const char *s) 503{ 504 glyph_to_unicode *result = glyph_to_unicode_table.lookup(s); 505 return result ? result->value : 0; 506} 507