CVSROOT: /cvsroot/groff Module name: groff Branch: Changes by: Werner LEMBERG <[EMAIL PROTECTED]> 06/02/26 22:21:38
Modified files: . : ChangeLog doc : Makefile.sub font/devhtml : DESC.proto R.proto font/devutf8 : DESC.proto R.proto src/include : font.h src/libs/libgroff: font.cpp fontfile.cpp Log message: * doc/Makefile.sub (HTMLEXAMPLEFILESALL): New variable. (CLEANADD): Use it. (install_html, uninstall_sub): Updated. 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 * (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. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/groff/groff/ChangeLog.diff?tr1=1.916&tr2=1.917&r1=text&r2=text http://cvs.savannah.gnu.org/viewcvs/groff/groff/doc/Makefile.sub.diff?tr1=1.25&tr2=1.26&r1=text&r2=text http://cvs.savannah.gnu.org/viewcvs/groff/groff/font/devhtml/DESC.proto.diff?tr1=1.4&tr2=1.5&r1=text&r2=text http://cvs.savannah.gnu.org/viewcvs/groff/groff/font/devhtml/R.proto.diff?tr1=1.28&tr2=1.29&r1=text&r2=text http://cvs.savannah.gnu.org/viewcvs/groff/groff/font/devutf8/DESC.proto.diff?tr1=1.1.1.1&tr2=1.2&r1=text&r2=text http://cvs.savannah.gnu.org/viewcvs/groff/groff/font/devutf8/R.proto.diff?tr1=1.33&tr2=1.34&r1=text&r2=text http://cvs.savannah.gnu.org/viewcvs/groff/groff/src/include/font.h.diff?tr1=1.15&tr2=1.16&r1=text&r2=text http://cvs.savannah.gnu.org/viewcvs/groff/groff/src/libs/libgroff/font.cpp.diff?tr1=1.12&tr2=1.13&r1=text&r2=text http://cvs.savannah.gnu.org/viewcvs/groff/groff/src/libs/libgroff/fontfile.cpp.diff?tr1=1.4&tr2=1.5&r1=text&r2=text Patches: Index: groff/ChangeLog diff -u groff/ChangeLog:1.916 groff/ChangeLog:1.917 --- groff/ChangeLog:1.916 Sun Feb 26 14:03:25 2006 +++ groff/ChangeLog Sun Feb 26 22:21:37 2006 @@ -1,3 +1,32 @@ +2006-02-26 Werner LEMBERG <[EMAIL PROTECTED]> + + * doc/Makefile.sub (HTMLEXAMPLEFILESALL): New variable. + (CLEANADD): Use it. + (install_html, uninstall_sub): Updated. + +2006-02-26 Bruno Haible <[EMAIL PROTECTED]> + + 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 (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. + 2006-02-26 Claudio Fontana <[EMAIL PROTECTED]> * Makefile.in: Add comment about DESTDIR. Index: groff/doc/Makefile.sub diff -u groff/doc/Makefile.sub:1.25 groff/doc/Makefile.sub:1.26 --- groff/doc/Makefile.sub:1.25 Sun Feb 26 14:03:25 2006 +++ groff/doc/Makefile.sub Sun Feb 26 22:21:37 2006 @@ -77,6 +77,9 @@ HTMLEXAMPLEFILES=\ webpage.html +HTMLEXAMPLEFILESALL=\ + webpage*.html + HTMLEXAMPLEIMAGEFILES=\ webpage* @@ -87,7 +90,7 @@ CLEANADD=\ $(PROCESSEDDOCFILES) \ $(PROCESSEDEXAMPLEFILES) \ - $(HTMLEXAMPLEFILES) \ + $(HTMLEXAMPLEFILESALL) \ $(HTMLDOCFILESALL) \ groff.aux groff.cp* groff.dvi groff.es* groff.fn* groff.html groff.ky* \ groff.log groff.ma* groff.op* groff.pdf groff.pg* groff.ps groff.rq* \ @@ -210,7 +213,7 @@ $(DESTDIR)$(htmldocimagedir) -test -d $(DESTDIR)$(exampledir) \ || $(mkinstalldirs) $(DESTDIR)$(exampledir) - for f in $(HTMLEXAMPLEFILES); do \ + for f in `ls $(HTMLEXAMPLEFILESALL)`; do \ rm -f $(DESTDIR)$(exampledir)/$$f; \ $(INSTALL_DATA) $$f $(DESTDIR)$(exampledir)/$$f; \ done @@ -235,7 +238,7 @@ -rm -f $(DESTDIR)$(htmldocimagedir)/$(HTMLDOCIMAGEFILES) -rmdir $(DESTDIR)$(htmldocimagedir) -for f in $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES) \ - $(HTMLEXAMPLEFILES); do \ + `ls $(HTMLEXAMPLEFILESALL)`; do \ rm -f $(DESTDIR)$(exampledir)/$$f; \ done -rm -f $(DESTDIR)$(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES) Index: groff/font/devhtml/DESC.proto diff -u groff/font/devhtml/DESC.proto:1.4 groff/font/devhtml/DESC.proto:1.5 --- groff/font/devhtml/DESC.proto:1.4 Fri Oct 8 07:08:08 2004 +++ groff/font/devhtml/DESC.proto Sun Feb 26 22:21:37 2006 @@ -10,3 +10,4 @@ prepro pre-grohtml use_charnames_in_special pass_filenames +unicode Index: groff/font/devhtml/R.proto diff -u groff/font/devhtml/R.proto:1.28 groff/font/devhtml/R.proto:1.29 --- groff/font/devhtml/R.proto:1.28 Thu Feb 23 20:09:51 2006 +++ groff/font/devhtml/R.proto Sun Feb 26 22:21:37 2006 @@ -2,743 +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 " -ga 24 0 0x0060 -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 Index: groff/font/devutf8/DESC.proto diff -u groff/font/devutf8/DESC.proto:1.1.1.1 groff/font/devutf8/DESC.proto:1.2 --- groff/font/devutf8/DESC.proto:1.1.1.1 Sun Feb 6 09:36:22 2000 +++ groff/font/devutf8/DESC.proto Sun Feb 26 22:21:37 2006 @@ -6,3 +6,4 @@ fonts 4 R I B BI tcommand postpro grotty +unicode Index: groff/font/devutf8/R.proto diff -u groff/font/devutf8/R.proto:1.33 groff/font/devutf8/R.proto:1.34 --- groff/font/devutf8/R.proto:1.33 Thu Feb 23 20:09:51 2006 +++ groff/font/devutf8/R.proto Sun Feb 26 22:21:37 2006 @@ -1,817 +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 " -ga 24 0 0x0060 -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 Index: groff/src/include/font.h diff -u groff/src/include/font.h:1.15 groff/src/include/font.h:1.16 --- groff/src/include/font.h:1.15 Thu Feb 23 20:00:47 2006 +++ groff/src/include/font.h Sun Feb 26 22:21:37 2006 @@ -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. Index: groff/src/libs/libgroff/font.cpp diff -u groff/src/libs/libgroff/font.cpp:1.12 groff/src/libs/libgroff/font.cpp:1.13 --- groff/src/libs/libgroff/font.cpp:1.12 Thu Feb 23 20:00:47 2006 +++ groff/src/libs/libgroff/font.cpp Sun Feb 26 22:21:37 2006 @@ -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 *nm = glyph_to_name(g); + if (nm != NULL) { + // ASCII character? + if (nm[0] == 'c' && nm[1] == 'h' && nm[2] == 'a' && nm[3] == 'r' + && (nm[4] >= '0' && nm[4] <= '9')) { + int n = (nm[4] - '0'); + if (nm[5] == '\0') + return 1; + if (n > 0 && (nm[5] >= '0' && nm[5] <= '9')) { + n = 10*n + (nm[5] - '0'); + if (nm[6] == '\0') + return 1; + if (nm[6] >= '0' && nm[6] <= '9') { + n = 10*n + (nm[6] - '0'); + if (nm[7] == '\0' && n < 128) + return 1; + } + } + } + // Unicode character? + if (check_unicode_name(nm)) + return 1; + // groff glyph name that maps to Unicode? + const char *unicode = glyph_name_to_unicode(nm); + if (unicode != NULL && strchr(unicode, '_') == NULL) + return 1; + } + // Numbered character? + int n = glyph_to_number(g); + if (n >= 0) + return 1; + } + return 0; } int font::is_special() @@ -274,68 +312,132 @@ 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 + // XXX: this must be eventually moved back to the + // font description file! + 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 + // XXX: this must be eventually moved back to the + // font description file! + } + 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 + // XXX: this must be eventually moved back to the + // font description file! + } + 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 + // XXX: this must be eventually moved back to the + // font description file! + } + 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 + // XXX: this must be eventually moved back to the + // font description file! + } + 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 + // XXX: this must be eventually moved back to the + // font description file! + } + abort(); } int font::get_space_width(int point_size) @@ -385,15 +487,68 @@ 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 + // XXX: this must be eventually moved back to the + // font description file! + } + 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 *nm = glyph_to_name(g); + if (nm != NULL) { + // ASCII character? + if (nm[0] == 'c' && nm[1] == 'h' && nm[2] == 'a' && nm[3] == 'r' + && (nm[4] >= '0' && nm[4] <= '9')) { + int n = (nm[4] - '0'); + if (nm[5] == '\0') + return n; + if (n > 0 && (nm[5] >= '0' && nm[5] <= '9')) { + n = 10*n + (nm[5] - '0'); + if (nm[6] == '\0') + return n; + if (nm[6] >= '0' && nm[6] <= '9') { + n = 10*n + (nm[6] - '0'); + if (nm[7] == '\0' && n < 128) + return n; + } + } + } + // Unicode character? + if (check_unicode_name(nm)) { + char *ignore; + return (int)strtol(nm + 1, &ignore, 16); + } + // groff glyphs that map to Unicode? + const char *unicode = glyph_name_to_unicode(nm); + if (unicode != NULL && strchr(unicode, '_') == NULL) { + char *ignore; + return (int)strtol(unicode, &ignore, 16); + } + } + // 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 +564,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 +761,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 +828,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 +1165,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) { Index: groff/src/libs/libgroff/fontfile.cpp diff -u groff/src/libs/libgroff/fontfile.cpp:1.4 groff/src/libs/libgroff/fontfile.cpp:1.5 --- groff/src/libs/libgroff/fontfile.cpp:1.4 Thu May 26 21:02:00 2005 +++ groff/src/libs/libgroff/fontfile.cpp Sun Feb 26 22:21:38 2006 @@ -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 ([EMAIL PROTECTED]) @@ -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-commit mailing list Groff-commit@gnu.org http://lists.gnu.org/mailman/listinfo/groff-commit