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