version 1.75, 2018/08/21 01:59:22 |
version 1.80, 2022/06/02 14:51:41 |
|
|
/* $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, 2020 |
|
* 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 46 static struct ln lines[] = { |
|
Line 48 static struct ln lines[] = { |
|
/* Spacing. */ |
/* Spacing. */ |
{ " ", ascii_nbrsp, 0x00a0 }, |
{ " ", ascii_nbrsp, 0x00a0 }, |
{ "~", ascii_nbrsp, 0x00a0 }, |
{ "~", ascii_nbrsp, 0x00a0 }, |
{ "0", " ", 0x2002 }, |
{ "0", ascii_nbrsp, 0x00a0 }, |
{ "|", "", 0 }, |
|
{ "^", "", 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 83 static struct ln lines[] = { |
|
Line 77 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 98 static struct ln lines[] = { |
|
Line 92 static struct ln lines[] = { |
|
{ "en", "-", 0x2013 }, |
{ "en", "-", 0x2013 }, |
{ "hy", "-", 0x2010 }, |
{ "hy", "-", 0x2010 }, |
{ "e", "\\", 0x005c }, |
{ "e", "\\", 0x005c }, |
{ ".", ".", 0x002e }, |
|
{ "r!", "!", 0x00a1 }, |
{ "r!", "!", 0x00a1 }, |
{ "r?", "?", 0x00bf }, |
{ "r?", "?", 0x00bf }, |
|
|
Line 363 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 464 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 494 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; |