[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Groff] unicode support, part 14: unicode fonts
From: |
Bruno Haible |
Subject: |
[Groff] unicode support, part 14: unicode fonts |
Date: |
Tue, 21 Feb 2006 18:55:04 +0100 |
User-agent: |
KMail/1.5 |
Here comes the patch that makes it possible to process manual pages with
Unicode characters without declaring them first in advance. With this
patch, an average Japanese manual page can be processed, but shows the
following problems:
1) Although the man page starts with
'\" t -*- coding: utf-8 -*-
the groff driver is not intelligent enough to run preconv. I have to
activate the -k option explicitly.
2) A few "cannot adjust line" and "can't break line" warnings.
3) The output lines on devutf8 device are still too long, because groff
doesn't know about the distinction between normal-width and double-width
characters.
4) When outputting to the devhtml device, some warnings appear:
warning: can't find special character `u6D41'
They appear to come from the first japanese character of each consecutive
run of consecutive characters. They are harmless; the HTML output is fine.
I can work on 2) to 4) in future patches.
2006-02-20 Bruno Haible <address@hidden>
Introduce Unicode fonts.
* font/devhtml/DESC.proto: Mark as unicode.
* font/devhtml/R.proto: Remove all charset entries that are already
in glyphuni.cpp.
* font/devutf8/DESC.proto: Mark as unicode.
* font/devutf8/R.proto: Remove all charset entries.
* src/include/font.h (class font): New static field 'is_unicode'.
Change order of fields.
* src/libs/libgroff/font.cpp: Include unicode.h.
(font::font): Update for changed order of fields.
(font::contains, font::get_width, font::get_height, font::get_depth,
font::get_italic_correction, font::get_left_italic_correction,
font::get_subscript_correction, font::get_character_type,
font::get_code, font::get_special_device_encoding): Handle both the
explicitly enumerated glyphs and use general code for Unicode fonts.
(font::load): Make the charset section optional when the font is
declared unicode.
(font::load_desc): Recognize the "unicode" attribute.
* src/libs/libgroff/fontfile.cpp (font::is_unicode): New variable.
diff -r -c3 groff-20060217.orig/font/devhtml/DESC.proto
groff-20060217/font/devhtml/DESC.proto
--- groff-20060217.orig/font/devhtml/DESC.proto 2004-10-08 09:08:08.000000000
+0200
+++ groff-20060217/font/devhtml/DESC.proto 2006-02-20 01:23:30.000000000
+0100
@@ -10,3 +10,4 @@
prepro pre-grohtml
use_charnames_in_special
pass_filenames
+unicode
diff -r -c3 groff-20060217.orig/font/devhtml/R.proto
groff-20060217/font/devhtml/R.proto
--- groff-20060217.orig/font/devhtml/R.proto 2006-02-04 19:51:39.000000000
+0100
+++ groff-20060217/font/devhtml/R.proto 2006-02-20 01:27:03.000000000 +0100
@@ -2,745 +2,7 @@
internalname 0
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
-* 24 0 0x002A
-+ 24 0 0x002B
-pl "
-, 24 0 0x002C
hy 24 0 0x002D
- "
-. 24 0 0x002E
-/ 24 0 0x002F
-sl "
-0 24 0 0x0030
-1 24 0 0x0031
-2 24 0 0x0032
-3 24 0 0x0033
-4 24 0 0x0034
-5 24 0 0x0035
-6 24 0 0x0036
-7 24 0 0x0037
-8 24 0 0x0038
-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 "
-A 24 0 0x0041
-B 24 0 0x0042
-C 24 0 0x0043
-D 24 0 0x0044
-E 24 0 0x0045
-F 24 0 0x0046
-G 24 0 0x0047
-H 24 0 0x0048
-I 24 0 0x0049
-J 24 0 0x004A
-K 24 0 0x004B
-L 24 0 0x004C
-M 24 0 0x004D
-N 24 0 0x004E
-O 24 0 0x004F
-P 24 0 0x0050
-Q 24 0 0x0051
-R 24 0 0x0052
-S 24 0 0x0053
-T 24 0 0x0054
-U 24 0 0x0055
-V 24 0 0x0056
-W 24 0 0x0057
-X 24 0 0x0058
-Y 24 0 0x0059
-Z 24 0 0x005A
-[ 24 0 0x005B
-lB "
-\ 24 0 0x005C
-rs "
-] 24 0 0x005D
-rB "
-^ 24 0 0x005E
-a^ "
-ha "
-_ 24 0 0x005F
-ru "
-ul "
-\` 24 0 0x0060
-ga "
-a 24 0 0x0061
-b 24 0 0x0062
-c 24 0 0x0063
-d 24 0 0x0064
-e 24 0 0x0065
-f 24 0 0x0066
-g 24 0 0x0067
-h 24 0 0x0068
-i 24 0 0x0069
-j 24 0 0x006A
-k 24 0 0x006B
-l 24 0 0x006C
-m 24 0 0x006D
-n 24 0 0x006E
-o 24 0 0x006F
-p 24 0 0x0070
-q 24 0 0x0071
-r 24 0 0x0072
-s 24 0 0x0073
-t 24 0 0x0074
-u 24 0 0x0075
-v 24 0 0x0076
-w 24 0 0x0077
-x 24 0 0x0078
-y 24 0 0x0079
-z 24 0 0x007A
-lC 24 0 0x007B
-{ "
-ba 24 0 0x007C
-or "
-| "
-rC 24 0 0x007D
-} "
-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
diff -r -c3 groff-20060217.orig/font/devutf8/DESC.proto
groff-20060217/font/devutf8/DESC.proto
--- groff-20060217.orig/font/devutf8/DESC.proto 2000-02-06 10:36:22.000000000
+0100
+++ groff-20060217/font/devutf8/DESC.proto 2006-02-20 01:23:30.000000000
+0100
@@ -6,3 +6,4 @@
fonts 4 R I B BI
tcommand
postpro grotty
+unicode
diff -r -c3 groff-20060217.orig/font/devutf8/R.proto
groff-20060217/font/devutf8/R.proto
--- groff-20060217.orig/font/devutf8/R.proto 2005-03-28 11:14:17.000000000
+0200
+++ groff-20060217/font/devutf8/R.proto 2006-02-20 01:23:30.000000000 +0100
@@ -1,819 +1,3 @@
name R
internalname 0
spacewidth 24
-charset
---- 24 0 0x0000
---- 24 0 0x0001
---- 24 0 0x0002
---- 24 0 0x0003
---- 24 0 0x0004
---- 24 0 0x0005
---- 24 0 0x0006
---- 24 0 0x0007
---- 24 0 0x0008
---- 24 0 0x0009
---- 24 0 0x000A
---- 24 0 0x000B
---- 24 0 0x000C
---- 24 0 0x000D
---- 24 0 0x000E
---- 24 0 0x000F
---- 24 0 0x0010
---- 24 0 0x0011
---- 24 0 0x0012
---- 24 0 0x0013
---- 24 0 0x0014
---- 24 0 0x0015
---- 24 0 0x0016
---- 24 0 0x0017
---- 24 0 0x0018
---- 24 0 0x0019
---- 24 0 0x001A
---- 24 0 0x001B
---- 24 0 0x001C
---- 24 0 0x001D
---- 24 0 0x001E
---- 24 0 0x001F
---- 24 0 0x0020
-! 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
-* 24 0 0x002A
-+ 24 0 0x002B
-pl "
-, 24 0 0x002C
---- 24 0 0x002D
-. 24 0 0x002E
-/ 24 0 0x002F
-sl "
-0 24 0 0x0030
-1 24 0 0x0031
-2 24 0 0x0032
-3 24 0 0x0033
-4 24 0 0x0034
-5 24 0 0x0035
-6 24 0 0x0036
-7 24 0 0x0037
-8 24 0 0x0038
-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 "
-A 24 0 0x0041
-B 24 0 0x0042
-C 24 0 0x0043
-D 24 0 0x0044
-E 24 0 0x0045
-F 24 0 0x0046
-G 24 0 0x0047
-H 24 0 0x0048
-I 24 0 0x0049
-J 24 0 0x004A
-K 24 0 0x004B
-L 24 0 0x004C
-M 24 0 0x004D
-N 24 0 0x004E
-O 24 0 0x004F
-P 24 0 0x0050
-Q 24 0 0x0051
-R 24 0 0x0052
-S 24 0 0x0053
-T 24 0 0x0054
-U 24 0 0x0055
-V 24 0 0x0056
-W 24 0 0x0057
-X 24 0 0x0058
-Y 24 0 0x0059
-Z 24 0 0x005A
-[ 24 0 0x005B
-lB "
-\ 24 0 0x005C
-rs "
-] 24 0 0x005D
-rB "
-a^ 24 0 0x005E
-^ "
-ha "
-_ 24 0 0x005F
-ru "
-ul "
-\` 24 0 0x0060
-ga "
-a 24 0 0x0061
-b 24 0 0x0062
-c 24 0 0x0063
-d 24 0 0x0064
-e 24 0 0x0065
-f 24 0 0x0066
-g 24 0 0x0067
-h 24 0 0x0068
-i 24 0 0x0069
-j 24 0 0x006A
-k 24 0 0x006B
-l 24 0 0x006C
-m 24 0 0x006D
-n 24 0 0x006E
-o 24 0 0x006F
-p 24 0 0x0070
-q 24 0 0x0071
-r 24 0 0x0072
-s 24 0 0x0073
-t 24 0 0x0074
-u 24 0 0x0075
-v 24 0 0x0076
-w 24 0 0x0077
-x 24 0 0x0078
-y 24 0 0x0079
-z 24 0 0x007A
-lC 24 0 0x007B
-{ "
-ba 24 0 0x007C
-or "
-| "
-rC 24 0 0x007D
-} "
-a~ 24 0 0x007E
-~ "
-ti "
---- 24 0 0x007F
---- 24 0 0x0080
---- 24 0 0x0081
---- 24 0 0x0082
---- 24 0 0x0083
---- 24 0 0x0084
---- 24 0 0x0085
---- 24 0 0x0086
---- 24 0 0x0087
---- 24 0 0x0088
---- 24 0 0x0089
---- 24 0 0x008A
---- 24 0 0x008B
---- 24 0 0x008C
---- 24 0 0x008D
---- 24 0 0x008E
---- 24 0 0x008F
---- 24 0 0x0090
---- 24 0 0x0091
---- 24 0 0x0092
---- 24 0 0x0093
---- 24 0 0x0094
---- 24 0 0x0095
---- 24 0 0x0096
---- 24 0 0x0097
---- 24 0 0x0098
---- 24 0 0x0099
---- 24 0 0x009A
---- 24 0 0x009B
---- 24 0 0x009C
---- 24 0 0x009D
---- 24 0 0x009E
---- 24 0 0x009F
---- 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 "
---- 24 0 0x00AD
-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
-- 24 0 0x2010
-hy "
-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
-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
-la 24 0 0x27E8
-ra 24 0 0x27E9
-ff 24 0 0xFB00
-fi 24 0 0xFB01
-fl 24 0 0xFB02
-Fi 24 0 0xFB03
-Fl 24 0 0xFB04
diff -r -c3 groff-20060217.orig/src/include/font.h
groff-20060217/src/include/font.h
--- groff-20060217.orig/src/include/font.h 2006-02-19 14:36:53.000000000
+0100
+++ groff-20060217/src/include/font.h 2006-02-20 22:13:53.000000000 +0100
@@ -248,6 +248,8 @@
// `pass_filenames' attribute.
static int use_charnames_in_special; // Nonzero if the DESC file has the
// `use_charnames_in_special' attribute.
+ static int is_unicode; // Nonzero if the DESC file has the `unicode'
+ // attribute.
static const char *image_generator; // The `image_generator' attribute
// given in the DESC file.
static const char **font_name_table; // The `fonts' attribute given in
@@ -269,22 +271,24 @@
// Used by get_kern().
int space_width; // The normal width of a space. Used by
// get_space_width().
+ int special; // 1 if this font is special, 0 otherwise. Used by
+ // is_special().
+ char *name; // The name of this font. Used by get_name().
+ char *internalname; // The `internalname' attribute of this font, or
+ // NULL. Used by get_internal_name().
+ double slant; // The natural slant angle (in degrees) of this
font.
int *ch_index; // Conversion table from font-independent character
// indices to indices for this particular font.
int nindices;
font_char_metric *ch; // Metrics information for every character in
this
- // font. The indices of this array are
+ // font (if !is_unicode) or for just some characters
+ // (if is_unicode). The indices of this array are
// font-specific, found as values in ch_index[].
int ch_used;
int ch_size;
- int special; // 1 if this font is special, 0 otherwise. Used by
- // is_special().
- char *name; // The name of this font. Used by get_name().
- char *internalname; // The `internalname' attribute of this font, or
- // NULL. Used by get_internal_name().
- double slant; // The natural slant angle (in degrees) of this
font.
font_widths_cache *widths_cache; // A cache of scaled character
// widths. Used by the get_width() function.
+
static FONT_COMMAND_HANDLER unknown_desc_command_handler; // A
// function defining the semantics of arbitrary
// commands in the DESC file.
diff -r -c3 groff-20060217.orig/src/libs/libgroff/font.cpp
groff-20060217/src/libs/libgroff/font.cpp
--- groff-20060217.orig/src/libs/libgroff/font.cpp 2006-02-19
14:36:53.000000000 +0100
+++ groff-20060217/src/libs/libgroff/font.cpp 2006-02-20 21:42:41.000000000
+0100
@@ -30,6 +30,7 @@
#include "error.h"
#include "cset.h"
#include "font.h"
+#include "unicode.h"
#include "paper.h"
const char *const WS = " \t\n\r";
@@ -151,8 +152,8 @@
/* font functions */
font::font(const char *s)
-: ligatures(0), kern_hash_table(0), space_width(0), ch_index(0), nindices(0),
- ch(0), ch_used(0), ch_size(0), special(0), widths_cache(0)
+: ligatures(0), kern_hash_table(0), space_width(0), special(0),
+ ch_index(0), nindices(0), ch(0), ch_used(0), ch_size(0), widths_cache(0)
{
name = new char[strlen(s) + 1];
strcpy(name, s);
@@ -249,7 +250,44 @@
{
int idx = glyph_to_index(g);
assert(idx >= 0);
- return idx < nindices && ch_index[idx] >= 0;
+ // Explicitly enumerated glyph?
+ if (idx < nindices && ch_index[idx] >= 0)
+ return 1;
+ if (is_unicode) {
+ // Unicode font
+ const char *name = glyph_to_name(g);
+ if (name != NULL) {
+ // Case 1: ASCII character.
+ if (name[0] == 'c' && name[1] == 'h' && name[2] == 'a' && name[3] == 'r'
+ && (name[4] >= '0' && name[4] <= '9')) {
+ int n = (name[4] - '0');
+ if (name[5] == '\0')
+ return 1;
+ if (n > 0 && (name[5] >= '0' && name[5] <= '9')) {
+ n = 10*n + (name[5] - '0');
+ if (name[6] == '\0')
+ return 1;
+ if (name[6] >= '0' && name[6] <= '9') {
+ n = 10*n + (name[6] - '0');
+ if (name[7] == '\0' && n < 128)
+ return 1;
+ }
+ }
+ }
+ // Case 2: Unicode character.
+ if (check_unicode_name(name))
+ return 1;
+ // Case 3: groff glyphs that map to Unicode.
+ const char *unicode = glyph_name_to_unicode(name);
+ if (unicode != NULL && strchr(unicode, '_') == NULL)
+ return 1;
+ }
+ // Case 99: Numbered character.
+ int n = glyph_to_number(g);
+ if (n >= 0)
+ return 1;
+ }
+ return 0;
}
int font::is_special()
@@ -274,68 +312,119 @@
int font::get_width(glyph *g, int point_size)
{
int idx = glyph_to_index(g);
- assert(idx >= 0 && idx < nindices);
- int i = ch_index[idx];
- assert(i >= 0);
-
- if (point_size == unitwidth || font::unscaled_charwidths)
- return ch[i].width;
-
- if (!widths_cache)
- widths_cache = new font_widths_cache(point_size, ch_size);
- else if (widths_cache->point_size != point_size) {
- font_widths_cache **p;
- for (p = &widths_cache; *p; p = &(*p)->next)
- if ((*p)->point_size == point_size)
- break;
- if (*p) {
- font_widths_cache *tem = *p;
- *p = (*p)->next;
- tem->next = widths_cache;
- widths_cache = tem;
- }
+ assert(idx >= 0);
+ if (idx < nindices && ch_index[idx] >= 0) {
+ // Explicitly enumerated glyph
+ int i = ch_index[idx];
+
+ if (point_size == unitwidth || font::unscaled_charwidths)
+ return ch[i].width;
+
+ if (!widths_cache)
+ widths_cache = new font_widths_cache(point_size, ch_size);
+ else if (widths_cache->point_size != point_size) {
+ font_widths_cache **p;
+ for (p = &widths_cache; *p; p = &(*p)->next)
+ if ((*p)->point_size == point_size)
+ break;
+ if (*p) {
+ font_widths_cache *tem = *p;
+ *p = (*p)->next;
+ tem->next = widths_cache;
+ widths_cache = tem;
+ }
+ else
+ widths_cache = new font_widths_cache(point_size, ch_size, widths_cache);
+ }
+ int &w = widths_cache->width[i];
+ if (w < 0)
+ w = scale(ch[i].width, point_size);
+ return w;
+ }
+ if (is_unicode) {
+ // Unicode font
+ int width = 24; // value found in the original font files
+ if (point_size == unitwidth || font::unscaled_charwidths)
+ return width;
else
- widths_cache = new font_widths_cache(point_size, ch_size, widths_cache);
+ return scale(width, point_size);
}
- int &w = widths_cache->width[i];
- if (w < 0)
- w = scale(ch[i].width, point_size);
- return w;
+ abort();
}
int font::get_height(glyph *g, int point_size)
{
int idx = glyph_to_index(g);
- assert(idx >= 0 && idx < nindices && ch_index[idx] >= 0);
- return scale(ch[ch_index[idx]].height, point_size);
+ assert(idx >= 0);
+ if (idx < nindices && ch_index[idx] >= 0) {
+ // Explicitly enumerated glyph
+ return scale(ch[ch_index[idx]].height, point_size);
+ }
+ if (is_unicode) {
+ // Unicode font
+ return 0; // value found in the original font files
+ }
+ abort();
}
int font::get_depth(glyph *g, int point_size)
{
int idx = glyph_to_index(g);
- assert(idx >= 0 && idx < nindices && ch_index[idx] >= 0);
- return scale(ch[ch_index[idx]].depth, point_size);
+ assert(idx >= 0);
+ if (idx < nindices && ch_index[idx] >= 0) {
+ // Explicitly enumerated glyph
+ return scale(ch[ch_index[idx]].depth, point_size);
+ }
+ if (is_unicode) {
+ // Unicode font
+ return 0; // value found in the original font files
+ }
+ abort();
}
int font::get_italic_correction(glyph *g, int point_size)
{
int idx = glyph_to_index(g);
- assert(idx >= 0 && idx < nindices && ch_index[idx] >= 0);
- return scale(ch[ch_index[idx]].italic_correction, point_size);
+ assert(idx >= 0);
+ if (idx < nindices && ch_index[idx] >= 0) {
+ // Explicitly enumerated glyph
+ return scale(ch[ch_index[idx]].italic_correction, point_size);
+ }
+ if (is_unicode) {
+ // Unicode font
+ return 0; // value found in the original font files
+ }
+ abort();
}
int font::get_left_italic_correction(glyph *g, int point_size)
{
int idx = glyph_to_index(g);
- assert(idx >= 0 && idx < nindices && ch_index[idx] >= 0);
- return scale(ch[ch_index[idx]].pre_math_space, point_size);
+ assert(idx >= 0);
+ if (idx < nindices && ch_index[idx] >= 0) {
+ // Explicitly enumerated glyph
+ return scale(ch[ch_index[idx]].pre_math_space, point_size);
+ }
+ if (is_unicode) {
+ // Unicode font
+ return 0; // value found in the original font files
+ }
+ abort();
}
int font::get_subscript_correction(glyph *g, int point_size)
{
int idx = glyph_to_index(g);
- assert(idx >= 0 && idx < nindices && ch_index[idx] >= 0);
- return scale(ch[ch_index[idx]].subscript_correction, point_size);
+ assert(idx >= 0);
+ if (idx < nindices && ch_index[idx] >= 0) {
+ // Explicitly enumerated glyph
+ return scale(ch[ch_index[idx]].subscript_correction, point_size);
+ }
+ if (is_unicode) {
+ // Unicode font
+ return 0; // value found in the original font files
+ }
+ abort();
}
int font::get_space_width(int point_size)
@@ -385,15 +474,66 @@
int font::get_character_type(glyph *g)
{
int idx = glyph_to_index(g);
- assert(idx >= 0 && idx < nindices && ch_index[idx] >= 0);
- return ch[ch_index[idx]].type;
+ assert(idx >= 0);
+ if (idx < nindices && ch_index[idx] >= 0) {
+ // Explicitly enumerated glyph
+ return ch[ch_index[idx]].type;
+ }
+ if (is_unicode) {
+ // Unicode font
+ return 0; // value found in the original font files
+ }
+ abort();
}
int font::get_code(glyph *g)
{
int idx = glyph_to_index(g);
- assert(idx >= 0 && idx < nindices && ch_index[idx] >= 0);
- return ch[ch_index[idx]].code;
+ assert(idx >= 0);
+ if (idx < nindices && ch_index[idx] >= 0) {
+ // Explicitly enumerated glyph
+ return ch[ch_index[idx]].code;
+ }
+ if (is_unicode) {
+ // Unicode font
+ const char *name = glyph_to_name(g);
+ if (name != NULL) {
+ // Case 1: ASCII character.
+ if (name[0] == 'c' && name[1] == 'h' && name[2] == 'a' && name[3] == 'r'
+ && (name[4] >= '0' && name[4] <= '9')) {
+ int n = (name[4] - '0');
+ if (name[5] == '\0')
+ return n;
+ if (n > 0 && (name[5] >= '0' && name[5] <= '9')) {
+ n = 10*n + (name[5] - '0');
+ if (name[6] == '\0')
+ return n;
+ if (name[6] >= '0' && name[6] <= '9') {
+ n = 10*n + (name[6] - '0');
+ if (name[7] == '\0' && n < 128)
+ return n;
+ }
+ }
+ }
+ // Case 2: Unicode character.
+ if (check_unicode_name(name)) {
+ char *ignore;
+ return (int)strtol(name+1, &ignore, 16);
+ }
+ // Case 3: groff glyphs that map to Unicode.
+ const char *unicode = glyph_name_to_unicode(name);
+ if (unicode != NULL && strchr(unicode, '_') == NULL) {
+ char *ignore;
+ return (int)strtol(unicode, &ignore, 16);
+ }
+ }
+ // Case 99: Numbered character.
+ int n = glyph_to_number(g);
+ if (n >= 0)
+ return n;
+ }
+ // The caller must check contains(g) before calling get_code(g).
+ abort();
}
const char *font::get_name()
@@ -409,8 +549,16 @@
const char *font::get_special_device_encoding(glyph *g)
{
int idx = glyph_to_index(g);
- assert(idx >= 0 && idx < nindices && ch_index[idx] >= 0);
- return ch[ch_index[idx]].special_device_coding;
+ assert(idx >= 0);
+ if (idx < nindices && ch_index[idx] >= 0) {
+ // Explicitly enumerated glyph
+ return ch[ch_index[idx]].special_device_coding;
+ }
+ if (is_unicode) {
+ // Unicode font
+ return NULL;
+ }
+ abort();
}
const char *font::get_image_generator()
@@ -598,8 +746,8 @@
char *p;
for (;;) {
if (!t.next()) {
- t.error("missing charset command");
- return 0;
+ p = 0;
+ break;
}
p = strtok(t.buf, WS);
if (strcmp(p, "name") == 0) {
@@ -665,147 +813,154 @@
}
if (head_only)
return 1;
- char *command = p;
int had_charset = 0;
- t.skip_comments = 0;
- while (command) {
- if (strcmp(command, "kernpairs") == 0) {
- for (;;) {
- if (!t.next()) {
- command = 0;
- break;
- }
- char *c1 = strtok(t.buf, WS);
- if (c1 == 0)
- continue;
- char *c2 = strtok(0, WS);
- if (c2 == 0) {
- command = c1;
- break;
- }
- p = strtok(0, WS);
- if (p == 0) {
- t.error("missing kern amount");
- return 0;
- }
- int n;
- if (sscanf(p, "%d", &n) != 1) {
- t.error("bad kern amount `%1'", p);
- return 0;
- }
- glyph *g1 = name_to_glyph(c1);
- glyph *g2 = name_to_glyph(c2);
- add_kern(g1, g2, n);
- }
+ if (p == 0) {
+ if (!is_unicode) {
+ t.error("missing charset command");
+ return 0;
}
- else if (strcmp(command, "charset") == 0) {
- had_charset = 1;
- glyph *last_glyph = NULL;
- for (;;) {
- if (!t.next()) {
- command = 0;
- break;
- }
- char *nm = strtok(t.buf, WS);
- if (nm == 0)
- continue; // I dont think this should happen
- p = strtok(0, WS);
- if (p == 0) {
- command = nm;
- break;
- }
- if (p[0] == '"') {
- if (last_glyph == NULL) {
- t.error("first charset entry is duplicate");
- return 0;
- }
- if (strcmp(nm, "---") == 0) {
- t.error("unnamed character cannot be duplicate");
- return 0;
+ } else {
+ char *command = p;
+ t.skip_comments = 0;
+ while (command) {
+ if (strcmp(command, "kernpairs") == 0) {
+ for (;;) {
+ if (!t.next()) {
+ command = 0;
+ break;
}
- glyph *g = name_to_glyph(nm);
- copy_entry(g, last_glyph);
- }
- else {
- font_char_metric metric;
- metric.height = 0;
- metric.depth = 0;
- metric.pre_math_space = 0;
- metric.italic_correction = 0;
- metric.subscript_correction = 0;
- int nparms = sscanf(p, "%d,%d,%d,%d,%d,%d",
- &metric.width, &metric.height, &metric.depth,
- &metric.italic_correction,
- &metric.pre_math_space,
- &metric.subscript_correction);
- if (nparms < 1) {
- t.error("bad width for `%1'", nm);
- return 0;
+ char *c1 = strtok(t.buf, WS);
+ if (c1 == 0)
+ continue;
+ char *c2 = strtok(0, WS);
+ if (c2 == 0) {
+ command = c1;
+ break;
}
p = strtok(0, WS);
if (p == 0) {
- t.error("missing character type for `%1'", nm);
+ t.error("missing kern amount");
return 0;
}
- int type;
- if (sscanf(p, "%d", &type) != 1) {
- t.error("bad character type for `%1'", nm);
+ int n;
+ if (sscanf(p, "%d", &n) != 1) {
+ t.error("bad kern amount `%1'", p);
return 0;
}
- if (type < 0 || type > 255) {
- t.error("character type `%1' out of range", type);
- return 0;
+ glyph *g1 = name_to_glyph(c1);
+ glyph *g2 = name_to_glyph(c2);
+ add_kern(g1, g2, n);
+ }
+ }
+ else if (strcmp(command, "charset") == 0) {
+ had_charset = 1;
+ glyph *last_glyph = NULL;
+ for (;;) {
+ if (!t.next()) {
+ command = 0;
+ break;
}
- metric.type = type;
+ char *nm = strtok(t.buf, WS);
+ if (nm == 0)
+ continue; // I dont think this should happen
p = strtok(0, WS);
if (p == 0) {
- t.error("missing code for `%1'", nm);
- return 0;
- }
- char *ptr;
- metric.code = (int)strtol(p, &ptr, 0);
- if (metric.code == 0 && ptr == p) {
- t.error("bad code `%1' for character `%2'", p, nm);
- return 0;
- }
- p = strtok(0, WS);
- if ((p == NULL) || (strcmp(p, "--") == 0)) {
- metric.special_device_coding = NULL;
- }
- else {
- char *nam = new char[strlen(p) + 1];
- strcpy(nam, p);
- metric.special_device_coding = nam;
+ command = nm;
+ break;
}
- if (strcmp(nm, "---") == 0) {
- last_glyph = number_to_glyph(metric.code);
- add_entry(last_glyph, metric);
+ if (p[0] == '"') {
+ if (last_glyph == NULL) {
+ t.error("first charset entry is duplicate");
+ return 0;
+ }
+ if (strcmp(nm, "---") == 0) {
+ t.error("unnamed character cannot be duplicate");
+ return 0;
+ }
+ glyph *g = name_to_glyph(nm);
+ copy_entry(g, last_glyph);
}
else {
- last_glyph = name_to_glyph(nm);
- add_entry(last_glyph, metric);
- copy_entry(number_to_glyph(metric.code), last_glyph);
+ font_char_metric metric;
+ metric.height = 0;
+ metric.depth = 0;
+ metric.pre_math_space = 0;
+ metric.italic_correction = 0;
+ metric.subscript_correction = 0;
+ int nparms = sscanf(p, "%d,%d,%d,%d,%d,%d",
+ &metric.width, &metric.height, &metric.depth,
+ &metric.italic_correction,
+ &metric.pre_math_space,
+ &metric.subscript_correction);
+ if (nparms < 1) {
+ t.error("bad width for `%1'", nm);
+ return 0;
+ }
+ p = strtok(0, WS);
+ if (p == 0) {
+ t.error("missing character type for `%1'", nm);
+ return 0;
+ }
+ int type;
+ if (sscanf(p, "%d", &type) != 1) {
+ t.error("bad character type for `%1'", nm);
+ return 0;
+ }
+ if (type < 0 || type > 255) {
+ t.error("character type `%1' out of range", type);
+ return 0;
+ }
+ metric.type = type;
+ p = strtok(0, WS);
+ if (p == 0) {
+ t.error("missing code for `%1'", nm);
+ return 0;
+ }
+ char *ptr;
+ metric.code = (int)strtol(p, &ptr, 0);
+ if (metric.code == 0 && ptr == p) {
+ t.error("bad code `%1' for character `%2'", p, nm);
+ return 0;
+ }
+ p = strtok(0, WS);
+ if ((p == NULL) || (strcmp(p, "--") == 0)) {
+ metric.special_device_coding = NULL;
+ }
+ else {
+ char *nam = new char[strlen(p) + 1];
+ strcpy(nam, p);
+ metric.special_device_coding = nam;
+ }
+ if (strcmp(nm, "---") == 0) {
+ last_glyph = number_to_glyph(metric.code);
+ add_entry(last_glyph, metric);
+ }
+ else {
+ last_glyph = name_to_glyph(nm);
+ add_entry(last_glyph, metric);
+ copy_entry(number_to_glyph(metric.code), last_glyph);
+ }
}
}
+ if (last_glyph == NULL) {
+ t.error("I didn't seem to find any characters");
+ return 0;
+ }
}
- if (last_glyph == NULL) {
- t.error("I didn't seem to find any characters");
+ else {
+ t.error("unrecognised command `%1' after `kernpairs' or `charset'
command",
+ command);
return 0;
}
}
- else {
- t.error("unrecognised command `%1' after `kernpairs' or `charset'
command",
- command);
- return 0;
- }
+ compact();
}
- if (!had_charset) {
+ if (!is_unicode && !had_charset) {
t.error("missing charset command");
return 0;
}
if (space_width == 0)
space_width = scale_round(unitwidth, res, 72*3*sizescale);
- compact();
return 1;
}
@@ -995,6 +1150,8 @@
tcommand = 1;
else if (strcmp("use_charnames_in_special", p) == 0)
use_charnames_in_special = 1;
+ else if (strcmp("unicode", p) == 0)
+ is_unicode = 1;
else if (strcmp("image_generator", p) == 0) {
p = strtok(0, WS);
if (!p) {
diff -r -c3 groff-20060217.orig/src/libs/libgroff/fontfile.cpp
groff-20060217/src/libs/libgroff/fontfile.cpp
--- groff-20060217.orig/src/libs/libgroff/fontfile.cpp 2005-07-07
13:16:42.000000000 +0200
+++ groff-20060217/src/libs/libgroff/fontfile.cpp 2006-02-20
01:23:30.000000000 +0100
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004, 2006
Free Software Foundation, Inc.
Written by James Clark (address@hidden)
@@ -47,6 +47,7 @@
int font::pass_filenames = 0;
int font::unscaled_charwidths = 0;
int font::use_charnames_in_special = 0;
+int font::is_unicode = 0;
const char *font::image_generator = NULL;
const char **font::font_name_table = 0;
int *font::sizes = 0;
- [Groff] unicode support, part 14: unicode fonts,
Bruno Haible <=