[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Groff] unicode support: HTML entity names
From: |
Bruno Haible |
Subject: |
[Groff] unicode support: HTML entity names |
Date: |
Mon, 23 Jan 2006 16:51:21 +0100 |
User-agent: |
KMail/1.5 |
Hi,
The first intermediate goal of Unicode support is to make groff work with
Unicode fonts without having to first register thousands of characters.
This implies that the "charset" sections of the font files of the "html"
and tty devices must go away. The first step in doing this is to move the
HTML entity names from the font files to the HTML postprocessor. These
entities are not font dependent and not user dependent, because they are
standardized by the W3C.
Another justification for this patch: Currently the HTML post-processor
fetches the "&#nnnn;" sequence through get_special_device_encoding() - an
API which returns a 'const char *', meaning a string that lives in memory
forever. To avoid consuming excessive memory amounts with strings of this
kind, it is necessary to use a different API, that allows the string's
memory to be reused at the next call. It turns out that post-html.cpp
already has this API: a function to_unicode(). This patch moves the
"&#nnnn;" strings away from get_special_device_encoding() to a new API
of the same kind.
2006-01-17 Bruno Haible <address@hidden>
* font/devhtml/R.proto: Remove the entity names from the font's
special_encoding_encoding column.
* src/devices/grohtml/post-html.cpp (get_html_entity): New function,
handling the entity names here.
(get_html_translation): Use it. Change return type to 'const char *'.
(page::add_and_encode): Update, removing a useless cast.
*** groff-20060113.orig/font/devhtml/R.proto 2005-03-14 09:17:12.000000000
+0100
--- groff-20060113/font/devhtml/R.proto 2006-01-16 02:08:51.000000000 +0100
***************
*** 3,16 ****
spacewidth 24
charset
! 24 0 0x0021
! " 24 0 0x0022 "
dq "
# 24 0 0x0023
sh "
$ 24 0 0x0024
Do "
% 24 0 0x0025
! & 24 0 0x0026 &
aq 24 0 0x0027
( 24 0 0x0028
) 24 0 0x0029
--- 3,16 ----
spacewidth 24
charset
! 24 0 0x0021
! " 24 0 0x0022
dq "
# 24 0 0x0023
sh "
$ 24 0 0x0024
Do "
% 24 0 0x0025
! & 24 0 0x0026
aq 24 0 0x0027
( 24 0 0x0028
) 24 0 0x0029
***************
*** 35,44 ****
9 24 0 0x0039
: 24 0 0x003A
; 24 0 0x003B
! < 24 0 0x003C <
= 24 0 0x003D
eq "
! > 24 0 0x003E >
? 24 0 0x003F
@ 24 0 0x0040
at "
--- 35,44 ----
9 24 0 0x0039
: 24 0 0x003A
; 24 0 0x003B
! < 24 0 0x003C
= 24 0 0x003D
eq "
! > 24 0 0x003E
? 24 0 0x003F
@ 24 0 0x0040
at "
***************
*** 118,746 ****
a~ 24 0 0x007E
~ "
ti "
! --- 24 0 0x00A0
! r! 24 0 0x00A1 ¡
! ct 24 0 0x00A2 ¢
! Po 24 0 0x00A3 £
! Cs 24 0 0x00A4 ¤
! Ye 24 0 0x00A5 ¥
! bb 24 0 0x00A6 ¦
! sc 24 0 0x00A7 §
! ad 24 0 0x00A8 ¨
! co 24 0 0x00A9 ©
! Of 24 0 0x00AA ª
! Fo 24 0 0x00AB «
! no 24 0 0x00AC ¬
tno "
! rg 24 0 0x00AE ®
! a- 24 0 0x00AF ¯
! de 24 0 0x00B0 °
! +- 24 0 0x00B1 ±
t+- "
! S2 24 0 0x00B2 ²
! S3 24 0 0x00B3 ³
! aa 24 0 0x00B4 ´
\' "
! mc 24 0 0x00B5 µ
! ps 24 0 0x00B6 ¶
! pc 24 0 0x00B7 ·
! ac 24 0 0x00B8 ¸
! S1 24 0 0x00B9 ¹
! Om 24 0 0x00BA º
! Fc 24 0 0x00BB »
! 14 24 0 0x00BC ¼
! 12 24 0 0x00BD ½
! 34 24 0 0x00BE ¾
! r? 24 0 0x00BF ¿
! `A 24 0 0x00C0 À
! 'A 24 0 0x00C1 Á
! ^A 24 0 0x00C2 Â
! ~A 24 0 0x00C3 Ã
! :A 24 0 0x00C4 Ä
! oA 24 0 0x00C5 Å
! AE 24 0 0x00C6 Æ
! ,C 24 0 0x00C7 Ç
! `E 24 0 0x00C8 È
! 'E 24 0 0x00C9 É
! ^E 24 0 0x00CA Ê
! :E 24 0 0x00CB Ë
! `I 24 0 0x00CC Ì
! 'I 24 0 0x00CD Í
! ^I 24 0 0x00CE Î
! :I 24 0 0x00CF Ï
! -D 24 0 0x00D0 Ð
! ~N 24 0 0x00D1 Ñ
! `O 24 0 0x00D2 Ò
! 'O 24 0 0x00D3 Ó
! ^O 24 0 0x00D4 Ô
! ~O 24 0 0x00D5 Õ
! :O 24 0 0x00D6 Ö
! mu 24 0 0x00D7 ×
tmu "
! /O 24 0 0x00D8 Ø
! `U 24 0 0x00D9 Ù
! 'U 24 0 0x00DA Ú
! ^U 24 0 0x00DB Û
! :U 24 0 0x00DC Ü
! 'Y 24 0 0x00DD Ý
! TP 24 0 0x00DE Þ
! ss 24 0 0x00DF ß
! `a 24 0 0x00E0 à
! 'a 24 0 0x00E1 á
! ^a 24 0 0x00E2 â
! ~a 24 0 0x00E3 ã
! :a 24 0 0x00E4 ä
! oa 24 0 0x00E5 å
! ae 24 0 0x00E6 æ
! ,c 24 0 0x00E7 ç
! `e 24 0 0x00E8 è
! 'e 24 0 0x00E9 é
! ^e 24 0 0x00EA ê
! :e 24 0 0x00EB ë
! `i 24 0 0x00EC ì
! 'i 24 0 0x00ED í
! ^i 24 0 0x00EE î
! :i 24 0 0x00EF ï
! Sd 24 0 0x00F0 ð
! ~n 24 0 0x00F1 ñ
! `o 24 0 0x00F2 ò
! 'o 24 0 0x00F3 ó
! ^o 24 0 0x00F4 ô
! ~o 24 0 0x00F5 õ
! :o 24 0 0x00F6 ö
! di 24 0 0x00F7 ÷
tdi "
! /o 24 0 0x00F8 ø
! `u 24 0 0x00F9 ù
! 'u 24 0 0x00FA ú
! ^u 24 0 0x00FB û
! :u 24 0 0x00FC ü
! 'y 24 0 0x00FD ý
! Tp 24 0 0x00FE þ
! :y 24 0 0x00FF ÿ
! u0041_0306 24 0 0x0102 Ă
! u0061_0306 24 0 0x0103 ă
! u0041_0328 24 0 0x0104 Ą
! u0061_0328 24 0 0x0105 ą
! 'C 24 0 0x0106 Ć
! 'c 24 0 0x0107 ć
! u0043_030C 24 0 0x010C Č
! u0063_030C 24 0 0x010D č
! u0044_030C 24 0 0x010E Ď
! u0064_030C 24 0 0x010F ď
! u0110 24 0 0x0110 Đ
! u0111 24 0 0x0111 đ
! u0045_0328 24 0 0x0118 Ę
! u0065_0328 24 0 0x0119 ę
! u0045_030C 24 0 0x011A Ě
! u0065_030C 24 0 0x011B ě
! u0047_0306 24 0 0x011E Ğ
! u0067_0306 24 0 0x011F ğ
! u0049_0307 24 0 0x0130 İ
! .i 24 0 0x0131 ı
! IJ 24 0 0x0132 IJ
! ij 24 0 0x0133 ij
! u004C_0301 24 0 0x0139 Ĺ
! u006C_0301 24 0 0x013A ĺ
! u004C_030C 24 0 0x013D Ľ
! u006C_030C 24 0 0x013E ľ
! /L 24 0 0x0141 Ł
! /l 24 0 0x0142 ł
! u004E_0301 24 0 0x0143 Ń
! u006E_0301 24 0 0x0144 ń
! u004E_030C 24 0 0x0147 Ň
! u006E_030C 24 0 0x0148 ň
! u004F_030B 24 0 0x0150 Ŋ
! u006F_030B 24 0 0x0151 ŋ
! OE 24 0 0x0152 Œ
! oe 24 0 0x0153 œ
! u0052_0301 24 0 0x0154 Ŕ
! u0072_0301 24 0 0x0155 ŕ
! u0052_030C 24 0 0x0158 Ř
! u0072_030C 24 0 0x0159 ř
! u0053_0301 24 0 0x015A Ś
! u0073_0301 24 0 0x015B ś
! u0053_0327 24 0 0x015E Ş
! u0073_0327 24 0 0x015F ş
! vS 24 0 0x0160 Š
! vs 24 0 0x0161 š
! u0054_0327 24 0 0x0162 Ţ
! u0074_0327 24 0 0x0163 ţ
! u0054_030C 24 0 0x0164 Ť
! u0074_030C 24 0 0x0165 ť
! u0055_030A 24 0 0x016E Ů
! u0075_030A 24 0 0x016F ů
! u0055_030B 24 0 0x0170 Ű
! u0075_030B 24 0 0x0171 ű
! :Y 24 0 0x0178 Ÿ
! u005A_0301 24 0 0x0179 Ź
! u007A_0301 24 0 0x017A ź
! u005A_0307 24 0 0x017B Ż
! u007A_0307 24 0 0x017C ż
! vZ 24 0 0x017D Ž
! vz 24 0 0x017E ž
! Fn 24 0 0x0192 ƒ
! ah 24 0 0x02C7 ˇ
! ab 24 0 0x02D8 ˘
! a. 24 0 0x02D9 ˙
! ao 24 0 0x02DA ˚
! ho 24 0 0x02DB ˛
! a" 24 0 0x02DD ˝
! *A 24 0 0x0391 Α
! *B 24 0 0x0392 Β
! *G 24 0 0x0393 Γ
! *D 24 0 0x0394 Δ
! *E 24 0 0x0395 Ε
! *Z 24 0 0x0396 Ζ
! *Y 24 0 0x0397 Η
! *H 24 0 0x0398 Θ
! *I 24 0 0x0399 Ι
! *K 24 0 0x039A Κ
! *L 24 0 0x039B Λ
! *M 24 0 0x039C Μ
! *N 24 0 0x039D Ν
! *C 24 0 0x039E Ξ
! *O 24 0 0x039F Ο
! *P 24 0 0x03A0 Π
! *R 24 0 0x03A1 Ρ
! *S 24 0 0x03A3 Σ
! *T 24 0 0x03A4 Τ
! *U 24 0 0x03A5 Υ
! *F 24 0 0x03A6 Φ
! *X 24 0 0x03A7 Χ
! *Q 24 0 0x03A8 Ψ
! *W 24 0 0x03A9 Ω
! *a 24 0 0x03B1 α
! *b 24 0 0x03B2 β
! *g 24 0 0x03B3 γ
! *d 24 0 0x03B4 δ
! *e 24 0 0x03B5 ε
! *z 24 0 0x03B6 ζ
! *y 24 0 0x03B7 η
! *h 24 0 0x03B8 θ
! *i 24 0 0x03B9 ι
! *k 24 0 0x03BA κ
! *l 24 0 0x03BB λ
! *m 24 0 0x03BC μ
! *n 24 0 0x03BD ν
! *c 24 0 0x03BE ξ
! *o 24 0 0x03BF ο
! *p 24 0 0x03C0 π
! *r 24 0 0x03C1 ρ
! ts 24 0 0x03C2 ς
! *s 24 0 0x03C3 σ
! *t 24 0 0x03C4 τ
! *u 24 0 0x03C5 υ
! +f 24 0 0x03C6 φ
! *x 24 0 0x03C7 χ
! *q 24 0 0x03C8 ψ
! *w 24 0 0x03C9 ω
! +h 24 0 0x03D1 ϑ
! *f 24 0 0x03D5 ϕ
! +p 24 0 0x03D6 ϖ
! +e 24 0 0x03F5 ϵ
! u0415_0300 24 0 0x0400 Ѐ
! u0415_0308 24 0 0x0401 Ё
! u0402 24 0 0x0402 Ђ
! u0413_0301 24 0 0x0403 Ѓ
! u0404 24 0 0x0404 Є
! u0405 24 0 0x0405 Ѕ
! u0406 24 0 0x0406 І
! u0406_0308 24 0 0x0407 Ї
! u0408 24 0 0x0408 Ј
! u0409 24 0 0x0409 Љ
! u040A 24 0 0x040A Њ
! u040B 24 0 0x040B Ћ
! u041A_0301 24 0 0x040C Ќ
! u0418_0300 24 0 0x040D Ѝ
! u0423_0306 24 0 0x040E Ў
! u040F 24 0 0x040F Џ
! u0410 24 0 0x0410 А
! u0411 24 0 0x0411 Б
! u0412 24 0 0x0412 В
! u0413 24 0 0x0413 Г
! u0414 24 0 0x0414 Д
! u0415 24 0 0x0415 Е
! u0416 24 0 0x0416 Ж
! u0417 24 0 0x0417 З
! u0418 24 0 0x0418 И
! u0418_0306 24 0 0x0419 Й
! u041A 24 0 0x041A К
! u041B 24 0 0x041B Л
! u041C 24 0 0x041C М
! u041D 24 0 0x041D Н
! u041E 24 0 0x041E О
! u041F 24 0 0x041F П
! u0420 24 0 0x0420 Р
! u0421 24 0 0x0421 С
! u0422 24 0 0x0422 Т
! u0423 24 0 0x0423 У
! u0424 24 0 0x0424 Ф
! u0425 24 0 0x0425 Х
! u0426 24 0 0x0426 Ц
! u0427 24 0 0x0427 Ч
! u0428 24 0 0x0428 Ш
! u0429 24 0 0x0429 Щ
! u042A 24 0 0x042A Ъ
! u042B 24 0 0x042B Ы
! u042C 24 0 0x042C Ь
! u042D 24 0 0x042D Э
! u042E 24 0 0x042E Ю
! u042F 24 0 0x042F Я
! u0430 24 0 0x0430 а
! u0431 24 0 0x0431 б
! u0432 24 0 0x0432 в
! u0433 24 0 0x0433 г
! u0434 24 0 0x0434 д
! u0435 24 0 0x0435 е
! u0436 24 0 0x0436 ж
! u0437 24 0 0x0437 з
! u0438 24 0 0x0438 и
! u0438_0306 24 0 0x0439 й
! u043A 24 0 0x043A к
! u043B 24 0 0x043B л
! u043C 24 0 0x043C м
! u043D 24 0 0x043D н
! u043E 24 0 0x043E о
! u043F 24 0 0x043F п
! u0440 24 0 0x0440 р
! u0441 24 0 0x0441 с
! u0442 24 0 0x0442 т
! u0443 24 0 0x0443 у
! u0444 24 0 0x0444 ф
! u0445 24 0 0x0445 х
! u0446 24 0 0x0446 ц
! u0447 24 0 0x0447 ч
! u0448 24 0 0x0448 ш
! u0449 24 0 0x0449 щ
! u044A 24 0 0x044A ъ
! u044B 24 0 0x044B ы
! u044C 24 0 0x044C ь
! u044D 24 0 0x044D э
! u044E 24 0 0x044E ю
! u044F 24 0 0x044F я
! u0435_0300 24 0 0x0450 ѐ
! u0435_0308 24 0 0x0451 ё
! u0452 24 0 0x0452 ђ
! u0433_0301 24 0 0x0453 ѓ
! u0454 24 0 0x0454 є
! u0455 24 0 0x0455 ѕ
! u0456 24 0 0x0456 і
! u0456_0308 24 0 0x0457 ї
! u0458 24 0 0x0458 ј
! u0459 24 0 0x0459 љ
! u045A 24 0 0x045A њ
! u045B 24 0 0x045B ћ
! u043A_0301 24 0 0x045C ќ
! u0438_0300 24 0 0x045D ѝ
! u0443_0306 24 0 0x045E ў
! u045F 24 0 0x045F џ
! u0460 24 0 0x0460 Ѡ
! u0461 24 0 0x0461 ѡ
! u0462 24 0 0x0462 Ѣ
! u0463 24 0 0x0463 ѣ
! u0464 24 0 0x0464 Ѥ
! u0465 24 0 0x0465 ѥ
! u0466 24 0 0x0466 Ѧ
! u0467 24 0 0x0467 ѧ
! u0468 24 0 0x0468 Ѩ
! u0469 24 0 0x0469 ѩ
! u046A 24 0 0x046A Ѫ
! u046B 24 0 0x046B ѫ
! u046C 24 0 0x046C Ѭ
! u046D 24 0 0x046D ѭ
! u046E 24 0 0x046E Ѯ
! u046F 24 0 0x046F ѯ
! u0470 24 0 0x0470 Ѱ
! u0471 24 0 0x0471 ѱ
! u0472 24 0 0x0472 Ѳ
! u0473 24 0 0x0473 ѳ
! u0474 24 0 0x0474 Ѵ
! u0475 24 0 0x0475 ѵ
! u0474_030F 24 0 0x0476 Ѷ
! u0475_030F 24 0 0x0477 ѷ
! u0478 24 0 0x0478 Ѹ
! u0479 24 0 0x0479 ѹ
! u047A 24 0 0x047A Ѻ
! u047B 24 0 0x047B ѻ
! u047C 24 0 0x047C Ѽ
! u047D 24 0 0x047D ѽ
! u047E 24 0 0x047E Ѿ
! u047F 24 0 0x047F ѿ
! u0480 24 0 0x0480 Ҁ
! u0481 24 0 0x0481 ҁ
! u0482 24 0 0x0482 ҂
! u0483 0 0 0x0483 ҃
! u0484 0 0 0x0484 ҄
! u0485 0 0 0x0485 ҅
! u0486 0 0 0x0486 ҆
! u0488 0 0 0x0488 ҈
! u0489 0 0 0x0489 ҉
! u048A 24 0 0x048A Ҋ
! u048B 24 0 0x048B ҋ
! u048C 24 0 0x048C Ҍ
! u048D 24 0 0x048D ҍ
! u048E 24 0 0x048E Ҏ
! u048F 24 0 0x048F ҏ
! u0490 24 0 0x0490 Ґ
! u0491 24 0 0x0491 ґ
! u0492 24 0 0x0492 Ғ
! u0493 24 0 0x0493 ғ
! u0494 24 0 0x0494 Ҕ
! u0495 24 0 0x0495 ҕ
! u0496 24 0 0x0496 Җ
! u0497 24 0 0x0497 җ
! u0498 24 0 0x0498 Ҙ
! u0499 24 0 0x0499 ҙ
! u049A 24 0 0x049A Қ
! u049B 24 0 0x049B қ
! u049C 24 0 0x049C Ҝ
! u049D 24 0 0x049D ҝ
! u049E 24 0 0x049E Ҟ
! u049F 24 0 0x049F ҟ
! u04A0 24 0 0x04A0 Ҡ
! u04A1 24 0 0x04A1 ҡ
! u04A2 24 0 0x04A2 Ң
! u04A3 24 0 0x04A3 ң
! u04A4 24 0 0x04A4 Ҥ
! u04A5 24 0 0x04A5 ҥ
! u04A6 24 0 0x04A6 Ҧ
! u04A7 24 0 0x04A7 ҧ
! u04A8 24 0 0x04A8 Ҩ
! u04A9 24 0 0x04A9 ҩ
! u04AA 24 0 0x04AA Ҫ
! u04AB 24 0 0x04AB ҫ
! u04AC 24 0 0x04AC Ҭ
! u04AD 24 0 0x04AD ҭ
! u04AE 24 0 0x04AE Ү
! u04AF 24 0 0x04AF ү
! u04B0 24 0 0x04B0 Ұ
! u04B1 24 0 0x04B1 ұ
! u04B2 24 0 0x04B2 Ҳ
! u04B3 24 0 0x04B3 ҳ
! u04B4 24 0 0x04B4 Ҵ
! u04B5 24 0 0x04B5 ҵ
! u04B6 24 0 0x04B6 Ҷ
! u04B7 24 0 0x04B7 ҷ
! u04B8 24 0 0x04B8 Ҹ
! u04B9 24 0 0x04B9 ҹ
! u04BA 24 0 0x04BA Һ
! u04BB 24 0 0x04BB һ
! u04BC 24 0 0x04BC Ҽ
! u04BD 24 0 0x04BD ҽ
! u04BE 24 0 0x04BE Ҿ
! u04BF 24 0 0x04BF ҿ
! u04C0 24 0 0x04C0 Ӏ
! u0416_0306 24 0 0x04C1 Ӂ
! u0436_0306 24 0 0x04C2 ӂ
! u04C3 24 0 0x04C3 Ӄ
! u04C4 24 0 0x04C4 ӄ
! u04C5 24 0 0x04C5 Ӆ
! u04C6 24 0 0x04C6 ӆ
! u04C7 24 0 0x04C7 Ӈ
! u04C8 24 0 0x04C8 ӈ
! u04C9 24 0 0x04C9 Ӊ
! u04CA 24 0 0x04CA ӊ
! u04CB 24 0 0x04CB Ӌ
! u04CC 24 0 0x04CC ӌ
! u04CD 24 0 0x04CD Ӎ
! u04CE 24 0 0x04CE ӎ
! u0410_0306 24 0 0x04D0 Ӑ
! u0430_0306 24 0 0x04D1 ӑ
! u0410_0308 24 0 0x04D2 Ӓ
! u0430_0308 24 0 0x04D3 ӓ
! u04D4 24 0 0x04D4 Ӕ
! u04D5 24 0 0x04D5 ӕ
! u0415_0306 24 0 0x04D6 Ӗ
! u0435_0306 24 0 0x04D7 ӗ
! u04D8 24 0 0x04D8 Ә
! u04D9 24 0 0x04D9 ә
! u04D8_0308 24 0 0x04DA Ӛ
! u04D9_0308 24 0 0x04DB ӛ
! u0416_0308 24 0 0x04DC Ӝ
! u0436_0308 24 0 0x04DD ӝ
! u0417_0308 24 0 0x04DE Ӟ
! u0437_0308 24 0 0x04DF ӟ
! u04E0 24 0 0x04E0 Ӡ
! u04E1 24 0 0x04E1 ӡ
! u0418_0304 24 0 0x04E2 Ӣ
! u0438_0304 24 0 0x04E3 ӣ
! u0418_0308 24 0 0x04E4 Ӥ
! u0438_0308 24 0 0x04E5 ӥ
! u041E_0308 24 0 0x04E6 Ӧ
! u043E_0308 24 0 0x04E7 ӧ
! u04E8 24 0 0x04E8 Ө
! u04E9 24 0 0x04E9 ө
! u04E8_0308 24 0 0x04EA Ӫ
! u04E9_0308 24 0 0x04EB ӫ
! u042D_0308 24 0 0x04EC Ӭ
! u044D_0308 24 0 0x04ED ӭ
! u0423_0304 24 0 0x04EE Ӯ
! u0443_0304 24 0 0x04EF ӯ
! u0423_0308 24 0 0x04F0 Ӱ
! u0443_0308 24 0 0x04F1 ӱ
! u0423_030B 24 0 0x04F2 Ӳ
! u0443_030B 24 0 0x04F3 ӳ
! u0427_0308 24 0 0x04F4 Ӵ
! u0447_0308 24 0 0x04F5 ӵ
! u042B_0308 24 0 0x04F8 Ӹ
! u044B_0308 24 0 0x04F9 ӹ
! u0500 24 0 0x0500 Ԁ
! u0501 24 0 0x0501 ԁ
! u0502 24 0 0x0502 Ԃ
! u0503 24 0 0x0503 ԃ
! u0504 24 0 0x0504 Ԅ
! u0505 24 0 0x0505 ԅ
! u0506 24 0 0x0506 Ԇ
! u0507 24 0 0x0507 ԇ
! u0508 24 0 0x0508 Ԉ
! u0509 24 0 0x0509 ԉ
! u050A 24 0 0x050A Ԋ
! u050B 24 0 0x050B ԋ
! u050C 24 0 0x050C Ԍ
! u050D 24 0 0x050D ԍ
! u050E 24 0 0x050E Ԏ
! u050F 24 0 0x050F ԏ
! en 24 0 0x2013 –
! em 24 0 0x2014 —
! ` 24 0 0x2018 ‘
oq "
! ' 24 0 0x2019 ’
cq "
! bq 24 0 0x201A ‚
! lq 24 0 0x201C “
! rq 24 0 0x201D ”
! Bq 24 0 0x201E „
! dg 24 0 0x2020 †
! dd 24 0 0x2021 ‡
! bu 24 0 0x2022 •
! %0 24 0 0x2030 ‰
! fm 24 0 0x2032 ′
! sd 24 0 0x2033 ″
! fo 24 0 0x2039 ‹
! fc 24 0 0x203A ›
! rn 24 0 0x203E ‾
! f/ 24 0 0x2044 ⁄
! Eu 24 0 0x20AC €
eu "
! -h 24 0 0x210F ℏ
hbar "
! Im 24 0 0x2111 ℑ
! wp 24 0 0x2118 ℘
! Re 24 0 0x211C ℜ
! tm 24 0 0x2122 ™
! Ah 24 0 0x2135 ℵ
! 18 24 0 0x215B ⅛
! 38 24 0 0x215C ⅜
! 58 24 0 0x215D ⅝
! 78 24 0 0x215E ⅞
! <- 24 0 0x2190 ←
! ua 24 0 0x2191 ↑
! -> 24 0 0x2192 →
! da 24 0 0x2193 ↓
! <> 24 0 0x2194 ↔
! va 24 0 0x2195 ↕
! CR 24 0 0x21B5 ↵
! lA 24 0 0x21D0 ⇐
! uA 24 0 0x21D1 ⇑
! rA 24 0 0x21D2 ⇒
! dA 24 0 0x21D3 ⇓
! hA 24 0 0x21D4 ⇔
! vA 24 0 0x21D5 ⇕
! fa 24 0 0x2200 ∀
! pd 24 0 0x2202 ∂
! te 24 0 0x2203 ∃
! es 24 0 0x2205 ∅
! gr 24 0 0x2207 ∇
! mo 24 0 0x2208 ∈
! nm 24 0 0x2209 ∉
! st 24 0 0x220B ∋
! product 24 0 0x220F ∏
! coproduct 24 0 0x2210 ∐
! sum 24 0 0x2211 ∑
! \- 24 0 0x2212 −
mi "
! -+ 24 0 0x2213 ∓
! ** 24 0 0x2217 ∗
! sr 24 0 0x221A √
sqrt "
! pt 24 0 0x221D ∝
! if 24 0 0x221E ∞
! /_ 24 0 0x2220 ∠
! AN 24 0 0x2227 ∧
! OR 24 0 0x2228 ∨
! ca 24 0 0x2229 ∩
! cu 24 0 0x222A ∪
! is 24 0 0x222B ∫
integral "
! tf 24 0 0x2234 ∴
3d "
! ap 24 0 0x223C ∼
! |= 24 0 0x2243 ≃
! =~ 24 0 0x2245 ≅
! ~~ 24 0 0x2248 ≈
~= "
! != 24 0 0x2260 ≠
! == 24 0 0x2261 ≡
! ne 24 0 0x2262 ≢
! <= 24 0 0x2264 ≤
! >= 24 0 0x2265 ≥
! << 24 0 0x226A ≪
! >> 24 0 0x226B ≫
! sb 24 0 0x2282 ⊂
! sp 24 0 0x2283 ⊃
! nb 24 0 0x2284 ⊄
! nc 24 0 0x2285 ⊅
! ib 24 0 0x2286 ⊆
! ip 24 0 0x2287 ⊇
! c+ 24 0 0x2295 ⊕
! c* 24 0 0x2297 ⊗
! pp 24 0 0x22A5 ⊥
! md 24 0 0x22C5 ⋅
! lc 24 0 0x2308 ⌈
! rc 24 0 0x2309 ⌉
! lf 24 0 0x230A ⌊
! rf 24 0 0x230B ⌋
! la 24 0 0x2329 ⟨
! ra 24 0 0x232A ⟩
! parenlefttp 24 0 0x239B ⎛
! parenleftex 24 0 0x239C ⎜
! parenleftbt 24 0 0x239D ⎝
! parenrighttp 24 0 0x239E ⎞
! parenrightex 24 0 0x239F ⎟
! parenrightbt 24 0 0x23A0 ⎠
! bracketlefttp 24 0 0x23A1 ⎡
! bracketleftex 24 0 0x23A2 ⎢
! bracketleftbt 24 0 0x23A3 ⎣
! bracketrighttp 24 0 0x23A4 ⎤
! bracketrightex 24 0 0x23A5 ⎥
! bracketrightbt 24 0 0x23A6 ⎦
! lt 24 0 0x23A7 ⎧
bracelefttp "
! lk 24 0 0x23A8 ⎨
braceleftmid "
! lb 24 0 0x23A9 ⎩
braceleftbt "
! bv 24 0 0x23AA ⎪
braceex "
braceleftex "
bracerightex "
! rt 24 0 0x23AB ⎫
bracerighttp "
! rk 24 0 0x23AC ⎬
bracerightmid "
! rb 24 0 0x23AD ⎭
bracerightbt "
! u23AE 24 0 0x23AE ⎮
! an 24 0 0x23AF ⎯
! br 24 0 0x2502 │
! sq 24 0 0x25A1 □
! lz 24 0 0x25CA ◊
! ci 24 0 0x25CB ○
! lh 24 0 0x261C ☜
! rh 24 0 0x261E ☞
! SP 24 0 0x2660 ♠
! CL 24 0 0x2663 ♣
! HE 24 0 0x2665 ♥
! DI 24 0 0x2666 ♦
! OK 24 0 0x2713 ✓
--- 118,746 ----
a~ 24 0 0x007E
~ "
ti "
! --- 24 0 0x00A0
! r! 24 0 0x00A1
! ct 24 0 0x00A2
! Po 24 0 0x00A3
! Cs 24 0 0x00A4
! Ye 24 0 0x00A5
! bb 24 0 0x00A6
! sc 24 0 0x00A7
! ad 24 0 0x00A8
! co 24 0 0x00A9
! Of 24 0 0x00AA
! Fo 24 0 0x00AB
! no 24 0 0x00AC
tno "
! rg 24 0 0x00AE
! a- 24 0 0x00AF
! de 24 0 0x00B0
! +- 24 0 0x00B1
t+- "
! S2 24 0 0x00B2
! S3 24 0 0x00B3
! aa 24 0 0x00B4
\' "
! mc 24 0 0x00B5
! ps 24 0 0x00B6
! pc 24 0 0x00B7
! ac 24 0 0x00B8
! S1 24 0 0x00B9
! Om 24 0 0x00BA
! Fc 24 0 0x00BB
! 14 24 0 0x00BC
! 12 24 0 0x00BD
! 34 24 0 0x00BE
! r? 24 0 0x00BF
! `A 24 0 0x00C0
! 'A 24 0 0x00C1
! ^A 24 0 0x00C2
! ~A 24 0 0x00C3
! :A 24 0 0x00C4
! oA 24 0 0x00C5
! AE 24 0 0x00C6
! ,C 24 0 0x00C7
! `E 24 0 0x00C8
! 'E 24 0 0x00C9
! ^E 24 0 0x00CA
! :E 24 0 0x00CB
! `I 24 0 0x00CC
! 'I 24 0 0x00CD
! ^I 24 0 0x00CE
! :I 24 0 0x00CF
! -D 24 0 0x00D0
! ~N 24 0 0x00D1
! `O 24 0 0x00D2
! 'O 24 0 0x00D3
! ^O 24 0 0x00D4
! ~O 24 0 0x00D5
! :O 24 0 0x00D6
! mu 24 0 0x00D7
tmu "
! /O 24 0 0x00D8
! `U 24 0 0x00D9
! 'U 24 0 0x00DA
! ^U 24 0 0x00DB
! :U 24 0 0x00DC
! 'Y 24 0 0x00DD
! TP 24 0 0x00DE
! ss 24 0 0x00DF
! `a 24 0 0x00E0
! 'a 24 0 0x00E1
! ^a 24 0 0x00E2
! ~a 24 0 0x00E3
! :a 24 0 0x00E4
! oa 24 0 0x00E5
! ae 24 0 0x00E6
! ,c 24 0 0x00E7
! `e 24 0 0x00E8
! 'e 24 0 0x00E9
! ^e 24 0 0x00EA
! :e 24 0 0x00EB
! `i 24 0 0x00EC
! 'i 24 0 0x00ED
! ^i 24 0 0x00EE
! :i 24 0 0x00EF
! Sd 24 0 0x00F0
! ~n 24 0 0x00F1
! `o 24 0 0x00F2
! 'o 24 0 0x00F3
! ^o 24 0 0x00F4
! ~o 24 0 0x00F5
! :o 24 0 0x00F6
! di 24 0 0x00F7
tdi "
! /o 24 0 0x00F8
! `u 24 0 0x00F9
! 'u 24 0 0x00FA
! ^u 24 0 0x00FB
! :u 24 0 0x00FC
! 'y 24 0 0x00FD
! Tp 24 0 0x00FE
! :y 24 0 0x00FF
! u0041_0306 24 0 0x0102
! u0061_0306 24 0 0x0103
! u0041_0328 24 0 0x0104
! u0061_0328 24 0 0x0105
! 'C 24 0 0x0106
! 'c 24 0 0x0107
! u0043_030C 24 0 0x010C
! u0063_030C 24 0 0x010D
! u0044_030C 24 0 0x010E
! u0064_030C 24 0 0x010F
! u0110 24 0 0x0110
! u0111 24 0 0x0111
! u0045_0328 24 0 0x0118
! u0065_0328 24 0 0x0119
! u0045_030C 24 0 0x011A
! u0065_030C 24 0 0x011B
! u0047_0306 24 0 0x011E
! u0067_0306 24 0 0x011F
! u0049_0307 24 0 0x0130
! .i 24 0 0x0131
! IJ 24 0 0x0132
! ij 24 0 0x0133
! u004C_0301 24 0 0x0139
! u006C_0301 24 0 0x013A
! u004C_030C 24 0 0x013D
! u006C_030C 24 0 0x013E
! /L 24 0 0x0141
! /l 24 0 0x0142
! u004E_0301 24 0 0x0143
! u006E_0301 24 0 0x0144
! u004E_030C 24 0 0x0147
! u006E_030C 24 0 0x0148
! u004F_030B 24 0 0x0150
! u006F_030B 24 0 0x0151
! OE 24 0 0x0152
! oe 24 0 0x0153
! u0052_0301 24 0 0x0154
! u0072_0301 24 0 0x0155
! u0052_030C 24 0 0x0158
! u0072_030C 24 0 0x0159
! u0053_0301 24 0 0x015A
! u0073_0301 24 0 0x015B
! u0053_0327 24 0 0x015E
! u0073_0327 24 0 0x015F
! vS 24 0 0x0160
! vs 24 0 0x0161
! u0054_0327 24 0 0x0162
! u0074_0327 24 0 0x0163
! u0054_030C 24 0 0x0164
! u0074_030C 24 0 0x0165
! u0055_030A 24 0 0x016E
! u0075_030A 24 0 0x016F
! u0055_030B 24 0 0x0170
! u0075_030B 24 0 0x0171
! :Y 24 0 0x0178
! u005A_0301 24 0 0x0179
! u007A_0301 24 0 0x017A
! u005A_0307 24 0 0x017B
! u007A_0307 24 0 0x017C
! vZ 24 0 0x017D
! vz 24 0 0x017E
! Fn 24 0 0x0192
! ah 24 0 0x02C7
! ab 24 0 0x02D8
! a. 24 0 0x02D9
! ao 24 0 0x02DA
! ho 24 0 0x02DB
! a" 24 0 0x02DD
! *A 24 0 0x0391
! *B 24 0 0x0392
! *G 24 0 0x0393
! *D 24 0 0x0394
! *E 24 0 0x0395
! *Z 24 0 0x0396
! *Y 24 0 0x0397
! *H 24 0 0x0398
! *I 24 0 0x0399
! *K 24 0 0x039A
! *L 24 0 0x039B
! *M 24 0 0x039C
! *N 24 0 0x039D
! *C 24 0 0x039E
! *O 24 0 0x039F
! *P 24 0 0x03A0
! *R 24 0 0x03A1
! *S 24 0 0x03A3
! *T 24 0 0x03A4
! *U 24 0 0x03A5
! *F 24 0 0x03A6
! *X 24 0 0x03A7
! *Q 24 0 0x03A8
! *W 24 0 0x03A9
! *a 24 0 0x03B1
! *b 24 0 0x03B2
! *g 24 0 0x03B3
! *d 24 0 0x03B4
! *e 24 0 0x03B5
! *z 24 0 0x03B6
! *y 24 0 0x03B7
! *h 24 0 0x03B8
! *i 24 0 0x03B9
! *k 24 0 0x03BA
! *l 24 0 0x03BB
! *m 24 0 0x03BC
! *n 24 0 0x03BD
! *c 24 0 0x03BE
! *o 24 0 0x03BF
! *p 24 0 0x03C0
! *r 24 0 0x03C1
! ts 24 0 0x03C2
! *s 24 0 0x03C3
! *t 24 0 0x03C4
! *u 24 0 0x03C5
! +f 24 0 0x03C6
! *x 24 0 0x03C7
! *q 24 0 0x03C8
! *w 24 0 0x03C9
! +h 24 0 0x03D1
! *f 24 0 0x03D5
! +p 24 0 0x03D6
! +e 24 0 0x03F5
! u0415_0300 24 0 0x0400
! u0415_0308 24 0 0x0401
! u0402 24 0 0x0402
! u0413_0301 24 0 0x0403
! u0404 24 0 0x0404
! u0405 24 0 0x0405
! u0406 24 0 0x0406
! u0406_0308 24 0 0x0407
! u0408 24 0 0x0408
! u0409 24 0 0x0409
! u040A 24 0 0x040A
! u040B 24 0 0x040B
! u041A_0301 24 0 0x040C
! u0418_0300 24 0 0x040D
! u0423_0306 24 0 0x040E
! u040F 24 0 0x040F
! u0410 24 0 0x0410
! u0411 24 0 0x0411
! u0412 24 0 0x0412
! u0413 24 0 0x0413
! u0414 24 0 0x0414
! u0415 24 0 0x0415
! u0416 24 0 0x0416
! u0417 24 0 0x0417
! u0418 24 0 0x0418
! u0418_0306 24 0 0x0419
! u041A 24 0 0x041A
! u041B 24 0 0x041B
! u041C 24 0 0x041C
! u041D 24 0 0x041D
! u041E 24 0 0x041E
! u041F 24 0 0x041F
! u0420 24 0 0x0420
! u0421 24 0 0x0421
! u0422 24 0 0x0422
! u0423 24 0 0x0423
! u0424 24 0 0x0424
! u0425 24 0 0x0425
! u0426 24 0 0x0426
! u0427 24 0 0x0427
! u0428 24 0 0x0428
! u0429 24 0 0x0429
! u042A 24 0 0x042A
! u042B 24 0 0x042B
! u042C 24 0 0x042C
! u042D 24 0 0x042D
! u042E 24 0 0x042E
! u042F 24 0 0x042F
! u0430 24 0 0x0430
! u0431 24 0 0x0431
! u0432 24 0 0x0432
! u0433 24 0 0x0433
! u0434 24 0 0x0434
! u0435 24 0 0x0435
! u0436 24 0 0x0436
! u0437 24 0 0x0437
! u0438 24 0 0x0438
! u0438_0306 24 0 0x0439
! u043A 24 0 0x043A
! u043B 24 0 0x043B
! u043C 24 0 0x043C
! u043D 24 0 0x043D
! u043E 24 0 0x043E
! u043F 24 0 0x043F
! u0440 24 0 0x0440
! u0441 24 0 0x0441
! u0442 24 0 0x0442
! u0443 24 0 0x0443
! u0444 24 0 0x0444
! u0445 24 0 0x0445
! u0446 24 0 0x0446
! u0447 24 0 0x0447
! u0448 24 0 0x0448
! u0449 24 0 0x0449
! u044A 24 0 0x044A
! u044B 24 0 0x044B
! u044C 24 0 0x044C
! u044D 24 0 0x044D
! u044E 24 0 0x044E
! u044F 24 0 0x044F
! u0435_0300 24 0 0x0450
! u0435_0308 24 0 0x0451
! u0452 24 0 0x0452
! u0433_0301 24 0 0x0453
! u0454 24 0 0x0454
! u0455 24 0 0x0455
! u0456 24 0 0x0456
! u0456_0308 24 0 0x0457
! u0458 24 0 0x0458
! u0459 24 0 0x0459
! u045A 24 0 0x045A
! u045B 24 0 0x045B
! u043A_0301 24 0 0x045C
! u0438_0300 24 0 0x045D
! u0443_0306 24 0 0x045E
! u045F 24 0 0x045F
! u0460 24 0 0x0460
! u0461 24 0 0x0461
! u0462 24 0 0x0462
! u0463 24 0 0x0463
! u0464 24 0 0x0464
! u0465 24 0 0x0465
! u0466 24 0 0x0466
! u0467 24 0 0x0467
! u0468 24 0 0x0468
! u0469 24 0 0x0469
! u046A 24 0 0x046A
! u046B 24 0 0x046B
! u046C 24 0 0x046C
! u046D 24 0 0x046D
! u046E 24 0 0x046E
! u046F 24 0 0x046F
! u0470 24 0 0x0470
! u0471 24 0 0x0471
! u0472 24 0 0x0472
! u0473 24 0 0x0473
! u0474 24 0 0x0474
! u0475 24 0 0x0475
! u0474_030F 24 0 0x0476
! u0475_030F 24 0 0x0477
! u0478 24 0 0x0478
! u0479 24 0 0x0479
! u047A 24 0 0x047A
! u047B 24 0 0x047B
! u047C 24 0 0x047C
! u047D 24 0 0x047D
! u047E 24 0 0x047E
! u047F 24 0 0x047F
! u0480 24 0 0x0480
! u0481 24 0 0x0481
! u0482 24 0 0x0482
! u0483 0 0 0x0483
! u0484 0 0 0x0484
! u0485 0 0 0x0485
! u0486 0 0 0x0486
! u0488 0 0 0x0488
! u0489 0 0 0x0489
! u048A 24 0 0x048A
! u048B 24 0 0x048B
! u048C 24 0 0x048C
! u048D 24 0 0x048D
! u048E 24 0 0x048E
! u048F 24 0 0x048F
! u0490 24 0 0x0490
! u0491 24 0 0x0491
! u0492 24 0 0x0492
! u0493 24 0 0x0493
! u0494 24 0 0x0494
! u0495 24 0 0x0495
! u0496 24 0 0x0496
! u0497 24 0 0x0497
! u0498 24 0 0x0498
! u0499 24 0 0x0499
! u049A 24 0 0x049A
! u049B 24 0 0x049B
! u049C 24 0 0x049C
! u049D 24 0 0x049D
! u049E 24 0 0x049E
! u049F 24 0 0x049F
! u04A0 24 0 0x04A0
! u04A1 24 0 0x04A1
! u04A2 24 0 0x04A2
! u04A3 24 0 0x04A3
! u04A4 24 0 0x04A4
! u04A5 24 0 0x04A5
! u04A6 24 0 0x04A6
! u04A7 24 0 0x04A7
! u04A8 24 0 0x04A8
! u04A9 24 0 0x04A9
! u04AA 24 0 0x04AA
! u04AB 24 0 0x04AB
! u04AC 24 0 0x04AC
! u04AD 24 0 0x04AD
! u04AE 24 0 0x04AE
! u04AF 24 0 0x04AF
! u04B0 24 0 0x04B0
! u04B1 24 0 0x04B1
! u04B2 24 0 0x04B2
! u04B3 24 0 0x04B3
! u04B4 24 0 0x04B4
! u04B5 24 0 0x04B5
! u04B6 24 0 0x04B6
! u04B7 24 0 0x04B7
! u04B8 24 0 0x04B8
! u04B9 24 0 0x04B9
! u04BA 24 0 0x04BA
! u04BB 24 0 0x04BB
! u04BC 24 0 0x04BC
! u04BD 24 0 0x04BD
! u04BE 24 0 0x04BE
! u04BF 24 0 0x04BF
! u04C0 24 0 0x04C0
! u0416_0306 24 0 0x04C1
! u0436_0306 24 0 0x04C2
! u04C3 24 0 0x04C3
! u04C4 24 0 0x04C4
! u04C5 24 0 0x04C5
! u04C6 24 0 0x04C6
! u04C7 24 0 0x04C7
! u04C8 24 0 0x04C8
! u04C9 24 0 0x04C9
! u04CA 24 0 0x04CA
! u04CB 24 0 0x04CB
! u04CC 24 0 0x04CC
! u04CD 24 0 0x04CD
! u04CE 24 0 0x04CE
! u0410_0306 24 0 0x04D0
! u0430_0306 24 0 0x04D1
! u0410_0308 24 0 0x04D2
! u0430_0308 24 0 0x04D3
! u04D4 24 0 0x04D4
! u04D5 24 0 0x04D5
! u0415_0306 24 0 0x04D6
! u0435_0306 24 0 0x04D7
! u04D8 24 0 0x04D8
! u04D9 24 0 0x04D9
! u04D8_0308 24 0 0x04DA
! u04D9_0308 24 0 0x04DB
! u0416_0308 24 0 0x04DC
! u0436_0308 24 0 0x04DD
! u0417_0308 24 0 0x04DE
! u0437_0308 24 0 0x04DF
! u04E0 24 0 0x04E0
! u04E1 24 0 0x04E1
! u0418_0304 24 0 0x04E2
! u0438_0304 24 0 0x04E3
! u0418_0308 24 0 0x04E4
! u0438_0308 24 0 0x04E5
! u041E_0308 24 0 0x04E6
! u043E_0308 24 0 0x04E7
! u04E8 24 0 0x04E8
! u04E9 24 0 0x04E9
! u04E8_0308 24 0 0x04EA
! u04E9_0308 24 0 0x04EB
! u042D_0308 24 0 0x04EC
! u044D_0308 24 0 0x04ED
! u0423_0304 24 0 0x04EE
! u0443_0304 24 0 0x04EF
! u0423_0308 24 0 0x04F0
! u0443_0308 24 0 0x04F1
! u0423_030B 24 0 0x04F2
! u0443_030B 24 0 0x04F3
! u0427_0308 24 0 0x04F4
! u0447_0308 24 0 0x04F5
! u042B_0308 24 0 0x04F8
! u044B_0308 24 0 0x04F9
! u0500 24 0 0x0500
! u0501 24 0 0x0501
! u0502 24 0 0x0502
! u0503 24 0 0x0503
! u0504 24 0 0x0504
! u0505 24 0 0x0505
! u0506 24 0 0x0506
! u0507 24 0 0x0507
! u0508 24 0 0x0508
! u0509 24 0 0x0509
! u050A 24 0 0x050A
! u050B 24 0 0x050B
! u050C 24 0 0x050C
! u050D 24 0 0x050D
! u050E 24 0 0x050E
! u050F 24 0 0x050F
! en 24 0 0x2013
! em 24 0 0x2014
! ` 24 0 0x2018
oq "
! ' 24 0 0x2019
cq "
! bq 24 0 0x201A
! lq 24 0 0x201C
! rq 24 0 0x201D
! Bq 24 0 0x201E
! dg 24 0 0x2020
! dd 24 0 0x2021
! bu 24 0 0x2022
! %0 24 0 0x2030
! fm 24 0 0x2032
! sd 24 0 0x2033
! fo 24 0 0x2039
! fc 24 0 0x203A
! rn 24 0 0x203E
! f/ 24 0 0x2044
! Eu 24 0 0x20AC
eu "
! -h 24 0 0x210F
hbar "
! Im 24 0 0x2111
! wp 24 0 0x2118
! Re 24 0 0x211C
! tm 24 0 0x2122
! Ah 24 0 0x2135
! 18 24 0 0x215B
! 38 24 0 0x215C
! 58 24 0 0x215D
! 78 24 0 0x215E
! <- 24 0 0x2190
! ua 24 0 0x2191
! -> 24 0 0x2192
! da 24 0 0x2193
! <> 24 0 0x2194
! va 24 0 0x2195
! CR 24 0 0x21B5
! lA 24 0 0x21D0
! uA 24 0 0x21D1
! rA 24 0 0x21D2
! dA 24 0 0x21D3
! hA 24 0 0x21D4
! vA 24 0 0x21D5
! fa 24 0 0x2200
! pd 24 0 0x2202
! te 24 0 0x2203
! es 24 0 0x2205
! gr 24 0 0x2207
! mo 24 0 0x2208
! nm 24 0 0x2209
! st 24 0 0x220B
! product 24 0 0x220F
! coproduct 24 0 0x2210
! sum 24 0 0x2211
! \- 24 0 0x2212
mi "
! -+ 24 0 0x2213
! ** 24 0 0x2217
! sr 24 0 0x221A
sqrt "
! pt 24 0 0x221D
! if 24 0 0x221E
! /_ 24 0 0x2220
! AN 24 0 0x2227
! OR 24 0 0x2228
! ca 24 0 0x2229
! cu 24 0 0x222A
! is 24 0 0x222B
integral "
! tf 24 0 0x2234
3d "
! ap 24 0 0x223C
! |= 24 0 0x2243
! =~ 24 0 0x2245
! ~~ 24 0 0x2248
~= "
! != 24 0 0x2260
! == 24 0 0x2261
! ne 24 0 0x2262
! <= 24 0 0x2264
! >= 24 0 0x2265
! << 24 0 0x226A
! >> 24 0 0x226B
! sb 24 0 0x2282
! sp 24 0 0x2283
! nb 24 0 0x2284
! nc 24 0 0x2285
! ib 24 0 0x2286
! ip 24 0 0x2287
! c+ 24 0 0x2295
! c* 24 0 0x2297
! pp 24 0 0x22A5
! md 24 0 0x22C5
! lc 24 0 0x2308
! rc 24 0 0x2309
! lf 24 0 0x230A
! rf 24 0 0x230B
! la 24 0 0x2329
! ra 24 0 0x232A
! parenlefttp 24 0 0x239B
! parenleftex 24 0 0x239C
! parenleftbt 24 0 0x239D
! parenrighttp 24 0 0x239E
! parenrightex 24 0 0x239F
! parenrightbt 24 0 0x23A0
! bracketlefttp 24 0 0x23A1
! bracketleftex 24 0 0x23A2
! bracketleftbt 24 0 0x23A3
! bracketrighttp 24 0 0x23A4
! bracketrightex 24 0 0x23A5
! bracketrightbt 24 0 0x23A6
! lt 24 0 0x23A7
bracelefttp "
! lk 24 0 0x23A8
braceleftmid "
! lb 24 0 0x23A9
braceleftbt "
! bv 24 0 0x23AA
braceex "
braceleftex "
bracerightex "
! rt 24 0 0x23AB
bracerighttp "
! rk 24 0 0x23AC
bracerightmid "
! rb 24 0 0x23AD
bracerightbt "
! u23AE 24 0 0x23AE
! an 24 0 0x23AF
! br 24 0 0x2502
! sq 24 0 0x25A1
! lz 24 0 0x25CA
! ci 24 0 0x25CB
! lh 24 0 0x261C
! rh 24 0 0x261E
! SP 24 0 0x2660
! CL 24 0 0x2663
! HE 24 0 0x2665
! DI 24 0 0x2666
! OK 24 0 0x2713
*** groff-20060113.orig/src/devices/grohtml/post-html.cpp 2006-01-22
21:44:18.000000000 +0100
--- groff-20060113/src/devices/grohtml/post-html.cpp 2006-01-17
00:12:15.000000000 +0100
***************
*** 67,73 ****
* prototypes
*/
! char *get_html_translation (font *f, const string &name);
int char_translate_to_html (font *f, char *buf, int buflen, unsigned char ch,
int b, int and_single);
--- 67,74 ----
* prototypes
*/
! const char *get_html_translation (font *f, const string &name);
! static const char *get_html_entity(unsigned int code);
int char_translate_to_html (font *f, char *buf, int buflen, unsigned char ch,
int b, int and_single);
***************
*** 1392,1398 ****
int is_tag)
{
string html_string;
! char *html_glyph;
int i=0;
if (s->f == NULL)
--- 1393,1399 ----
int is_tag)
{
string html_string;
! const char *html_glyph;
int i=0;
if (s->f == NULL)
***************
*** 4239,4250 ****
if (sbuf_style.f == NULL)
return;
! char *html_glyph = NULL;
unsigned int code = sbuf_style.f->get_code(idx);
if (s.empty()) {
if (sbuf_style.f->contains(idx))
! html_glyph = (char *)sbuf_style.f->get_special_device_encoding(idx);
else
html_glyph = NULL;
--- 4240,4251 ----
if (sbuf_style.f == NULL)
return;
! const char *html_glyph = NULL;
unsigned int code = sbuf_style.f->get_code(idx);
if (s.empty()) {
if (sbuf_style.f->contains(idx))
! html_glyph = get_html_entity(sbuf_style.f->get_code(idx));
else
html_glyph = NULL;
***************
*** 4297,4303 ****
* return the device encoding for such character.
*/
! char *get_html_translation (font *f, const string &name)
{
int idx;
--- 4298,4304 ----
* return the device encoding for such character.
*/
! const char *get_html_translation (font *f, const string &name)
{
int idx;
***************
*** 4306,4318 ****
else {
idx = f->name_to_index((char *)(name + '\0').contents());
if (f->contains(idx))
! return (char *)f->get_special_device_encoding(idx);
else
return NULL;
}
}
/*
* overstrike - returns TRUE if the glyph (i, name) is going to overstrike
* a previous glyph in sbuf.
* If TRUE the font is changed to bold and the previous sbuf
--- 4307,4578 ----
else {
idx = f->name_to_index((char *)(name + '\0').contents());
if (f->contains(idx))
! return get_html_entity(f->get_code(idx));
else
return NULL;
}
}
/*
+ * get_html_entity - given a Unicode character's code point, return a
+ * HTML entity that represents the character, if the
+ * character cannot represent itself in all contexts.
+ * The return value, if non-NULL, is allocated in a static buffer and is
+ * only valid until the next call of this function.
+ */
+ static const char *get_html_entity (unsigned int code)
+ {
+ if (code < UNICODE_DESC_START) {
+ switch (code) {
+ case 0x0022: return """;
+ case 0x0026: return "&";
+ case 0x003C: return "<";
+ case 0x003E: return ">";
+ default: return NULL;
+ }
+ } else {
+ switch (code) {
+ case 0x00A0: return " ";
+ case 0x00A1: return "¡";
+ case 0x00A2: return "¢";
+ case 0x00A3: return "£";
+ case 0x00A4: return "¤";
+ case 0x00A5: return "¥";
+ case 0x00A6: return "¦";
+ case 0x00A7: return "§";
+ case 0x00A8: return "¨";
+ case 0x00A9: return "©";
+ case 0x00AA: return "ª";
+ case 0x00AB: return "«";
+ case 0x00AC: return "¬";
+ case 0x00AE: return "®";
+ case 0x00AF: return "¯";
+ case 0x00B0: return "°";
+ case 0x00B1: return "±";
+ case 0x00B2: return "²";
+ case 0x00B3: return "³";
+ case 0x00B4: return "´";
+ case 0x00B5: return "µ";
+ case 0x00B6: return "¶";
+ case 0x00B7: return "·";
+ case 0x00B8: return "¸";
+ case 0x00B9: return "¹";
+ case 0x00BA: return "º";
+ case 0x00BB: return "»";
+ case 0x00BC: return "¼";
+ case 0x00BD: return "½";
+ case 0x00BE: return "¾";
+ case 0x00BF: return "¿";
+ case 0x00C0: return "À";
+ case 0x00C1: return "Á";
+ case 0x00C2: return "Â";
+ case 0x00C3: return "Ã";
+ case 0x00C4: return "Ä";
+ case 0x00C5: return "Å";
+ case 0x00C6: return "Æ";
+ case 0x00C7: return "Ç";
+ case 0x00C8: return "È";
+ case 0x00C9: return "É";
+ case 0x00CA: return "Ê";
+ case 0x00CB: return "Ë";
+ case 0x00CC: return "Ì";
+ case 0x00CD: return "Í";
+ case 0x00CE: return "Î";
+ case 0x00CF: return "Ï";
+ case 0x00D0: return "Ð";
+ case 0x00D1: return "Ñ";
+ case 0x00D2: return "Ò";
+ case 0x00D3: return "Ó";
+ case 0x00D4: return "Ô";
+ case 0x00D5: return "Õ";
+ case 0x00D6: return "Ö";
+ case 0x00D7: return "×";
+ case 0x00D8: return "Ø";
+ case 0x00D9: return "Ù";
+ case 0x00DA: return "Ú";
+ case 0x00DB: return "Û";
+ case 0x00DC: return "Ü";
+ case 0x00DD: return "Ý";
+ case 0x00DE: return "Þ";
+ case 0x00DF: return "ß";
+ case 0x00E0: return "à";
+ case 0x00E1: return "á";
+ case 0x00E2: return "â";
+ case 0x00E3: return "ã";
+ case 0x00E4: return "ä";
+ case 0x00E5: return "å";
+ case 0x00E6: return "æ";
+ case 0x00E7: return "ç";
+ case 0x00E8: return "è";
+ case 0x00E9: return "é";
+ case 0x00EA: return "ê";
+ case 0x00EB: return "ë";
+ case 0x00EC: return "ì";
+ case 0x00ED: return "í";
+ case 0x00EE: return "î";
+ case 0x00EF: return "ï";
+ case 0x00F0: return "ð";
+ case 0x00F1: return "ñ";
+ case 0x00F2: return "ò";
+ case 0x00F3: return "ó";
+ case 0x00F4: return "ô";
+ case 0x00F5: return "õ";
+ case 0x00F6: return "ö";
+ case 0x00F7: return "÷";
+ case 0x00F8: return "ø";
+ case 0x00F9: return "ù";
+ case 0x00FA: return "ú";
+ case 0x00FB: return "û";
+ case 0x00FC: return "ü";
+ case 0x00FD: return "ý";
+ case 0x00FE: return "þ";
+ case 0x00FF: return "ÿ";
+ case 0x0152: return "Œ";
+ case 0x0153: return "œ";
+ case 0x0160: return "Š";
+ case 0x0161: return "š";
+ case 0x0178: return "Ÿ";
+ case 0x0192: return "ƒ";
+ case 0x0391: return "Α";
+ case 0x0392: return "Β";
+ case 0x0393: return "Γ";
+ case 0x0394: return "Δ";
+ case 0x0395: return "Ε";
+ case 0x0396: return "Ζ";
+ case 0x0397: return "Η";
+ case 0x0398: return "Θ";
+ case 0x0399: return "Ι";
+ case 0x039A: return "Κ";
+ case 0x039B: return "Λ";
+ case 0x039C: return "Μ";
+ case 0x039D: return "Ν";
+ case 0x039E: return "Ξ";
+ case 0x039F: return "Ο";
+ case 0x03A0: return "Π";
+ case 0x03A1: return "Ρ";
+ case 0x03A3: return "Σ";
+ case 0x03A4: return "Τ";
+ case 0x03A5: return "Υ";
+ case 0x03A6: return "Φ";
+ case 0x03A7: return "Χ";
+ case 0x03A8: return "Ψ";
+ case 0x03A9: return "Ω";
+ case 0x03B1: return "α";
+ case 0x03B2: return "β";
+ case 0x03B3: return "γ";
+ case 0x03B4: return "δ";
+ case 0x03B5: return "ε";
+ case 0x03B6: return "ζ";
+ case 0x03B7: return "η";
+ case 0x03B8: return "θ";
+ case 0x03B9: return "ι";
+ case 0x03BA: return "κ";
+ case 0x03BB: return "λ";
+ case 0x03BC: return "μ";
+ case 0x03BD: return "ν";
+ case 0x03BE: return "ξ";
+ case 0x03BF: return "ο";
+ case 0x03C0: return "π";
+ case 0x03C1: return "ρ";
+ case 0x03C2: return "ς";
+ case 0x03C3: return "σ";
+ case 0x03C4: return "τ";
+ case 0x03C5: return "υ";
+ case 0x03C6: return "φ";
+ case 0x03C7: return "χ";
+ case 0x03C8: return "ψ";
+ case 0x03C9: return "ω";
+ case 0x03D1: return "ϑ";
+ case 0x03D6: return "ϖ";
+ case 0x2013: return "–";
+ case 0x2014: return "—";
+ case 0x2018: return "‘";
+ case 0x2019: return "’";
+ case 0x201A: return "‚";
+ case 0x201C: return "“";
+ case 0x201D: return "”";
+ case 0x201E: return "„";
+ case 0x2020: return "†";
+ case 0x2021: return "‡";
+ case 0x2022: return "•";
+ case 0x2030: return "‰";
+ case 0x2032: return "′";
+ case 0x2033: return "″";
+ case 0x2039: return "‹";
+ case 0x203A: return "›";
+ case 0x203E: return "‾";
+ case 0x2044: return "⁄";
+ case 0x20AC: return "€";
+ case 0x2111: return "ℑ";
+ case 0x2118: return "℘";
+ case 0x211C: return "ℜ";
+ case 0x2122: return "™";
+ case 0x2135: return "ℵ";
+ case 0x2190: return "←";
+ case 0x2191: return "↑";
+ case 0x2192: return "→";
+ case 0x2193: return "↓";
+ case 0x2194: return "↔";
+ case 0x21D0: return "⇐";
+ case 0x21D1: return "⇑";
+ case 0x21D2: return "⇒";
+ case 0x21D3: return "⇓";
+ case 0x21D4: return "⇔";
+ case 0x2200: return "∀";
+ case 0x2202: return "∂";
+ case 0x2203: return "∃";
+ case 0x2205: return "∅";
+ case 0x2207: return "∇";
+ case 0x2208: return "∈";
+ case 0x2209: return "∉";
+ case 0x220B: return "∋";
+ case 0x220F: return "∏";
+ case 0x2211: return "∑";
+ case 0x2212: return "−";
+ case 0x2217: return "∗";
+ case 0x221A: return "√";
+ case 0x221D: return "∝";
+ case 0x221E: return "∞";
+ case 0x2220: return "∠";
+ case 0x2227: return "∧";
+ case 0x2228: return "∨";
+ case 0x2229: return "∩";
+ case 0x222A: return "∪";
+ case 0x222B: return "∫";
+ case 0x2234: return "∴";
+ case 0x223C: return "∼";
+ case 0x2245: return "≅";
+ case 0x2248: return "≈";
+ case 0x2260: return "≠";
+ case 0x2261: return "≡";
+ case 0x2264: return "≤";
+ case 0x2265: return "≥";
+ case 0x2282: return "⊂";
+ case 0x2283: return "⊃";
+ case 0x2284: return "⊄";
+ case 0x2286: return "⊆";
+ case 0x2287: return "⊇";
+ case 0x2295: return "⊕";
+ case 0x2297: return "⊗";
+ case 0x22A5: return "⊥";
+ case 0x22C5: return "⋅";
+ case 0x2308: return "⌈";
+ case 0x2309: return "⌉";
+ case 0x230A: return "⌊";
+ case 0x230B: return "⌋";
+ case 0x2329: return "⟨";
+ case 0x232A: return "⟩";
+ case 0x25CA: return "◊";
+ case 0x2660: return "♠";
+ case 0x2663: return "♣";
+ case 0x2665: return "♥";
+ case 0x2666: return "♦";
+ default: return to_unicode(code);
+ }
+ }
+ }
+
+ /*
* overstrike - returns TRUE if the glyph (i, name) is going to overstrike
* a previous glyph in sbuf.
* If TRUE the font is changed to bold and the previous sbuf
- [Groff] unicode support: HTML entity names,
Bruno Haible <=