version 1.72, 2017/08/23 10:50:15 |
version 1.78, 2018/12/15 19:30:26 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2011, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org> |
* Copyright (c) 2011,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
|
|
#include <ctype.h> |
#include <ctype.h> |
#include <stddef.h> |
#include <stddef.h> |
#include <stdint.h> |
#include <stdint.h> |
|
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
#include <string.h> |
#include <string.h> |
|
|
Line 47 static struct ln lines[] = { |
|
Line 48 static struct ln lines[] = { |
|
{ " ", ascii_nbrsp, 0x00a0 }, |
{ " ", ascii_nbrsp, 0x00a0 }, |
{ "~", ascii_nbrsp, 0x00a0 }, |
{ "~", ascii_nbrsp, 0x00a0 }, |
{ "0", " ", 0x2002 }, |
{ "0", " ", 0x2002 }, |
{ "|", "", 0 }, |
|
{ "^", "", 0 }, |
|
{ "&", "", 0 }, |
|
{ "%", "", 0 }, |
|
{ ":", ascii_break, 0 }, |
{ ":", ascii_break, 0 }, |
/* XXX The following three do not really belong here. */ |
|
{ "t", "", 0 }, |
|
{ "c", "", 0 }, |
|
{ "}", "", 0 }, |
|
|
|
/* Lines. */ |
/* Lines. */ |
{ "ba", "|", 0x007c }, |
{ "ba", "|", 0x007c }, |
{ "br", "|", 0x2502 }, |
{ "br", "|", 0x2502 }, |
{ "ul", "_", 0x005f }, |
{ "ul", "_", 0x005f }, |
|
{ "_", "_", 0x005f }, |
{ "ru", "_", 0x005f }, |
{ "ru", "_", 0x005f }, |
{ "rn", "-", 0x203e }, |
{ "rn", "-", 0x203e }, |
{ "bb", "|", 0x00a6 }, |
{ "bb", "|", 0x00a6 }, |
Line 82 static struct ln lines[] = { |
|
Line 76 static struct ln lines[] = { |
|
{ "sh", "#", 0x0023 }, |
{ "sh", "#", 0x0023 }, |
{ "CR", "<cr>", 0x21b5 }, |
{ "CR", "<cr>", 0x21b5 }, |
{ "OK", "\\/", 0x2713 }, |
{ "OK", "\\/", 0x2713 }, |
{ "CL", "<club>", 0x2663 }, |
{ "CL", "C", 0x2663 }, |
{ "SP", "<spade>", 0x2660 }, |
{ "SP", "S", 0x2660 }, |
{ "HE", "<heart>", 0x2665 }, |
{ "HE", "H", 0x2665 }, |
{ "DI", "<diamond>", 0x2666 }, |
{ "DI", "D", 0x2666 }, |
|
|
/* Legal symbols. */ |
/* Legal symbols. */ |
{ "co", "(C)", 0x00a9 }, |
{ "co", "(C)", 0x00a9 }, |
Line 215 static struct ln lines[] = { |
|
Line 209 static struct ln lines[] = { |
|
{ "mo", "<element\037of>", 0x2208 }, |
{ "mo", "<element\037of>", 0x2208 }, |
{ "nm", "<not\037element\037of>", 0x2209 }, |
{ "nm", "<not\037element\037of>", 0x2209 }, |
{ "sb", "<proper\037subset>", 0x2282 }, |
{ "sb", "<proper\037subset>", 0x2282 }, |
{ "nb", "(!=", 0x2284 }, |
{ "nb", "<not\037subset>", 0x2284 }, |
{ "sp", "<proper\037superset>", 0x2283 }, |
{ "sp", "<proper\037superset>", 0x2283 }, |
{ "nc", "!=)", 0x2285 }, |
{ "nc", "<not\037superset>", 0x2285 }, |
{ "ib", "<subset\037or\037equal>", 0x2286 }, |
{ "ib", "<subset\037or\037equal>", 0x2286 }, |
{ "ip", "<superset\037or\037equal>", 0x2287 }, |
{ "ip", "<superset\037or\037equal>", 0x2287 }, |
{ "ca", "<intersection>", 0x2229 }, |
{ "ca", "<intersection>", 0x2229 }, |
Line 225 static struct ln lines[] = { |
|
Line 219 static struct ln lines[] = { |
|
{ "/_", "<angle>", 0x2220 }, |
{ "/_", "<angle>", 0x2220 }, |
{ "pp", "<perpendicular>", 0x22a5 }, |
{ "pp", "<perpendicular>", 0x22a5 }, |
{ "is", "<integral>", 0x222b }, |
{ "is", "<integral>", 0x222b }, |
{ "integral", "'\b,\bI", 0x222b }, |
{ "integral", "<integral>", 0x222b }, |
{ "sum", "E", 0x2211 }, |
{ "sum", "<sum>", 0x2211 }, |
{ "product", "TT", 0x220f }, |
{ "product", "<product>", 0x220f }, |
{ "coproduct", "U", 0x2210 }, |
{ "coproduct", "<coproduct>", 0x2210 }, |
{ "gr", "<nabla>", 0x2207 }, |
{ "gr", "<nabla>", 0x2207 }, |
{ "sr", "<sqrt>", 0x221a }, |
{ "sr", "<sqrt>", 0x221a }, |
{ "sqrt", "\\/", 0x221a }, |
{ "sqrt", "<sqrt>", 0x221a }, |
{ "lc", "|~", 0x2308 }, |
{ "lc", "|~", 0x2308 }, |
{ "rc", "~|", 0x2309 }, |
{ "rc", "~|", 0x2309 }, |
{ "lf", "|_", 0x230a }, |
{ "lf", "|_", 0x230a }, |
Line 240 static struct ln lines[] = { |
|
Line 234 static struct ln lines[] = { |
|
{ "Ah", "<Aleph>", 0x2135 }, |
{ "Ah", "<Aleph>", 0x2135 }, |
{ "Im", "<Im>", 0x2111 }, |
{ "Im", "<Im>", 0x2111 }, |
{ "Re", "<Re>", 0x211c }, |
{ "Re", "<Re>", 0x211c }, |
{ "wp", "P", 0x2118 }, |
{ "wp", "p", 0x2118 }, |
{ "pd", "<del>", 0x2202 }, |
{ "pd", "<del>", 0x2202 }, |
{ "-h", "/h", 0x210f }, |
{ "-h", "/h", 0x210f }, |
{ "hbar", "/h", 0x210f }, |
{ "hbar", "/h", 0x210f }, |
Line 287 static struct ln lines[] = { |
|
Line 281 static struct ln lines[] = { |
|
{ "ho", ",", 0x02db }, |
{ "ho", ",", 0x02db }, |
{ "ha", "^", 0x005e }, |
{ "ha", "^", 0x005e }, |
{ "ti", "~", 0x007e }, |
{ "ti", "~", 0x007e }, |
|
{ "u02DC", "~", 0x02dc }, |
|
|
/* Accented letters. */ |
/* Accented letters. */ |
{ "'A", "'\bA", 0x00c1 }, |
{ "'A", "'\bA", 0x00c1 }, |
Line 294 static struct ln lines[] = { |
|
Line 289 static struct ln lines[] = { |
|
{ "'I", "'\bI", 0x00cd }, |
{ "'I", "'\bI", 0x00cd }, |
{ "'O", "'\bO", 0x00d3 }, |
{ "'O", "'\bO", 0x00d3 }, |
{ "'U", "'\bU", 0x00da }, |
{ "'U", "'\bU", 0x00da }, |
|
{ "'Y", "'\bY", 0x00dd }, |
{ "'a", "'\ba", 0x00e1 }, |
{ "'a", "'\ba", 0x00e1 }, |
{ "'e", "'\be", 0x00e9 }, |
{ "'e", "'\be", 0x00e9 }, |
{ "'i", "'\bi", 0x00ed }, |
{ "'i", "'\bi", 0x00ed }, |
{ "'o", "'\bo", 0x00f3 }, |
{ "'o", "'\bo", 0x00f3 }, |
{ "'u", "'\bu", 0x00fa }, |
{ "'u", "'\bu", 0x00fa }, |
|
{ "'y", "'\by", 0x00fd }, |
{ "`A", "`\bA", 0x00c0 }, |
{ "`A", "`\bA", 0x00c0 }, |
{ "`E", "`\bE", 0x00c8 }, |
{ "`E", "`\bE", 0x00c8 }, |
{ "`I", "`\bI", 0x00cc }, |
{ "`I", "`\bI", 0x00cc }, |
Line 359 static struct ln lines[] = { |
|
Line 356 static struct ln lines[] = { |
|
{ "Eu", "EUR", 0x20ac }, |
{ "Eu", "EUR", 0x20ac }, |
{ "eu", "EUR", 0x20ac }, |
{ "eu", "EUR", 0x20ac }, |
{ "Ye", "=\bY", 0x00a5 }, |
{ "Ye", "=\bY", 0x00a5 }, |
{ "Po", "GBP", 0x00a3 }, |
{ "Po", "-\bL", 0x00a3 }, |
{ "Cs", "o\bx", 0x00a4 }, |
{ "Cs", "o\bx", 0x00a4 }, |
{ "Fn", ",\bf", 0x0192 }, |
{ "Fn", ",\bf", 0x0192 }, |
|
|
Line 460 mchars_spec2cp(const char *p, size_t sz) |
|
Line 457 mchars_spec2cp(const char *p, size_t sz) |
|
|
|
end = p + sz; |
end = p + sz; |
ln = ohash_find(&mchars, ohash_qlookupi(&mchars, p, &end)); |
ln = ohash_find(&mchars, ohash_qlookupi(&mchars, p, &end)); |
return ln != NULL ? ln->unicode : sz == 1 ? (unsigned char)*p : -1; |
return ln != NULL ? ln->unicode : -1; |
} |
} |
|
|
int |
int |
Line 490 mchars_spec2str(const char *p, size_t sz, size_t *rsz) |
|
Line 487 mchars_spec2str(const char *p, size_t sz, size_t *rsz) |
|
|
|
end = p + sz; |
end = p + sz; |
ln = ohash_find(&mchars, ohash_qlookupi(&mchars, p, &end)); |
ln = ohash_find(&mchars, ohash_qlookupi(&mchars, p, &end)); |
if (ln == NULL) { |
if (ln == NULL) |
*rsz = 1; |
return NULL; |
return sz == 1 ? p : NULL; |
|
} |
|
|
|
*rsz = strlen(ln->ascii); |
*rsz = strlen(ln->ascii); |
return ln->ascii; |
return ln->ascii; |